/*										      ______________
______________________________________________CONTROLLI FORM________________________________________________
VINCOLI PER L'UTILIZZO DELLO SCRIPT
------------------------------------------------------------------------------------------------------------
Il Form si DEVE chiamare "mioform"
E' necessario nominare i campi utilizzando il seguente schema:
tipodicampo_nomedelcampo_eventualialtrevoci
I campi -obbligatori- vanno preceduti dal suffisso "_" es: _tipodicampo_nomecampo_eventualialtrevoci
per "tipodicampo" utilizzare la seguente tabella

Testo Generico	 -->		txt_	 --> Il controllo viene effettuto solo se il campo è "obbligatorio"
Textarea	 	 -->		area_ 	 --> Il controllo viene effettuto solo se il campo è "obbligatorio"
Password		 -->		pwd_	 --> Per la lunghezza min e max modificare "IMPOSTAZIONE VARIABILI"
Controllo Pwd	 -->		ctrlpwd_ --> I campi "Password" e "Controlla Password" devono essere susseguenti
E-mail			 -->		email_
Letterale		 -->		let_
Cap				 -->		cap_
Select			 -->		sel_
Codice Fiscale	 -->		cf_
Partita Iva		 -->		piva_
Data			 -->		data_	--> Il campo deve avere questo tipo di formattazione "gg/mm/aaaa"
Pref. Internaz.  -->		pint_
Pref. Distretto	 -->		pref_		
Numero tel.		 -->		num_
Solo Numero Fisso-->		tel_	--> Controllo per il numero di rete fissa senza prefisso internazionale
Flag Invio SMS	 -->		flg_sms	--> Il flag deve essere seguito dai tre campi del numero di cell!!!
	|---------------------------------> IL CAMPO FLAG NON DEVE MAI ESSERE OBBLIGATORIO!!! (SENZA _ davanti!)
Consenso Privacy -->		privacy --> LEGGERE LE SPECIFICHE PER L'ELEMENTO PRIVACY!!!

ELEMENTO PRIVACY
Per il consenso ai dati personali è necessario utilizzare una checkbox nominata 
			ESCLUSIVAMENTE -->privacy<-- senza essere preceduto da _
____________________________________________________________________________________________________________
*/
//Impostazione variabili
//		PASSWORD	
		var lungh_min = 6
		var lungh_max = 50
//-------------------------

//FUNZIONE PER LA VISUALIZZAZIONE DELL'ERRORE
	function visualizza_alert(indice)
	    {
		//alert(indice);
		switch(indice)
			{
			case 0: //Campi necessari non compilati
				alert("Attenzione!\nPer eseguire correttamente l'iscrizione è necessario compilare tutti i campi obbligatori(*).");
	    	   //return false;
				break;
				
			case 1: //Controllo lunghezza password
				alert("Attenzione!\nLa Password deve essere di lunghezza compresa tra "+lungh_min+ " e " + lungh_max+" caratteri.");
	    	   	//return false;
				break;
				
			case 2: //Controllo identità password
				alert("Attenzione!\nLe Password immesse non sono coincidenti.");
	    	   	//return false;
				break;	

			case 3: //Controllo indirizzo e-mail
				alert("Attenzione!\nL'indirizzo e-mail inserito non è corretto.");
	    	   	//return false;
				break;

			case 4: //Controllo campi di sole lettere
				alert("Attenzione!\nNon è possibile inserire numeri all'interno del campo.");
	    	   	//return false;
				break;

			case 5: //Controllo CAP
				alert("Attenzione!\nIl CAP immesso non è corretto.");
	    	   //return false;
				break;
			
			case 6: //Controllo Codice Fiscale
				alert("Attenzione!\nErrore nell'immissione del Codice Fiscale");
	    	   //return false;
				break;										
			
			case 7: //Controllo Partita Iva
				alert("Attenzione!\nErrore nell'immissione della Partita I.V.A.");
	    	   	//return false;
				break;
			
			case 8: //Controllo Data
				alert("Attenzione!\nErrore nell'immissione della data. Formato corretto gg/mm/aaaa");
	    	   //return false;
				break;

			case 9: //Controllo Numero di telefono
				alert("Attenzione!\nErrore nell'immissione del numero di telefono.");
	    	   	//return false;
				break;

			case 10: //Controllo Privacy
				alert("Attenzione! Per eseguire correttamente l'iscrizione occorre\ndare il consenso al trattamento dei dati personali!");
	    	   	//return false;
				break;
				
			case 11: //Controllo flg_sms - cellulare
				alert("Attenzione! Per ricevere gli sms informativi è necessario inserire correttamente il numero di cellulare.");
	    	   	//return false;				
				break;			
															
			default:
	    	}
		}

//FUNZIONE CONTROLLO FORM
function controllo_form(which)
{

	for (i=0;i<which.length;i++)
		{
		var internazionale;
		var oggetto;
		oggetto=document.mioform.elements[i].name;
		var indice;
		if (oggetto.substring(0,1)=="_")
			{
			if (which.elements[i].value.length == 0)
				{
				visualizza_alert(0);
				return false;
				}
			indice=1;
			}else
			{
			indice=0;
			}
		var tipo_oggetto;
		tipo_oggetto=oggetto.split("_");
		var tipo_campo;
		tipo_campo=tipo_oggetto[indice];
		switch (tipo_campo)
			{
			
			case "pwd":
				var caratteri = which.elements[i].value.length;
				var password_reg_exp = /^([a-zA-Z0-9_])+$/;
				var password=which.elements[i].value; 
				if ( indice==1 || caratteri!=0 )
					{
						if (!password_reg_exp.test(password) || (caratteri<lungh_min) || (caratteri>lungh_max) || (password == "") || (password == "undefined")) 
							{
							which.elements[i].value="";
							which.elements[i+1].value="";
							which.elements[i].focus();
							visualizza_alert(1);
							return false;
							} 
					var pwd=which.elements[i].value
					}
				break;
			
			case "ctrlpwd":
				var caratteri = which.elements[i].value.length;
				if ( indice==1 || caratteri!=0 )
					{
					if (which.elements[i].value != pwd) //SE LA PASSWORD E' DIVERSA DA QUELLA PRECEDENTE
						{
							which.elements[i].value="";
							which.elements[i-1].value="";
							which.elements[i].focus();
							visualizza_alert(2);
							return false;
						}
					}
				break;
			
			case "email":
				var caratteri = which.elements[i].value.length;
				var email=which.elements[i].value; 
				var email_reg_exp = /^([a-zA-Z0-9_\.\-]{2,})+\@(([a-zA-Z0-9\-]{2,})+\.)+([a-zA-Z]{2,})+$/;
				if ( indice==1 || caratteri!=0 )
					{
					if (!email_reg_exp.test(email) || (email == "") || (email == "undefined")) 
						{
						which.elements[i].value="";
						which.elements[i].focus();
						visualizza_alert(3);
						return false;
						}
					}
				break;
				
			case "let":
				var caratteri = which.elements[i].value.length;
				var parola = which.elements[i].value; 
				var parola_reg_exp = /^(\D)+$/;
				if ( indice==1 || caratteri!=0 )
					{
					if (!parola_reg_exp.test(parola) || (parola == "") || (parola == "undefined"))
						{
						which.elements[i].focus();
						visualizza_alert(4);
						return false;
						}
					}
				break;
				
			case "cap":
				var caratteri = which.elements[i].value.length;
				var valore = which.elements[i].value;
				if ( indice==1 || caratteri!=0 )
					{
					if ( isNaN(valore) || caratteri!=5 ) //SE LA LUNGHEZZA E' <> DA 5 e NaN
						{
							which.elements[i].value="";
							which.elements[i].focus();
							visualizza_alert(5);
							return false;
						}
					}
				break;
							
			case "sel":
				var selIx  = which.elements[i].selectedIndex;
				if(selIx>=0){
					var selezione = which.elements[i].options[selIx].value;
					if ( indice==1)
						{				
						if (selezione==0) 
							{
								visualizza_alert(0);
								return false;
							}
						}
				}
				break;
				
			case "cf":
				var caratteri = which.elements[i].value.length;
				var codice=which.elements[i].value; 
				var codice_reg_exp = /^([a-zA-Z]{6})+([0-9]{2})+([a-zA-Z]{1})+([0-9]{2})+([a-zA-Z]{1})+([0-9]{3})+([a-zA-Z]{1})+$/;
				if ( indice==1 || caratteri!=0 )
					{			
					if (!codice_reg_exp.test(codice) || (codice == "") || (codice == "undefined"))
						{
						which.elements[i].focus();
						visualizza_alert(6);
						return false;
						}
					}
				break;
				
			case "piva":
				var caratteri = which.elements[i].value.length;
				var partita=which.elements[i].value; 
				var partita_reg_exp = /^([0-9]{11})+$/;
				if ( indice==1 || caratteri!=0 )
					{
					if (!partita_reg_exp.test(partita) || (partita == "") || (partita == "undefined"))
						{
						which.elements[i].focus();
						visualizza_alert(7);
						return false;
						}
					}
				break;
				
			case "data":
				var caratteri = which.elements[i].value.length;
				var data = which.elements[i].value;				
				var data_reg_exp = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
				var matchArray = data.match(data_reg_exp);
				if ( indice==1 || caratteri!=0 )
					{
						if (matchArray == null) 
							{
							which.elements[i].focus();
							visualizza_alert(8);
							return false;
							}
						month = matchArray[3];
						day = matchArray[1];
						year = matchArray[5];
						if (day < 1 || day > 31) 
							{
							which.elements[i].focus();
							visualizza_alert(8);
							return false;
							}
						if (month < 1 || month > 12) 
							{
							which.elements[i].focus();
							visualizza_alert(8);
							return false;
							}
						if ((month==4 || month==6 || month==9 || month==11) && day==31) 
							{
							which.elements[i].focus();
							visualizza_alert(8)
							return false;
							}
						if (month == 2) 
							{
							var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
							if (day > 29 || (day==29 && !isleap))
								{
								which.elements[i].focus();
								visualizza_alert(8);
								return false;
								}
							}
					}
				break;

			case "pint":
				var numero = which.elements[i].value; 
				var caratteri = which.elements[i].value.length;
				if (numero.substring(0,1)=="+") {
				var numero_reg_exp=new RegExp("^([+]{1})([0-9]{1,4})$");
				}
				if (numero.substring(0,1)=="0") {
				var numero_reg_exp=new RegExp("^([0]{2})([0-9]{1,4})$");
				}
				if ( indice==1 || numero!=""){			
					if (!numero_reg_exp.test(numero) || (numero == "") || (numero == "undefined")){
						which.elements[i].focus();						
						visualizza_alert(9);
						return false;
					}else{
					internazionale=1;
						if (which.elements[i+1].value==""){
							visualizza_alert(9);
							return false;
						}	
					}
						
				}
				break;	

			case "pref":
				var numero = which.elements[i].value; 
				var caratteri = which.elements[i].value.length;
				var numero_reg_exp=new RegExp("^([0-9]{2,5})$");				
				if ( indice==1 || caratteri!=0 ){			
					if (!numero_reg_exp.test(numero) || (numero == "") || (numero == "undefined")){
						which.elements[i].focus();						
						visualizza_alert(9);
						return false;
					}
					if (which.elements[i+1].value==""){
						which.elements[i].focus();						
						visualizza_alert(9);
						return false;						
					}
				}
				break;
			
			case "num":
				var numero = which.elements[i].value; 
				var caratteri = which.elements[i].value.length;
				var numero_reg_exp=new RegExp("^([0-9]{4,10})$");				
				if ( indice==1 || caratteri!=0 ){			
					if (!numero_reg_exp.test(numero) || (numero == "") || (numero == "undefined")){
						which.elements[i].focus();						
						visualizza_alert(9);
						return false;
					}else{//se è corretto controllo il pref e il pint
						if (internazionale=1){ 
							if(which.elements[i-2].value=="+" || which.elements[i-2].value=="" || which.elements[i-2].value=="00" || which.elements[i-1].value==""  || which.elements[i-2].value=="" ){
								which.elements[i-2].focus();						
								visualizza_alert(9);
								return false;									
							}
						}
						if (internazionale=0){
							if(which.elements[i-1].value==""){
								which.elements[i-1].focus();						
								visualizza_alert(9);
								return false;									
							}							
						}
					}
				internazionale=0
				}
				break;
			
			case "tel": //Contrlollo sul numero di telefono fisso senza prefissi internazionali
				var numero = which.elements[i].value; 
				var caratteri = which.elements[i].value.length;
				var numero_reg_exp=new RegExp("^([0]{1})([0-9]{4,10})$");
				if ( indice==1 || caratteri!=0 ){
					if(!numero_reg_exp.test(numero) ||(numero == "") || (numero == "undefined")){
						which.elements[i].focus();						
						visualizza_alert(9);
						return false;
					}
				}
				break;
			
			case "cel": //Contrlollo sul numero di telefono mobile con prefisso internazionale
				var numero = which.elements[i].value; 
				var caratteri = which.elements[i].value.length;
				if (numero.substring(0,1)=="0") {
				var numero_reg_exp=new RegExp("^([0]{2})([0-9]{6,15})$");
				}
				if (numero.substring(0,1)=="+") {
				var numero_reg_exp=new RegExp("^([+]{1})([0-9]{6,15})$");
				}
				if ( indice==1 || caratteri!=0 ){
					if(!numero_reg_exp.test(numero) ||(numero == "") || (numero == "undefined")){
						which.elements[i].focus();						
						visualizza_alert(9);
						return false;
					}
				}
				break;
			
			case "privacy":
				if (document.mioform.privacy.checked==false){
					which.elements[i].focus();
					visualizza_alert(10)
					return false;
				}
				break;	
			
			case "flg":
				var prova;
				tipo=tipo_oggetto[indice+1]; //Seconda parte del nome del flag
				if (tipo="sms") {
					if (document.mioform.flg_sms.checked==true){ //Se checkato controlla la presenza del numero
						if(which.elements[i+1].value=="" || which.elements[i+2].value=="" || which.elements[i+3].value=="" ){
							which.elements[i+1].focus();
							visualizza_alert(11);
							return false;			
						}
					}
				}
				break;
			
			default:
		}

// Disabilitazione tasto invio dopo l'invio del Form
		var tempobj=document.mioform.elements[i];
		/* DA USARE IN PRESENZA DEL TASTO reset
		if(tempobj.type.toLowerCase()=="submit"||tempobj.type.toLowerCase()=="reset")
			{
			tempobj.disabled=true;
			i=i+1
			tempobj=document.mioform.elements[i];
			tempobj.disabled=true;*/
			
			if(tempobj.type.toLowerCase()=="submit")
			{
			tempobj.disabled=true;
			//return false //DECOMMENTARE SOLO IN FASE DI TEST!!!
			}
//------------------------------------------------------
	}

}
/*
CASI ESCLUSI DA CONTROLLI
	
			case "caratterimassimi":
				var carmax = 100;
				if (which.elements[i].value.length > carmax) //SE LA LUNGHEZZA E' MAGGIORE DEL CONSENTITO
					{
						visualizza_alert("errore tipo"+tipo_campo);
						return false;
					}
				break;

			case "area":
					if (which.elements[i].value.length == 0) //NESSUN CARATTERE IMMESSO
						{
							visualizza_alert("errore tipo "+tipo_campo);
								return false;
						}
				break;
*/
