// JavaScript Document

var focusGiorno = false;
var focusMese = false;
var focusAnno = false;

var selectedFirstGiorno = false;
var selectedFirstMese = false;
var selectedFirstAnno = false;

function checkNascita()
{
	unselectField('giorno');
	if(selectedFirstGiorno && selectedFirstMese && selectedFirstAnno && !focusGiorno && !focusMese && !focusAnno)
	{
		var currentTime = new Date();
		var month = currentTime.getMonth() + 1;
		var day = currentTime.getDate();
		var year = currentTime.getFullYear() - 18;
		var frm = document.forms['formRegistrazione'];
		var num1 = frm.giorno.selectedIndex;
		var num2 = frm.mese.selectedIndex;
		var num3 = frm.anno.selectedIndex;
		//var nascita = frm.giorno.options[num1].value + "/" + frm.mese.options[num2].value + "/" + frm.anno.options[num3].value;
		var giorno = parseInt(frm.giorno.options[num1].value);
		var mese = parseInt(frm.mese.options[num2].value);
		if( giorno == 31 && (mese == 2 || mese == 4 || mese == 6 || mese == 9 || mese == 11) )
		{
			return createAdvise('giorno', "Il mese selezionato è di 30 giorni", 12);
		}
		else
		{
			var diciottoAnniFa = new Date();
			diciottoAnniFa.setFullYear(year, month, day);
			var nascita = new Date();
			nascita.setFullYear(frm.anno.options[num3].value,frm.mese.options[num2].value-1,frm.giorno.options[num1].value);
			if(nascita > diciottoAnniFa)
			{
				return createAdvise('giorno', "Possono iscriversi solo utenti maggiorenni", 12);
			}
		}
	}
	hideBaloon();
	return true;
}

function unselectField(id)
{
	if(id=="giorno")
	{
		document.getElementById("giorno").className = "select";
		document.getElementById("mese").className = "select";
		document.getElementById("anno").className = "select";
		focusGiorno = focusMese = focusAnno = false;
	}
	else
		document.forms['formRegistrazione'].elements[id].style.border = "1px #E3E3E3 solid";
}

function selectField(id)
{
	if(id=="giorno")
	{
		document.getElementById("giorno").className = "formSelected";
		document.getElementById("mese").className = "formSelected";
		document.getElementById("anno").className = "formSelected";
	}
	else
		document.forms['formRegistrazione'].elements[id].style.border = "1px #f26667 solid";
	//document.forms['formRegistrazione'].elements[id].focus();
}

function checkUserExist()
{
}

function checkEmailValid()
{
	unselectField('email');
	var at="@"
	var dot="."	
	var obj = document.forms['formRegistrazione'].elements['email'];
	var str = "";
	
	if(document.all)
		str = obj.value;
	else
		str = document.forms['formRegistrazione'].elements['email'].value;
		
	var lat=str.indexOf(at)
	var lstr=str.length
	var ldot=str.indexOf(dot)
	var esito = true;
	
	if (str.indexOf(at)==-1)
	   esito = false;
	
	if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr)
		esito = false;
	
	if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr)
		esito = false;
	
	if (str.indexOf(at,(lat+1))!=-1)
		esito = false;
	
	if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot)
		esito = false;
	
	if (str.indexOf(dot,(lat+2))==-1)
		esito = false;
	
	if (str.indexOf(" ")!=-1)
		esito = false;
	
	if (str.lastIndexOf(".") == str.length-1)
		esito = false;
	
	if(!esito)
		return createAdvise('email', "email non valida", 6);
	hideBaloon();
	
	return true;
}

function checkEmail()
{
	if( checkEmailValid() )
	{
		var obj = document.forms['formRegistrazione'].elements['email'];
		if(document.all)
			str = obj.value;
		else
			str = document.forms['formRegistrazione'].elements['email'].value;
		sendRequestEmail(str);
	}
}

function checkCF()
{
	var nTempNum, nAppoNum, i, szTempCodFisc, szLastChar, szValued, szInValued, szCodFisc;
	var obj = document.forms['formRegistrazione'].elements['codicefiscale'];
	unselectField('codicefiscale');
	
	if(document.all)
		szCodFisc = obj.value;
	else
		szCodFisc = document.forms['formRegistrazione'].elements['codicefiscale'].value;
		
	if (szCodFisc.length<16)
		return createAdvise('codicefiscale', "codice fiscale non valido", 2);
	
	if (szCodFisc == "")
		return createAdvise('codicefiscale', "codice fiscale non valido", 2);
	else 
	{
		szCodFisc =szCodFisc.toUpperCase();
		szLastChar = szCodFisc.substr(szCodFisc.length - 1,1);
		szTempCodFisc =szCodFisc.substr(0,szCodFisc.length - 1);
		nTempNum = 0;
		i = 0;
	
		while (true)
		{
			szValued="B1A0KKPPLLC2QQD3RRE4VVOOSSF5TTG6UUH7MMI8NNJ9WWZZYYXX";
			// I DISPARI
			szInValued=szTempCodFisc.substr(i,1);
			nAppoNum = szValued.search(szInValued);
			nTempNum = nTempNum + (nAppoNum &  0x7FFE) / 2;
			i = i + 1;
			if (i>15)
				break;
			szValued="A0B1C2D3E4F5G6H7I8J9KKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ";
			// I PARI
			szInValued=szTempCodFisc.substr(i,1);
			nAppoNum = szValued.search(szInValued);
			nTempNum =  nTempNum + (nAppoNum &  0x7FFE) / 2;
			i = i + 1;
		}
		nTempNum = nTempNum % 26; //mod
		szValued="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
		szValued= szValued.substr(nTempNum, 1);
		if (szValued==szLastChar){hideBaloon(); return true;}
		else return createAdvise('codicefiscale', "codice fiscale non valido", 2);
	}

}

function checkStandardField(id)
{
	var num = 0;
	if(id == "nome") num = 0;
	else if(id == "cognome") num = 1;
	else if(id == "indirizzo") num = 3;
	else if(id == "citta") num = 4;
	
	var obj = document.forms['formRegistrazione'].elements[id];
	unselectField(id)
	var str = "";
	
	if(document.all)
	{
		str = obj.value.toLowerCase();
		if(str.length < 1)
			return createAdvise(id, "compilare il campo " + obj.name, num);
	}
	else
	{
		str = document.forms['formRegistrazione'].elements[id].value.toLowerCase();
		if(str.length < 1)
			return createAdvise(id, "compilare il campo " + document.forms['formRegistrazione'].elements[id].name, num);
	}
	
	if( checkSQLSyntax(str) )
		return createAdvise(id, "il campo " + document.forms['formRegistrazione'].elements[id].name + " contiene caratteri non ammessi", num);
	hideBaloon();
	return true;
}

function checkCap()
{
	var obj = document.forms['formRegistrazione'].elements['cap'];
	unselectField('cap');
	
	var myRegex = /\d{5}/; //5 cifre
	
	if(document.all)
	{
		if( !myRegex.test(obj.value) )
			return createAdvise('cap', "cap non valido", 6);
	}
	else
	{
		if( !myRegex.test(document.forms['formRegistrazione'].elements['cap'].value) )
			return createAdvise('cap', "cap non valido", 6);
	}
	hideBaloon();
	return true;
}

function checkProvincia()
{
	var obj = document.forms['formRegistrazione'].elements['provincia'];
	unselectField('provincia');
	
	if(document.all)
	{
		if( obj.value.length < 2 || !isAlphabetic(obj.value) )
			return createAdvise('provincia', "provincia non valida", 5);
	}
	else
	{
		var val = document.forms['formRegistrazione'].elements['provincia'].value;
		if( val.length < 2 || !isAlphabetic(val) )
			return createAdvise('provincia', "provincia non valida", 5);
	}
	hideBaloon();
	return true;
}

function checkPasswordValid(id)
{
	if(id == "ripeti" || document.forms['formRegistrazione'].elements['ripeti'].value != "")
	{
		return comparePassword();
	}
	else
	{
		var myRegex = /\w/i;
		var obj = document.forms['formRegistrazione'].elements[id];
		unselectField(id);
		
		if(document.all)
		{
			if( obj.value.length < 6 || !myRegex.test(obj.value) )
				return createAdvise(id, "compilare il campo " + obj.name + " correttamente, la password deve essere almeno 6 caratteri", 10);
		}
		else
		{
			var val = document.forms['formRegistrazione'].elements[id].value;
			if( val.length < 6 || val.length > 13 || !myRegex.test(val) )
			{
				if(id == "ripeti")
					return createAdvise(id, "compilare il campo " + document.forms['formRegistrazione'].elements[id].name + " correttamente, la password deve essere almeno 6 caratteri e massimo 13", 11);
				else
					return createAdvise(id, "compilare il campo " + document.forms['formRegistrazione'].elements[id].name + " correttamente, la password deve essere almeno 6 caratteri e massimo 13", 10);
			}
		}
	}
	hideBaloon();
	return true;
}

function comparePassword()
{
	unselectField('ripeti');
	if(document.forms['formRegistrazione'].elements['password'].value != document.forms['formRegistrazione'].elements['ripeti'].value)
		return createAdvise('ripeti', "le password non coincidono", 10);
	hideBaloon();
	return true;
}

function checkAllForm()
{
	/*comparePassword() && checkPasswordValid() &&*/
	//checkCF()
	if( checkProvincia() && checkCap() && checkStandardField("citta") && checkStandardField("indirizzo") && checkStandardField("cognome") && checkStandardField("nome") && checkEmailValid() && checkUserExist() && checkNascita() )
	{
		document.forms['formRegistrazione'].submit();
	}
}

var req = createXMLHttpRequest();

function sendRequestEmail(email)
{
	req.open('get', 'check_email.php?email=' + email);
	req.onreadystatechange = handleResponseEmail;
	req.send(null);
}

function handleResponseEmail()
{
	if(req.readyState == 4)
	{
		var response = req.responseText*1;
		if(response>0)
		{
			createAdvise('email', "email già registrata, indicare un\'altra email", 6);
		}
	}
	/*else
		document.title = "loading" + req.readyState;*/
}

function createXMLHttpRequest()
{
	var ua;

	if(window.XMLHttpRequest)
	{
		try
		{
			ua = new XMLHttpRequest();
		} 
		catch(e) 
		{
	  		ua = false;
		}
	} 
	else if(window.ActiveXObject) 
	{
		try 
		{
			ua = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch(e)
		{
			ua = false;
		}
	}
	return ua;
}

function checkPrivacy()
{
	unselectField('contratto');
	if(!document.forms['formRegistrazione'].elements['contratto'].checked)
		return createAdvise('contratto', "E' necessario accettare il regolamento sulla privacy per registrarsi", 6);
	return true;
}

function checkCode()
{
	unselectField('codice');
	var obj = document.forms['formRegistrazione'].elements['codice'];
	unselectField('codice');
	var str = "";
	
	if(document.all)
		str = obj.value;
	else
		str = document.forms['formRegistrazione'].elements['codice'].value;

	if( trim(str) != trim(code) )
		return createAdvise('codice', "il codice inserito non è corretto", 7);
		
	return true;
}

function sendRequestRegistration()
{
	if(!checkEmailValid())
		return false;
	
	if(!checkStandardField('nome'))
		return false;
	
	if(!checkStandardField('cognome'))
		return false;
		
	if(!checkStandardField('citta'))
		return false;
		
	if(!checkProvincia('provincia'))
		return false;
		
	if(!checkCap())
		return false;
		
	if(!checkCode())
		return false;
		
	if( !checkPrivacy() )
		return false;
		
	var email = getValue('email');
	var cognome = getValue('cognome');
	var telefono = getValue('telefono');
	var citta = getValue('citta');
	var nome = getValue('nome');
	var provincia = getValue('provincia');
	var cap = getValue('cap');
	var indirizzo = getValue('indirizzo');

	req.open('get', 'ajax_registra_utente.php?email=' + email+'&cap='+cap+'&indirizzo='+indirizzo+'&nome='+nome+'&telefono='+telefono+'&cognome='+cognome+'&citta='+citta+'&provincia='+provincia);
	req.onreadystatechange = handleResponse;
	req.send(null);
	return true;
}

function handleResponse()
{
	if(req.readyState == 4)
	{
		var response = req.responseText*1;
		if(response==1)
		{
			document.getElementById("formVisibile").style.display = "none";
			document.getElementById("risultato").style.display = "block";
			//createAdvise('email', "email già registrata, indicare un\'altra email", 6);
		}
		else
		{
			if(response==21)
				document.getElementById("messaggioEsito").innerHTML = "L'email inserita risulta gi&agrave; registrata.";
			else
				document.getElementById("messaggioEsito").innerHTML = "Ci dispiace ma ci sono errori nell'invio della richiesta, si prega di riprovare";
			document.getElementById("formVisibile").style.display = "none";
			document.getElementById("risultato").style.display = "block";
		}
	}
	/*else
		document.title = "loading" + req.readyState;*/
}

function getValue(id)
{
	var obj = document.forms['formRegistrazione'].elements[id];
	if(document.all)
		return obj.value;
	else
		return document.forms['formRegistrazione'].elements[id].value;
}

function aggiornaCodice()
{
	req.open('get', 'ajax_code_generator.php');
	req.onreadystatechange = handleResponseAggiornaCodice;
	req.send(null);
}

function handleResponseAggiornaCodice()
{
	if(req.readyState == 4)
	{
		var response = req.responseText;
		if(response != "")
		{
			code = response+"";
			document.getElementById('imageCode').src = 'image.php?code='+code;
		}
	}
}


