//Elimina gli spazi all'inizio ed alla fine di una stringa
function trim(stringa){
	while (stringa.substring(0,1) == ' ')
		stringa = stringa.substring(1, stringa.length);
	
	while (stringa.substring(stringa.length-1, stringa.length) == ' ')
		stringa = stringa.substring(0,stringa.length-1);
	
	return stringa;
}

//Esegue il trim del value di un tag input reinserendo come nuovo value la stringa risultante dal trim
function trimInput(input_id){
	$(input_id).set('value', trim($(input_id).value));
}

function checkUsername(){
	clearInterval(intervalloCheckUsername);//Termine precedente temporizzazione poiché la funzione può essere richiamata anche da onblur
	
	trimInput('username');
	
	var username_status=$('username_status');
	var username=$('username').value;
	var caratteri_accettati=new RegExp("[^a-zA-Z0-9\._]+");
	//Accettati caratteri alfanumerici e il punto, la regex individua tutti i caratteri NON (^) a-z, A-Z, 0-9 o il '.' con una o più occorrenze (il +)
	var inizio_punto=new RegExp("^[\.]");//Non accettato l'inizo con il '.'
	
	if(username.length<6){
		username_status.setStyle('color', 'darkRed');
		username_status.set('html', 'Username inferiore ai 6 caratteri');
	}else if(username.length>20){
		username_status.setStyle('color', 'darkRed');
		username_status.set('html', 'Username superiore ai 20 caratteri');
	}else{
		if(caratteri_accettati.test(username)){
			username_status.setStyle('color', 'darkRed');
			username_status.set('html', 'Username con caratteri non ammessi');
		}else if (inizio_punto.test(username)){
			username_status.setStyle('color', 'darkRed');
			username_status.set('html', 'Username con \".\" iniziale non ammesso');
		}else{
			var richiesta_check_username=new Request.HTML({
				url:'./php/registrazione_checker.php',		// l'url da contattare
				update:username_status,					//l'elemento che verrà aggiornato al completamento della richiesta
				evalScripts:false,						//gli script contenuti nel responso verranno azionati
				onRequest:function(){
					username_status.set('html', '');
				},
				onComplete:function(tree, elements, html, js){
					if(html=="0"){
						username_status.setStyle('color', 'darkRed');
						username_status.set('html', 'Username non disponibile');
						username_ok=false;
					}else{
						username_status.setStyle('color', 'limeGreen');
						username_status.set('html', 'Username disponibile');
						username_ok=true;
					}
				},
				onFailure:function(){
					username_status.set('html', '');
				}
			});
			
			//azioniamo la richiesta
			richiesta_check_username.post({'check_username':true, 'username':username});
		}
	}
	
	username_status.fade(1);
}

//Richiamata all'inserimento di un nuovo carattere dell'username si occupa di temporizzare l'avvio della fuinzione di controllo dell'username terminando una precedente temporizzazione se esiste
function timeoutCheckUsername(){	
	clearInterval(intervalloCheckUsername);
	intervalloCheckUsername=setInterval("checkUsername()", 2000);
}

function checkPrimaryEmail(e){
	clearInterval(intervalloCheckPrimaryEmail);
	
	trimInput('primary_email');
	
	var primary_email_status=$('primary_email_status');
	var primary_email=$('primary_email').value;
	var secondary_email_row=$('secondary_email_row');
	
	var struttura_prima_parte=new RegExp("[^a-zA-Z0-9_\.-]+");
	var prima_parte_inizio_punto=new RegExp("^[\.]");
	var struttura_seconda_parte=new RegExp("[^a-zA-Z0-9-]+");
	var struttura_terza_parte=new RegExp("[^a-zA-Z]");
	var primo_split=primary_email.split("@");
	var secondo_split;
	
	$('secondary_email').value="";
	secondaryEmailStatusSlide.slideOut();
	
	if(primo_split.length==2){
		secondo_split=primo_split[1].split(".");
		
		if(secondo_split.length!=2)
			primary_email_status.set('html', '<span style="color:darkred">Indirizzo e-mail non valido</span>');
		else if((struttura_prima_parte.test(primo_split[0]))||(prima_parte_inizio_punto.test(primo_split[0]))||(struttura_seconda_parte.test(secondo_split[0]))||(struttura_terza_parte.test(secondo_split[1])))
			primary_email_status.set('html', '<span style="color:darkred">Indirizzo e-mail contenente caratteri non ammessi</span>');
		else{
			primaryEmailStatusSlide.slideOut();
			secondary_email_row.fade(1);
			$('secondary_email').disabled=false;
			
			primary_email_ok=true;
			
			return 1;
		}
	}else
		primary_email_status.set('html', '<span style="color:darkRed">Indirizzo e-mail non valido</span>');
	
	primaryEmailStatusSlide.slideIn();
	secondary_email_row.fade(0);
	$('secondary_email').disabled=true;
	
	primary_email_ok=false;
	
	return 0;
}

//Richiamata all'inserimento di un nuovo carattere dell'e-mail principale si occupa di temporizzare l'avvio della fuinzione di controllo dell'username terminando una precedente temporizzazione se esiste
function timeoutCheckPrimaryEmail(){	
	clearInterval(intervalloCheckPrimaryEmail);
	intervalloCheckPrimaryEmail=setInterval("checkPrimaryEmail()", 2000);
}

function checkSecondaryEmail(){
	clearInterval(intervalloCheckSecondaryEmail);
	
	trimInput('secondary_email');
	
	var secondary_email_status=$('secondary_email_status');
	var secondary_email=$('secondary_email').value;
	var primary_email=$('primary_email').value;
	
	if(secondary_email.toLowerCase()==primary_email.toLowerCase()){
		var richiesta_check_email=new Request.HTML({
				url:'./php/registrazione_checker.php',		// l'url da contattare
				update:secondary_email_status,					//l'elemento che verrà aggiornato al completamento della richiesta
				evalScripts:false,						//gli script contenuti nel responso verranno azionati
				onRequest:function(){
					secondary_email_status.set('html', '');
				},
				onComplete:function(tree, elements, html, js){
					if(html=="0"){
						secondary_email_status.set('html', '<span style="color:darkRed">Indirizzo e-mail non disponibile</span>');
						secondary_email_ok=false;
					}else{
						secondary_email_status.set('html', '<span style="color:limeGreen">Indirizzo e-mail disponibile</span>');
						secondary_email_ok=true;
					}
				},
				onFailure:function(){
					secondary_email_status.set('html', '');
				}
			});
			
			//azioniamo la richiesta
			richiesta_check_email.post({'check_email':true, 'email':secondary_email});
	}else
		secondary_email_status.set('html', '<span style="color:darkRed">Indirizzi e-mail non coincidenti</span>');
	
	secondaryEmailStatusSlide.slideIn();
	
	secondary_email_ok=false;
}

//Richiamata all'inserimento di un nuovo carattere dell'e-mail secondaria si occupa di temporizzare l'avvio della fuinzione di controllo dell'username terminando una precedente temporizzazione se esiste
function timeoutCheckSecondaryEmail(){	
	clearInterval(intervalloCheckSecondaryEmail);
	intervalloCheckSecondaryEmail=setInterval("checkSecondaryEmail()", 2000);
}

function checkPrimaryPsw(){
	clearInterval(intervalloCheckPrimaryPsw);
	
	var primary_psw_status=$('primary_psw_status');
	var primary_psw=$('primary_psw').value;
	var secondary_psw_span=$('secondary_psw_span');
	var secondary_psw_status=$('secondary_psw_status');
	
	var caratteri_non_accettati=new RegExp("[^a-zA-Z0-9]");//La regex trova ogni corrispondenza con caratteri non alfanumerici
	
	$('secondary_psw').value="";
	secondary_psw_status.fade(0);
	
	if(caratteri_non_accettati.test(primary_psw))
		primary_psw_status.set('html', 'Password contenente caratteri non ammessi');
	else if(primary_psw.length<8)
		primary_psw_status.set('html', 'Password inferirore agli 8 caratteri');
	else if(primary_psw.length>15)
		primary_psw_status.set('html', 'Password superiore ai 15 caratteri');
	else{
		primary_psw_status.fade(0);
		
		secondary_psw_span.fade(1);
		$('secondary_psw').disabled=false;
		
		primary_psw_ok=true;
		
		return 1;
	}
	
	primary_psw_status.fade(1);
		
	secondary_psw_span.fade(0);
	$('secondary_psw').disabled=true;
	
	primary_psw_ok=false;
	
	return 0;
}

//Richiamata all'inserimento di un nuovo carattere della password primaria si occupa di temporizzare l'avvio della fuinzione di controllo dell'username terminando una precedente temporizzazione se esiste
function timeoutCheckPrimaryPsw(){	
	clearInterval(intervalloCheckPrimaryPsw);
	intervalloCheckPrimaryPsw=setInterval("checkPrimaryPsw()", 2000);
}

//Quando si scrive nel secondary psw status levare ogni descrizione nel primary psw status

function checkSecondaryPsw(){
	clearInterval(intervalloCheckSecondaryPsw);
	
	var primary_psw_status=$('primary_psw_status');
	var primary_psw=$('primary_psw').value;
	var secondary_psw=$('secondary_psw').value;
	var secondary_psw_status=$('secondary_psw_status');
	
	primary_psw_status.set('html', '');
	
	if(primary_psw==secondary_psw){
		secondary_psw_status.fade(0);
		
		secondary_psw_ok=true;
	}else{
		secondary_psw_status.fade(1),
		
		secondary_psw_ok=false;
	}
}

//Richiamata all'inserimento di un nuovo carattere della password secondaria si occupa di temporizzare l'avvio della fuinzione di controllo dell'username terminando una precedente temporizzazione se esiste
function timeoutCheckSecondaryPsw(){	
	clearInterval(intervalloCheckSecondaryPsw);
	intervalloCheckSecondaryPsw=setInterval("checkSecondaryPsw()", 2000);
}

function controllaCampo(campo, regexp_non_accettata, minimo, massimo){
	trimInput(campo);
	
	if(((new RegExp(regexp_non_accettata)).test(campo.value))||(campo.value.length<minimo)||(campo.value.length>massimo))
		return false;
	else
		return true;
}

function controllaForm(){
	var form=$('form_registrazione');
	var erorri_registrazione=$('erorri_registrazione');
	var testo_errore='';
	var controllo_ok=true;
	var inputs, cont;
	
	testo_errore='<span style="color:darkRed; font-weight:bold">Impossibile completare la registrazione</span>';
	
	if(username_ok&&primary_email_ok&&secondary_email_ok&&primary_psw_ok&&secondary_psw_ok){
		inputs=form.getElementsByTagName('input');
		
		for(cont=0;cont<inputs.length; cont++){
			switch(inputs[cont].name){
				case 'nome':
					//\u00C0-\u017F\u1e00-\u1ef9 lettere accentate, \\s lo spazio e \\' l'apostrofo
					if(controllaCampo(inputs[cont],"[^A-Za-z\\'\\s\u00C0-\u017F\u1e00-\u1ef9]+", 3, 15))
						controllo_ok&=true;
					else{
						controllo_ok&=false;
						
						testo_errore+='<div style="padding-left:20px">Nome non valido</div>';
					}
					break;
				case 'cognome':
					if(controllaCampo(inputs[cont],"[^A-Za-z\\'\\s\u00C0-\u017F\u1e00-\u1ef9]+", 3, 15))
						controllo_ok&=true;
					else{
						controllo_ok&=false;
						
						testo_errore+='<div style="padding-left:20px">Cognome non valido</div>';
					}
					break;
				case 'comune':
					if(controllaCampo(inputs[cont],"[^A-Za-z\\'\\s\\.\u00C0-\u017F\u1e00-\u1ef9]+", 3, 30))
						controllo_ok&=true;
					else{
						controllo_ok&=false;
						
						testo_errore+='<div style="padding-left:20px">Comune non valido</div>';
					}
					break;
				case 'indirizzo':
					if(controllaCampo(inputs[cont],"[^0-9A-Za-z\\'\\s\\.\u00C0-\u017F\u1e00-\u1ef9]+", 3, 30))
						controllo_ok&=true;
					else{
						controllo_ok&=false;
						
						testo_errore+='<div style="padding-left:20px">Indirizzo non valido</div>';
					}
					break;
				case 'civico':
					if(controllaCampo(inputs[cont],"[^0-9A-Za-z/]+", 1, 10))
						controllo_ok&=true;
					else{
						controllo_ok&=false;
						
						testo_errore+='<div style="padding-left:20px">Numero civico non valido</div>';
					}
					break;
				case 'cap':
					if(controllaCampo(inputs[cont],"[^0-9]+", 4, 7))
						controllo_ok&=true;
					else{
						controllo_ok&=false;
						
						testo_errore+='<div style="padding-left:20px">CAP non valido</div>';
					}
					break;
				case 'provincia':
					if(controllaCampo(inputs[cont],"[^A-Za-z]+", 2, 2))
						controllo_ok&=true;
					else{
						controllo_ok&=false;
						
						testo_errore+='<div style="padding-left:20px">Sigla provincia non valida</div>';
					}
					break;
				case 'nazione':
					if(controllaCampo(inputs[cont],"[^A-Za-z\\'\\s\\.\u00C0-\u017F\u1e00-\u1ef9]+", 4, 15))
						controllo_ok&=true;
					else{
						controllo_ok&=false;
						
						testo_errore+='<div style="padding-left:20px">Nazione non valida</div>';
					}
					break;
				case 'telefono':
					if(controllaCampo(inputs[cont],"[^0-9]+", 4, 15))
						controllo_ok&=true;
					else{
						controllo_ok&=false;
						
						testo_errore+='<div style="padding-left:20px">Numero telefonico non valido</div>';
					}
					break;
				case 'fax':
					if(controllaCampo(inputs[cont],"[^0-9]+", 0, 15))
						controllo_ok&=true;
					else{
						controllo_ok&=false;
						
						testo_errore+='<div style="padding-left:20px">Numero telefonico non valido</div>';
					}
					break;
			}
		}
	}else{
		testo_errore+='<div style="padding-left:20px">Verificare che tutti i dati siano stati inseriti e non siano indicati errori</div>';
		controllo_ok&=false;
	}
	
	erorri_registrazione.set('html', testo_errore);
	
	return controllo_ok;
}

//Calcola l'hash della password inserita e posiziona il risultato nell'apposito campo
function calcoloHashPassword(campo_password){
	$('hash_password').value=hex_md5(campo_password.value+'UserPassword');
}

//Calcola un hash in base ai dati inseriti
function calcoloHash(id_campo_hash){	
	var inputs=$('form_registrazione').getElementsByTagName('input');
	var campo_hash=$('hash_registrazione');
	var hash='';
	
	calcoloHashPassword($('primary_psw'));
	
	for(cont=0;cont<inputs.length; cont++){
		//Il calcolo dell'hash non tiene contro del campo di hash stesso e di quello della password in chiaro
		if((inputs[cont].name!='')&&(inputs[cont]!=campo_hash))
			hash+=inputs[cont].value;
	}
	
	campo_hash.value=hex_md5(hash.replace('\'', '')+'La F1 del Modellismo');//Calcolo somma md5 con eliminazione dei caratteri '
}

function registrazioneCompletata(){
	(new Fx.Slide('form_registrazione')).slideOut();
	(new Fx.Slide('tabella_completa_registrazione')).slideOut();
	(new Fx.Slide('condizioni_registrazione')).slideOut();
	
	$('form_registrazione').fade(0);
	$('tabella_completa_registrazione').fade(0);
	$('condizioni_registrazione').fade(0);
}

function completaRegistrazione(){
	$('completa_registrazione').disabled=true;//Disabilitazione pulsante
	
	if(controllaForm()){
		var risultato_registrazione=$('risultato_registrazione');
		var errori_registrazione=$('erorri_registrazione');
		
		errori_registrazione.fade(0);
		calcoloHash('hash_registrazione');
		
		var richiesta_registrazione=new Request.HTML({
				url:'./php/registrazione_checker.php',		// l'url da contattare
				update:risultato_registrazione,					//l'elemento che verrà aggiornato al completamento della richiesta
				evalScripts:false,						//gli script contenuti nel responso verranno azionati
				onRequest:function(){
					risultato_registrazione.set('html', '<span style="color:white; font-weight:bold">Registrazione in corso...</span>');
					
					risultato_registrazione.fade(1);
				},
				onComplete:function(tree, elements, html, js){
					if(html=="-1"){
						risultato_registrazione.set('html', '<span style="color:darkRed; font-weight:bold">Impossibile completare la registrazione</span><div style="padding-left:20px">Incongruenza dei dati durante il processo di registrazione.</div>');
					}else if(html=="0"){
						risultato_registrazione.set('html', '<span style="color:darkRed; font-weight:bold">Impossibile completare la registrazione</span><div style="padding-left:20px">Errore durante il processo di registrazione, riprovare pi&uacute; tardi.<br />Se l\'errore persiste contattare il webmaster tramite la sezione "Contatti".</div>');
					}else{
						risultato_registrazione.set('html', '<span style="color:limeGreen; font-weight:bold">Registrazione completata</span><div style="padding-left:20px">Il processo di registrazione &egrave; stato completato ma l\'account rester&aacute; inattivo, quindi inutilizzabile, sino alla convalida dello stesso.<br />A breve verr&aacute; inviata una e-mail all\'indirizzo <b>'+$('primary_email').value+'</b> contenente le istruzioni per l\'attivazione dell\'account; nel caso in cui non si riceva l\'e-mail entro 24 ore verificare che la seddetta e-mail non sia stata erroneamente riconosciuta come spam, se il problema dovesse persistere contattare il webmaster tramite la sezione "Contatti".</div>');
						
						registrazioneCompletata();
					}
					
					risultato_registrazione.fade(1);
				},
				onFailure:function(){
					risultato_registrazione.set('html', '<span style="color:darkRed; font-weight:bold">Impossibile completare la registrazione</span><div style="padding-left:20px">Errore durante il processo di registrazione, riprovare pi&uacute; tardi.<br />Se l\'errore persiste contattare il webmaster tramite la sezione "Contatti".</div>');
					
					risultato_registrazione.fade(1);
				}
			});
			
		//azioniamo la richiesta
		richiesta_registrazione.post($('form_registrazione'));
	}else	
		$('erorri_registrazione').fade(1);
		
	$('completa_registrazione').disabled=false;//Riabilitazione pulsante
}

function setUpRegistrazione(){
	normativaSlide=new Fx.Slide('normativa_privacy');
	primaryEmailStatusSlide=new Fx.Slide('primary_email_status');
	secondaryEmailStatusSlide=new Fx.Slide('secondary_email_status');
	
	normativaSlide.hide();
	primaryEmailStatusSlide.hide();
	secondaryEmailStatusSlide.hide();
	$('username_status').fade(0);
	$('secondary_email_row').fade(0);
	$('secondary_psw_span').fade(0);
	$('primary_psw_status').fade(0);
	$('secondary_psw_status').fade(0);
	$('erorri_registrazione').fade(0);
	$('risultato_registrazione').fade(0);
}

var normativaSlide, primaryEmailStatusSlide, secondaryEmailStatusSlide;
var intervalloCheckUsername, intervalloCheckPrimaryEmail, intervalloCheckSecondaryEmail, intervalloCheckPrimaryPsw, intervalloCheckSecondaryPsw;
var username_ok=false, primary_email_ok=false, secondary_email_ok=false, primary_psw_ok=false, secondary_psw_ok=false;
