/*global SISAL, window, Dialog*/

/**
 * La variabile rappresenta il namespace utilizzato per tutto il codice
 * javascript del palinsesto.
 */
SISAL.GNTN.REGISTRAZIONE.VALIDAZIONE = (function VALIDAZIONE() {
    

    function matchRegExp(e, reg)
    {
        var key = null,
            keychar = null
            ;
        key = window.event ? e.keyCode : e.which;
        keychar = String.fromCharCode(key);

        if (key === 8 || key === 0)
        {    
            return true;
        }    
        else
        {    
            return reg.test(keychar);
        }    
    }
        
    function username(e) {
        return matchRegExp(e, new RegExp("[a-zA-Z.\\-_0-9]"));
    }                     

    function numsOnly(e) {
        return matchRegExp(e, new RegExp("[0-9]"));
    }

    function numCivicoCharsOnly(e) {
        //return matchRegExp(e, /[\/a-zA-Z0-9.-]/);
        //return matchRegExp(e, new RegExp("[\/a-zA-Z0-9.-]"));
        return matchRegExp(e, new RegExp("[\/a-zA-Z0-9]"));
    }

    function numDocumentoCharsOnly(e) {
        //return matchRegExp(e, /[a-zA-Z0-9]/);
        return matchRegExp(e, new RegExp("[a-zA-Z0-9]"));
    }

    function emailCharNum(e) {
        //return matchRegExp(e, /[a-zA-Z0-9@.-]/);
        return  matchRegExp(e, new RegExp("[_a-zA-Z0-9@.-]"));
    }

    function promoCharsOnly(e) {
        //return matchRegExp(e, /[a-zA-Z0-9-]/);
        return matchRegExp(e, new RegExp("[a-zA-Z0-9-]"));
    }

    function alphaNumCharsOnly(e) {
        //return matchRegExp(e, /[_a-zA-Z0-9.-]/);
        return matchRegExp(e, new RegExp("[_a-zA-Z0-9.-]"));        
    }
        
    function provinciaCharsOnly(e) {
    //return matchRegExp(e, /[_a-zA-Z0-9.-]/);
    //return matchRegExp(e, new RegExp("[a-zA-Z]"));      
    //return matchRegExp(e, new RegExp("[\\s\/a-zA-Z.\\-.']"));      
    return matchRegExp(e, new RegExp("[\\sa-zA-Z.\\-.']"));      
    }

    function nameCharsOnly(e) {
        //return matchRegExp(e, /[\s\x27a-zA-Z\xE0\xE8\xE9\xF9\xF2\xEC\x27]/);
        //return matchRegExp(e, new RegExp("[\\s\x27a-zA-Z\xE0\xE8\xE9\xF9\xF2\xEC\x27]"));
        //return matchRegExp(e, new RegExp("[\\s\/a-zA-Z']")); 
        //return matchRegExp(e, new RegExp("[\\sa-zA-Z']")); 
        //return matchRegExp(e, new RegExp("[\sa-zA-Z']"));
        return matchRegExp(e, new RegExp("[\\sa-zA-Z-']"));
    }

    function indirizzoCharsOnly(e) {    
        //return matchRegExp(e, /[\s\/a-zA-Z0-9\'\xE0\xE8\xE9\xF9\xF2\xEC\x27]/);
        //return matchRegExp(e, new RegExp("[\\s\/a-zA-Z0-9\\'\xE0\xE8\xE9\xF9\xF2\xEC\x27\.\-]"));
        return matchRegExp(e, new RegExp("[\\s\/a-zA-Z0-9\\']"));
    }                                 

    function luogoNascitaCharsOnly(e) {                                         
        //return matchRegExp(e, /[\s\/a-zA-Z0-9\xE0\xE8\xE9\xF9\xF2\xEC\x27]/);
        return matchRegExp(e, new RegExp("[\\s\/a-zA-Z0-9\xE0\xE8\xE9\xF9\xF2\xEC\x27]"));      
    }                                     

    function codiceFiscaleNumCharsOnly(e) {                                         
        //return matchRegExp(e, /[a-zA-Z0-9]/);
        return matchRegExp(e, new RegExp("[a-zA-Z0-9]"));       
    }                                     
    function risposteSicurezzaCharsOnly(e) {                                         
        //return matchRegExp(e, /[a-zA-Z0-9]/);
        //return matchRegExp(e, new RegExp("[\\s\a-zA-Z0-9\\'\xE0\xE8\xE9\xF9\xF2\xEC\x27\.\-]"));
        return matchRegExp(e, new RegExp("[\\s0-9a-zA-Z.\\-.']"));
    }  
        
    function luogoDiRilascioCharsOnly(e) {                                          
     //return matchRegExp(e, new RegExp("[\\s\/a-zA-Z.\\-.']"));
     //return matchRegExp(e, new RegExp("[\\s\a-zA-Z0-9\\'\xE0\xE8\xE9\xF9\xF2\xEC\x27]"));
     return matchRegExp(e, new RegExp("[\\s\a-zA-Z\\'\xE0\xE8\xE9\xF9\xF2\xEC\x27]"));
    }  
        
    function usernameLogin(e) {                                         
        return matchRegExp(e, new RegExp("[0-9a-zA-Z.\\-_]"));
    
    }                     

	function controlloUsername(form) {

		//alert("controlloUsername");

		var messaggio = null,
	        espressione = new RegExp("[^._\\-0-9]"),
			username = null
		    ;
		
		form = document.getElementById(form);
		username = form.username.value;
		
		if (username.length < 6)
		{
			messaggio = "L'username deve essere maggiore uguale a 6 caratteri.";
			form.username.style.backgroundColor = "#cb0000";
			alertMessaggio(messaggio);
			return false;
		}
		
		if (!espressione.test(username))
		{
			form.username.style.backgroundColor = "#cb0000";
            messaggio = "L' username che hai inserito non &egrave; valida deve contenere almeno una lettera [A-Z]";
            alertMessaggio(messaggio);
			return false;
		}
        else
        {
			form.username.style.backgroundColor = "#FFFFFF";
        }    

		return true;
	}
	
	function controlloPin(form) {

		//alert("controlloPin");

		var messaggio = null,
				pin = null
		    ;
		
		form = document.getElementById(form);
		pin = form.idpin.value;
		
                messaggio = checkPassword(pin,"Password");
                if (!SISAL.isNullOrEmpty(messaggio))
                {
                  form.idpin.style.backgroundColor = "#cb0000";
                                    alertMessaggio(messaggio);
                                    return false;
                }  
		
		form.idpin.style.backgroundColor = "#FFFFFF";
		return true;
	}
	
	function controlloConfermaPin(form) {

		//alert("controlloConfermaPin");

		var messaggio = null,
				confermapin = null,
				pin = null
		    ;
		    
		form = document.getElementById(form);
		confermapin = form.confermapin.value;
		pin = form.idpin.value;
		
                messaggio = checkPassword(confermapin,"Conferma Password");
                if (!SISAL.isNullOrEmpty(messaggio))
                {
                  form.confermapin.style.backgroundColor = "#cb0000";
                  alertMessaggio(messaggio);
                  return false;
                }  
                else
                {
                  if (confermapin != 	pin)
                  {
                          form.confermapin.style.backgroundColor = "#cb0000";
                          messaggio = "I campi Password e Conferma Password devono essere uguali.";
                          alertMessaggio(messaggio);
                          return false;
                  }
                  
                  form.confermapin.style.backgroundColor = "#FFFFFF";

                  return true;
                }
	}	
	
	// ControlloEmail -> Controlla la validità del campo Email e Conferma Email
	// //
	function controlloEmail(form,label) {

		var email = null, 
                    espressione = null, 
                    messaggio = null

                //alert("controlloEmail => " + label);

		form = document.getElementById(form);
                if (label === "Email")
                {
                  email = form.email.value;
                }
                
                
		espressione = new RegExp("^[A-Z_a-z0-9+-]+(\\.[A-Z_a-z0-9+-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)+$");
		
		if (!SISAL.isNullOrEmpty(email)) {
			if (!espressione.test(email)) {
				// alert("La " + pLabel + " inserita non e' valida!");
                                if(label === "Email"){
                                        form.email.style.backgroundColor = "#cb0000";
        				messaggio = "L'indirizzo Email non &egrave; corretto";
                                        alertMessaggio(messaggio);
                                        return false;
                                }
                                else
                                {
                                        if (!SISAL.isNullOrEmpty(form.email.value))
                                        {
                                          messaggio = "L'indirizzo di Conferma Email non &egrave; corretto";
                                          alertMessaggio(messaggio);
                                          return false;
                                        }
                                        else
                                        {
                                          form.email.style.backgroundColor = "#cb0000";
                                          messaggio = "L'indirizzo di Email non &egrave; valorizzato";
                                          alertMessaggio(messaggio);
                                          return false;
                                        }
                                }
                        }
		}
                
                form.email.style.backgroundColor = "#FFFFFF";
                
                return true;
	}
        
        function controlloDomandeRisposta(form)
        {
        
          var domandadisicurezza_1 = null
              //domandadisicurezza_2 = null
          ;
          form = document.getElementById(form);
          
          domandadisicurezza_1 = form.domandadisicurezza_1.value.split("|");
          //domandadisicurezza_2 = form.domandadisicurezza_2.value.split("|");
          
          /*
          if (domandadisicurezza_1[0] == domandadisicurezza_2[0])
          {
              form.domandadisicurezza_1.style.backgroundColor = "#cb0000";
              form.domandadisicurezza_2.style.backgroundColor = "#cb0000";
              messaggio = "Le domande di sicurezza devono essere diverse";
              alertMessaggio(messaggio);
              return false;
          }*/
          
          return true;
        }
        
        function controlloNumeroDocumento(form)
        {
          form = document.getElementById(form);
          
          var numerodocumento = null;
          
          numerodocumento = form.numerodocumento.value;
          
          if (numerodocumento.length < 6) {
            form.numerodocumento.style.backgroundColor = "#cb0000";
            messaggio = "Il numero del documento di identit&agrave; deve essere di almeno 6 caratteri";
            alertMessaggio(messaggio);
            return false;
          }                        
          
          return true;
        }        
        
        
        
        function controlloCodiceFiscale(form)
        {
            form = document.getElementById(form);
            
            var CFcalcolato = null,
                CFInserito = null
                ;
            
            CFcalcolato = SISAL.GNTN.CODICEFISCALE.CalcolaCodiceFiscale(form);
            CFInserito = form.codicefiscale.value;

            if (CFcalcolato !== form.codicefiscale.value) {
                form.codicefiscale.style.backgroundColor = "#cb0000";
                messaggio = "Il Codice Fiscale non &egrave; corretto";
                SISAL.GNTN.REGISTRAZIONE.VALIDAZIONE.alertMessaggio(messaggio);
                return false;
            }            
            
            return true;
        }
        
	function controlloNome(form,label) {

          var nome = null, 
              messaggio = null,
              myregexp = /^[a-zA-Z0-9]+$/,
              nChar = 0,
              strChar = ""
              ;
  
          form = document.getElementById(form);
          if (label === "nome")
          {
            nome = form.nome.value;
          }  
          else
          {
            nome = form.cognome.value;
          }
          
          if (nome.length < 2) {
            if (label === "nome")
            {
              form.nome.style.backgroundColor = "#cb0000";
            }
            else
            {
              form.cognome.style.backgroundColor = "#cb0000";
            }
              messaggio = "Il " + label + " deve essere di almeno 2 caratteri";
              alertMessaggio(messaggio);
              return false;
          } else {
          
            for (i=0;i<nome.length;i++)
            {
                    //alert("char => " + nome.substr(i,1));
                    strChar = nome.substr(i,1);
                    if (myregexp.test(strChar)){
                          nChar++;
                    }
            }
                   
            if (nChar < 2 ){
              
              if (label === "nome")
              {
                form.nome.style.backgroundColor = "#cb0000";
              }
              else
              {
                form.cognome.style.backgroundColor = "#cb0000";
              }
              messaggio = "Il " + label + " deve contenere almeno 2 caratteri alfanumerici";
              alertMessaggio(messaggio);
              return false;
              
            }
            else
            {
              if (label === "nome")
              {
                form.nome.style.backgroundColor = "#FFFFFF";
              }     
              else
              {
                form.cognome.style.backgroundColor = "#FFFFFF";            
              }
            }  
          }
          
          return true;
          
        }
        
        function controlloLuogoRilascioDocumento(form)
        {
        
            //alert("controlloLuogoRilascioDocumento");
        
              var luogoRilascio = null, 
              messaggio = null
              ;
  
          form = document.getElementById(form);
          luogorilascio = form.luogorilascio.value;
          
          if (luogorilascio.length < 2) {
            form.luogorilascio.style.backgroundColor = "#cb0000";
            messaggio = "Il luogo di rilascio del documento d'identit&agrave; deve essere di almeno 2 caratteri";
            alertMessaggio(messaggio);
            return false;
          }
          
          return true;

        }                            
        
        function controlloCap(form,label)
        {
        
          var cap = null, 
          messaggio = null
          ;
  
          form = document.getElementById(form);
          if (label === "residenza")
          {
            cap = form.cap.value;
          }  
          else
          {
            cap = form.capdomicilio.value;
          }
        
          if (cap.length < 5) 
          {
            if (label === "residenza"  )
            {
              form.cap.style.backgroundColor = "#cb0000";
            }
            else
            {
              form.capdomicilio.style.backgroundColor = "#cb0000";
            }
            messaggio = "Il CAP " + label +  " deve essere di 5 caratteri";
            alertMessaggio(messaggio);
            return false;
          }
          
          return true;
          
        }        
        

        function controlloCartaIdentita(formInput){
        
            //alert("controlloCartaIdentita");
            
            var datadiscadenza = null,
            datadirilascio = null,
            dataAppoggio = null
            ;
            
            formInput = document.getElementById(formInput);               
            
            datadiscadenza = trim(formInput.datadiscadenza.value);
            datadirilascio = trim(formInput.datadirilascio.value);
            
            aa = parseFloat(datadiscadenza.substr(6, 4));
            mm = parseFloat(datadiscadenza.substr(3, 2));
            gg = parseFloat(datadiscadenza.substr(0, 2));
            
            datadiscadenza = new Date(aa, mm - 1, gg);
            
            aa = parseFloat(datadirilascio.substr(6, 4));
            mm = parseFloat(datadirilascio.substr(3, 2));
            gg = parseFloat(datadirilascio.substr(0, 2));
            
            dataAppoggio = new Date(aa, mm - 1, gg);
            
            // l'ultimo parametro 10 sono gli anni di durata del
            // documento Carta d'identit�
            // ad esempio se � stato rilasciato il 10/10/2000 scadr�
            // il 09/10/2010
            // 10 anni e un giorno prima della data di rilascio
            
            var dataAppoggio10 = new Date(calcoloData(datadirilascio, '10'));
            var dataAppoggio5 = new Date(calcoloData(datadirilascio, '5'));
            
            // alert ("dataAppoggio10 = " + dataAppoggio10);
            // alert ("dataAppoggio5 = " + dataAppoggio5);
            
            dataAppoggio10 = new Date(dataAppoggio10.getFullYear(),
                            dataAppoggio10.getMonth(), dataAppoggio10
                                            .getDate());
            dataAppoggio5 = new Date(dataAppoggio5.getFullYear(),
                            dataAppoggio5.getMonth(), dataAppoggio5
                                            .getDate());
            dataAppoggio10meno1 = new Date(dataAppoggio10
                            .getFullYear(), dataAppoggio10.getMonth(),
                            dataAppoggio10.getDate() - 1);
            dataAppoggio5meno1 = new Date(dataAppoggio5
                            .getFullYear(), dataAppoggio5.getMonth(),
                            dataAppoggio5.getDate() - 1);
            datadiscadenzameno1 = new Date(
                            datadiscadenza.getFullYear(), datadiscadenza
                                            .getMonth(), datadiscadenza.getDate() - 1);
            
            if (!ControlloDateUguali(datadiscadenza, dataAppoggio5,
                            datadiscadenzameno1, dataAppoggio5meno1)
                            && !ControlloDateUguali(datadiscadenza,
                                            dataAppoggio10, datadiscadenzameno1,
                                            dataAppoggio10meno1)) {
                    messaggio = "La data di scadenza inserita per il tipo documento non &egrave; corretta";
                    formInput.giornoScadenzaParam.style.backgroundColor = "#cb0000";
                    formInput.meseScadenzaParam.style.backgroundColor = "#cb0000";
                    formInput.annoScadenzaParam.style.backgroundColor = "#cb0000";
                    alertMessaggio(messaggio);
                    return false;
            }
            else
            {
              formInput.giornoScadenzaParam.style.backgroundColor = "#FFFFFF";
              formInput.meseScadenzaParam.style.backgroundColor = "#FFFFFF";
              formInput.annoScadenzaParam.style.backgroundColor = "#FFFFFF";
              return true;
            }
        }
        
        function controlloCartaIdentitaEuropea(formInput){
        
            //alert("controlloCartaIdentita");
            
            var datadiscadenza = null,
            datadirilascio = null,
            dataAppoggio = null
            ;
            
            formInput = document.getElementById(formInput);               
            
            datadiscadenza = trim(formInput.datadiscadenza.value);
            datadirilascio = trim(formInput.datadirilascio.value);
            
            aa = parseFloat(datadiscadenza.substr(6, 4));
            mm = parseFloat(datadiscadenza.substr(3, 2));
            gg = parseFloat(datadiscadenza.substr(0, 2));
            
            
            var dataFine=new Date();
            datadiscadenza = new Date(aa, mm - 1, gg);
            dataFine.setFullYear(aa,mm-1,gg);
            
            aa = parseFloat(datadirilascio.substr(6, 4));
            mm = parseFloat(datadirilascio.substr(3, 2));
            gg = parseFloat(datadirilascio.substr(0, 2));
            
            var dataInizio=new Date();
            dataAppoggio = new Date(aa, mm - 1, gg);
            dataInizio.setFullYear(aa,mm-1,gg);
            
            
            // l'ultimo parametro 10 sono gli anni di durata del
            // documento Carta d'identit�
            // ad esempio se � stato rilasciato il 10/10/2000 scadr�
            // il 09/10/2010
            // 10 anni e un giorno prima della data di rilascio
            
            var dataAppoggio10 = new Date(calcoloData(datadirilascio, '1'));
            
            
            // alert ("dataAppoggio10 = " + dataAppoggio10);
            // alert ("dataAppoggio5 = " + dataAppoggio5);
            
            dataAppoggio10 = new Date(dataAppoggio10.getFullYear(),
                            dataAppoggio10.getMonth(), dataAppoggio10
                                            .getDate());
            dataAppoggio10meno1 = new Date(dataAppoggio10
                            .getFullYear(), dataAppoggio10.getMonth(),
                            dataAppoggio10.getDate() - 1);
            datadiscadenzameno1 = new Date(
                            datadiscadenza.getFullYear(), datadiscadenza
                                            .getMonth(), datadiscadenza.getDate() - 1);
            
            /*if (!ControlloDateUguali(datadiscadenza,dataAppoggio10, datadiscadenzameno1,dataAppoggio10meno1))*/
            
            //alert("dataInizio => " + dataInizio);
            //alert("dataFine => " + dataFine);
            
            //alert(" dataInizio>dataFine => " + dataInizio>dataFine);
            //alert(" dataInizio>dataFine => " + dataInizio>dataFine);

            var diff =  Math.floor(( dataFine - dataInizio ) / 86400000);



            //alert(" dataInizio - dataFine => " + diff);
            //alert(" controllo => " + !ControlloDateUguali(datadiscadenza,dataAppoggio10, datadiscadenzameno1,dataAppoggio10meno1));
            
            //if (dataInizio>dataFine)
            if (diff < 365)
            {
                    messaggio = "La data di scadenza inserita per il tipo documento non &egrave; corretta";
                    formInput.giornoScadenzaParam.style.backgroundColor = "#cb0000";
                    formInput.meseScadenzaParam.style.backgroundColor = "#cb0000";
                    formInput.annoScadenzaParam.style.backgroundColor = "#cb0000";
                    alertMessaggio(messaggio);
                    return false;
            }
            else
            {
              formInput.giornoScadenzaParam.style.backgroundColor = "#FFFFFF";
              formInput.meseScadenzaParam.style.backgroundColor = "#FFFFFF";
              formInput.annoScadenzaParam.style.backgroundColor = "#FFFFFF";
              return true;
            }
        }        
        
        function controlloPatente(formInput){
        
            //alert("controlloPatenteItaliana");
            
            var datadiscadenza = null,
            datadirilascio = null,
            dataAppoggio = null
            ;

            formInput = document.getElementById(formInput);
            
            datadiscadenza = trim(formInput.datadiscadenza.value);
            datadirilascio = trim(formInput.datadirilascio.value);
            
            aa = parseFloat(datadiscadenza.substr(6, 4));
            mm = parseFloat(datadiscadenza.substr(3, 2));
            gg = parseFloat(datadiscadenza.substr(0, 2));
            
            datadiscadenza = new Date(aa, mm - 1, gg);
            var dataFine=new Date();
            dataFine.setFullYear(aa,mm-1,gg);
            
            aa = parseFloat(datadirilascio.substr(6, 4));
            mm = parseFloat(datadirilascio.substr(3, 2));
            gg = parseFloat(datadirilascio.substr(0, 2));
            
            dataAppoggio = new Date(aa, mm - 1, gg);
            var dataInizio=new Date();
            dataInizio.setFullYear(aa,mm-1,gg);
            
            // l'ultimo parametro 10 sono gli anni di durata del
            // documento Carta d'identit�
            // ad esempio se � stato rilasciato il 10/10/2000 scadr�
            // il 09/10/2010
            // 10 anni e un giorno prima della data di rilascio
             
            var dataAppoggio3 = new Date(calcoloData(datadirilascio, '3'));
            //var dataAppoggio5 = new Date(calcoloData(datadirilascio, '5'));
            //var dataAppoggio10 = new Date(calcoloData(datadirilascio, '10'));
            
            // alert ("dataAppoggio10 = " + dataAppoggio10);
            // alert ("dataAppoggio5 = " + dataAppoggio5);
            
            /*dataAppoggio10 = new Date(dataAppoggio10.getFullYear(),
                            dataAppoggio10.getMonth(), dataAppoggio10
                                            .getDate());*/
            /*dataAppoggio5 = new Date(dataAppoggio5.getFullYear(),
                            dataAppoggio5.getMonth(), dataAppoggio5
                                            .getDate());*/
            dataAppoggio3 = new Date(dataAppoggio3.getFullYear(),
                            dataAppoggio3.getMonth(), dataAppoggio3
                                            .getDate());
                                            
            var diff =  Math.floor(( dataFine - dataInizio ) / 86400000);      
            
            
                                            
            /*if (!ControlloDate(datadiscadenza, dataAppoggio3)
                /*&& !ControlloDate(datadiscadenza, dataAppoggio5)
                && !ControlloDate(datadiscadenza, dataAppoggio10)*/
             if (diff < (365*3))
            {
                messaggio = "La data di scadenza inserita per il tipo documento non &egrave; corretta";
                formInput.giornoScadenzaParam.style.backgroundColor = "#cb0000";
                formInput.meseScadenzaParam.style.backgroundColor = "#cb0000";
                formInput.annoScadenzaParam.style.backgroundColor = "#cb0000";
                alertMessaggio(messaggio);
                return false;
            }
            else
            {
              formInput.giornoScadenzaParam.style.backgroundColor = "#FFFFFF";
              formInput.meseScadenzaParam.style.backgroundColor = "#FFFFFF";
              formInput.annoScadenzaParam.style.backgroundColor = "#FFFFFF";
              return true;
            }
        }        
        
        function controlloPassaporto(formInput){
        
            //alert("controlloPassaporto");
            
            var datadiscadenza = null,
            datadirilascio = null,
            dataAppoggio = null
            ;
            
            formInput = document.getElementById(formInput);            
            
            datadiscadenza = trim(formInput.datadiscadenza.value);
            datadirilascio = trim(formInput.datadirilascio.value);
            
            aa = parseFloat(datadiscadenza.substr(6, 4));
            mm = parseFloat(datadiscadenza.substr(3, 2));
            gg = parseFloat(datadiscadenza.substr(0, 2));
            
            datadiscadenza = new Date(aa, mm - 1, gg);
            
            aa = parseFloat(datadirilascio.substr(6, 4));
            mm = parseFloat(datadirilascio.substr(3, 2));
            gg = parseFloat(datadirilascio.substr(0, 2));
            
            dataAppoggio = new Date(aa, mm - 1, gg);
            
            // l'ultimo parametro 10 sono gli anni di durata del
            // documento Carta d'identit�
            // ad esempio se � stato rilasciato il 10/10/2000 scadr�
            // il 09/10/2010
            // 10 anni e un giorno prima della data di rilascio
            
            var dataAppoggio10 = new Date(calcoloData(datadirilascio, '10'));
            
            // alert ("dataAppoggio10 = " + dataAppoggio10);
            
            dataAppoggio10 = new Date(dataAppoggio10.getFullYear(),
                            dataAppoggio10.getMonth(), dataAppoggio10
                                            .getDate());
            if (!ControlloDate(datadiscadenza, dataAppoggio10)) 
            {
                messaggio = "La data di scadenza inserita per il tipo documento non &egrave; corretta";
                formInput.giornoScadenzaParam.style.backgroundColor = "#cb0000";
                formInput.meseScadenzaParam.style.backgroundColor = "#cb0000";
                formInput.annoScadenzaParam.style.backgroundColor = "#cb0000";
                alertMessaggio(messaggio);
                return false;
            }
            else
            {
              formInput.giornoScadenzaParam.style.backgroundColor = "#FFFFFF";
              formInput.meseScadenzaParam.style.backgroundColor = "#FFFFFF";
              formInput.annoScadenzaParam.style.backgroundColor = "#FFFFFF";
              return true;
            }
        }                
        
        function controlloPassaportoEstero(formInput){
        
            //alert("controlloPassaportoEstero");
            
            var datadiscadenza = null,
            datadirilascio = null,
            dataAppoggio = null
            ;
            
            formInput = document.getElementById(formInput);            
            
            datadiscadenza = trim(formInput.datadiscadenza.value);
            datadirilascio = trim(formInput.datadirilascio.value);
            
            aa = parseFloat(datadiscadenza.substr(6, 4));
            mm = parseFloat(datadiscadenza.substr(3, 2));
            gg = parseFloat(datadiscadenza.substr(0, 2));
            
            datadiscadenza = new Date(aa, mm - 1, gg);
            var dataFine=new Date();
            dataFine.setFullYear(aa,mm-1,gg);
            
            aa = parseFloat(datadirilascio.substr(6, 4));
            mm = parseFloat(datadirilascio.substr(3, 2));
            gg = parseFloat(datadirilascio.substr(0, 2));
            
            dataAppoggio = new Date(aa, mm - 1, gg);
            var dataInizio=new Date();
            dataInizio.setFullYear(aa,mm-1,gg);
            
            // l'ultimo parametro 10 sono gli anni di durata del
            // documento Carta d'identit�
            // ad esempio se � stato rilasciato il 10/10/2000 scadr�
            // il 09/10/2010
            // 10 anni e un giorno prima della data di rilascio
            
            var dataAppoggio10 = new Date(calcoloData(datadirilascio, '1'));
            
            
            
            
            // alert ("dataAppoggio10 = " + dataAppoggio10);
            
            dataAppoggio10 = new Date(dataAppoggio10.getFullYear(),
                            dataAppoggio10.getMonth(), dataAppoggio10
                                            .getDate());
            /*if (!ControlloDate(datadiscadenza, dataAppoggio10)) */
            
            var diff =  Math.floor(( dataFine - dataInizio ) / 86400000);            
            
            if(diff < 365)
            {
                messaggio = "La data di scadenza inserita per il tipo documento non &egrave; corretta";
                formInput.giornoScadenzaParam.style.backgroundColor = "#cb0000";
                formInput.meseScadenzaParam.style.backgroundColor = "#cb0000";
                formInput.annoScadenzaParam.style.backgroundColor = "#cb0000";
                alertMessaggio(messaggio);
                return false;
            }
            else
            {
              formInput.giornoScadenzaParam.style.backgroundColor = "#FFFFFF";
              formInput.meseScadenzaParam.style.backgroundColor = "#FFFFFF";
              formInput.annoScadenzaParam.style.backgroundColor = "#FFFFFF";
              return true;
            }
        }                  

		
	function alertMessaggio (messaggio)
	{
		SISAL.FX.showOnElement_TemplatePopup('body', 'mp.alert.buttonok.html', {"{title}" : "Attenzione", "{content}" : messaggio, "{buttonclick}" : '<hideThis>', "{buttontext}" : 'OK', width : '350px'});                	
	}		

	function calcoloData(dataAppoggio, anni) {

		var giorno = null, mese = null, anno = null;
		
		
		giorno = dataAppoggio.substr(0, 2);
		mese = dataAppoggio.substr(3, 2);
		anno = dataAppoggio.substr(6, 4);

		anno = parseFloat(anno) + parseFloat(anni);
		dataAppoggio = mese + '/' + giorno + '/' + anno;

		return dataAppoggio;

	}
        
	function ControlloDateUguali(dataSC, dataAP, dataScadenzaMeno1,
			dataAppoggioMeno1) {

		// alert ("VERSIONE 7 NEW");

		var dataScadenza = new Date();
		var dataAppoggio = new Date();
		var dataSCMenoUnGiorno = new Date();
		var dataAPMenoUnGiorno = new Date();
		var ritorno = false;

		dataScadenza.setMonth(dataSC.getMonth());
		dataScadenza.setFullYear(dataSC.getFullYear());
		dataScadenza.setDate(dataSC.getDate());

		dataAppoggio.setMonth(dataAP.getMonth());
		dataAppoggio.setFullYear(dataAP.getFullYear());
		dataAppoggio.setDate(dataAP.getDate());

		dataSCMenoUnGiorno.setMonth(dataScadenzaMeno1.getMonth());
		dataSCMenoUnGiorno.setFullYear(dataScadenzaMeno1.getFullYear());
		dataSCMenoUnGiorno.setDate(dataScadenzaMeno1.getDate());

		dataAPMenoUnGiorno.setMonth(dataAppoggioMeno1.getMonth());
		dataAPMenoUnGiorno.setFullYear(dataAppoggioMeno1.getFullYear());
		dataAPMenoUnGiorno.setDate(dataAppoggioMeno1.getDate());

		/*
		 * //alert ("dataScadenza = " + dataScadenza); //alert ("dataAppoggio = " +
		 * dataAppoggio); //alert ("dataSCMenoUnGiorno = " +
		 * dataSCMenoUnGiorno); //alert ("dataAPMenoUnGiorno = " +
		 * dataAPMenoUnGiorno);
		 */

		var mm1 = aggiungizero(dataScadenza.getMonth());
		var mm2 = aggiungizero(dataAppoggio.getMonth());
		var mmSCMeno1 = aggiungizero(dataSCMenoUnGiorno.getMonth());
		var mmAPMeno1 = aggiungizero(dataAPMenoUnGiorno.getMonth());
		var aa1 = dataScadenza.getFullYear();
		var aa2 = dataAppoggio.getFullYear();
		var aaSCMeno1 = dataSCMenoUnGiorno.getFullYear();
		var aaAPMeno1 = dataAPMenoUnGiorno.getFullYear();
		var gg1 = aggiungizero(dataScadenza.getDate());
		var gg2 = aggiungizero(dataAppoggio.getDate());
		var ggSCMeno1 = aggiungizero(dataSCMenoUnGiorno.getDate());
		var ggAPMeno1 = aggiungizero(dataAPMenoUnGiorno.getDate());

		var dataScadenzastr = aa1 + '/' + mm1 + '/' + gg1;
		var dataAppoggiostr = aa2 + '/' + mm2 + '/' + gg2;
		var dataSCMenoUnGiornostr = aaSCMeno1 + '/' + mmSCMeno1 + '/'
				+ ggSCMeno1;
		var dataAPMenoUnGiornostr = aaAPMeno1 + '/' + mmAPMeno1 + '/'
				+ ggAPMeno1;

		/*
		 * //alert ("dataScadenzastr = " + datanumero(dataScadenzastr)); //alert
		 * ("dataAppoggiostr = " + datanumero(dataAppoggiostr)); //alert
		 * ("dataSCMenoUnGiornostr = " + datanumero(dataSCMenoUnGiornostr));
		 * //alert ("dataAPMenoUnGiornostr = " +
		 * datanumero(dataAPMenoUnGiornostr));
		 */

		if ((dataScadenzastr == dataAppoggiostr)
				&& (dataSCMenoUnGiornostr == dataAPMenoUnGiornostr)
				|| (dataScadenzastr == dataAPMenoUnGiornostr)) {
			ritorno = true;
		} else {
			ritorno = false;
		}

		return ritorno;
	}        
        
	function ControlloDate(data1, data2) {

		// alert ("anno 1 = " + data1.getFullYear());
		// alert ("anno 2 = " + data2.getFullYear());

		var diff = data1.getFullYear() - data2.getFullYear();

		if (diff == 0) {
			if (((data1.getDate() == data2.getDate()) || (data1.getDate() == data2
					.getDate()))
					&& ((data1.getMonth() == data2.getMonth()) || (data1
							.getMonth() == data2.getMonth()))
					&& ((data1.getFullYear() == data2.getFullYear()) || (data1
							.getFullYear() == data2.getFullYear()))) {
				return true;
			}
		} else if (diff > 0) {
			return false;
		}
		return false;
	}
	        

	function aggiungizero(numero) {
		if (numero >= 0 && numero <= 9) {
			ritorno = '0' + numero;
		} else {
			ritorno = numero;
		}
		return ritorno;
	}

	function datanumero(datastr) {
		while (datastr.search("/") != -1) {
			datastr = datastr.replace("/", "");
		}

		return datastr;

	}
        
        function trim(str) {
            return str.replace(/^\s+|\s+$/g, "");
        }
        
        function controlloTelefono(form) {

          var telefono = null, 
              messaggio = null
              ;
  
          form = document.getElementById(form);
          telefono = form.telefono.value;
          
          if (telefono.length < 7)
          {
                  messaggio = "Il numero di telefono dev'essere almeno di 7 caratteri";
                  form.telefono.style.backgroundColor = "#cb0000";
                  alertMessaggio(messaggio);
                  return false;
          }
          else
          {
            form.telefono.style.backgroundColor = "#FFFFFF";
            return true;
          }
            
        }        

        function controlloMaggioreEta(form)
        {
        
          //alert("controlloMaggioreEta");
        
          var maggiorenne = true, 
              messaggio = null,
              anni = null,
              dataDiNascita = null
              ;
    
          form = document.getElementById(form);
          maggiorenne = form.maggiorenne.checked;
          dataDiNascita = form.datadinascita.value;
        
          if (!maggiorenne) {
                  messaggio = 'Devi selezionare la casella "ho più di 18 anni".';
                  alertMessaggio(messaggio);
                  return false;              
    
          } 
          else
          {
            anni = controlloDataNascita(dataDiNascita);
            if (parseFloat(anni) < 18) 
            {
              messaggio = "Devi avere almeno 18 anni per poterti registrare.";
              alertMessaggio(messaggio);
              return false;              
            }
          }
        
          return true;
          
        }
        
        function controlloTrattamentoDatiPersonali(form)
        {
        
          var   messaggio = null,
                consensoprivacy = true
                ;
      
            form = document.getElementById(form);
            consensoprivacy = form.consensoprivacy.checked;
            
          if (consensoprivacy == false) {
              //messaggio = "Devi selezionare la casella dell'accettazione del contratto, termini e condizioni.";
              messaggio = "Devi selezionare la casella 'Ho preso visione del Contratto'.";
              alertMessaggio(messaggio);
              return false;      
          }
          
          return true;
          
        }                                
        
        function controlloConsensoCondizini(form)
        {
        
          var   messaggio = null,
                consensocondizioni = true
                ;
      
            form = document.getElementById(form);
            consensocondizioni = form.id_consensocondizioni.checked;
            
          if (consensocondizioni == false) {
              //messaggio = "Devi selezionare la casella dell'informativa sul trattamento dei dati personali.";
              messaggio = "Devi selezionare la casella 'Ho preso visione dell'informativa sulla privacy'.";
              alertMessaggio(messaggio);
              return false;      
          }
          
          return true;
          
        }                                
        
        
    
	function controlloDataNascita(dataNascita) {
		var one_day = 1000 * 60 * 60 * 24;
		var one_month = 1000 * 60 * 60 * 24 * 30;
		var one_year = 1000 * 60 * 60 * 24 * 30 * 12;

		yr = dataNascita.substr(6, 4);
		mon = dataNascita.substr(3, 2);
		day = dataNascita.substr(0, 2);

		// alert ("anno = " + yr);
		// alert ("mese = " + mon);
		// alert ("giorno = " + day);

		today = new Date();
		var pastdate = new Date(yr, mon - 1, day);
		var countunit = "anni";
		var decimals = 0;
		var rounding = "rounddown";

		finalunit = (countunit == "giorni") ? one_day
				: (countunit == "mesi") ? one_month : one_year;
		decimals = (decimals <= 0) ? 1 : decimals * 10;

		anni = Math.floor((today.getTime() - pastdate.getTime()) / (finalunit)
				* decimals)
				/ decimals + " " + countunit;

		// alert ("nella funzione Anni = " + anni);

		return anni;

	}  
        
        function controlloCaptcha(form)
        {
        
          String.prototype.trim = function() {
                  return this.replace(/^\s+|\s+$/g,"");
          }
          String.prototype.ltrim = function() {
                  return this.replace(/^\s+/,"");
          }
          String.prototype.rtrim = function() {
                  return this.replace(/\s+$/,"");
          }
          
            //alert("controlloCaptcha");
        
            var captcha = null,
                myCaptcha = null,
                refererSite = $('#referersite').val(),
                url = "/RegistrazioneNuovo/pubblico/captchaSubmit.jsp"
            ;
            
            if (refererSite === "2")
            {
              url = "/RegistrazioneGNTN/pubblico/captchaSubmit.jsp"
            }
            
            
           var captcha = $("#code").val();
              
              param = "code="+captcha;
              esitoCaptcha = 10;
              
                $.ajax({
                type:'POST',	
                url: url,
                data:param,
                async:false,
                success: function(html){
                
                /*alert("*"+html.trim()+"*");
                alert("*"+html.ltrim()+"*");
                alert("*"+html.rtrim()+"*");*/

                html = html.trim();
                
                  if (html == 0)
                  {
                      $("#code").css("backgroundColor","#FFFFFF");
                     esitoCaptcha = 0;
                  }    
                  else
                  {
                    //form.code.style.backgroundColor = "#cb0000";
                    esitoCaptcha = 1;                    
                    $("#code").css("backgroundColor","#cb0000");
                    messaggio = "Il codice di sicurezza non &egrave; corretto";
                    alertMessaggio(messaggio);
                  }  
                },
                error: function(html){
                  //form.code.style.backgroundColor = "#cb0000";
                  esitoCaptcha = 1;                  
                  $("#code").css("backgroundColor","#cb0000");
                  messaggio = "Il codice di sicurezza non &egrave; corretto";
                  alertMessaggio(messaggio);
              }
              });	
              
              if (esitoCaptcha == "0")
              {
                return true;
              }  
              else
              {
                return false;
              }  
        }
    
        function iframeDocument(iframe) {
    
            var doc = null;
    
            if (iframe.contentDocument) {
                doc = iframe.contentDocument; // Firefox, Opera
            } else if (iframe.contentWindow) {
                doc = iframe.contentWindow.document; // Internet Explorer
            } else if (iframe.document) {
                doc = iframe.document; // Others?
            }
            return doc;
        }

function checkPassword(id_pin,label){
		var regex = "^.*(?=.*[a-zA-Z])";
		var numeric = "(?=.*[0-9])";
		var special = "((?=.*[^a-zA-Z0-9]).*)";//Solo questi caratteri sono consentiti
		
		var rc1 = "[Q]{3,}|[W]{3,}|[E]{3,}|[R]{3,}|[T]{3,}|[Y]{3,}|[U]{3,}|[I]{3,}|[O]{3,}|[P]{3,}|";
		var rc2 = "[A]{3,}|[S]{3,}|[D]{3,}|[F]{3,}|[G]{3,}|[H]{3,}|[J]{3,}|[K]{3,}|[L]{3,}|";
		var rc3 = "[Z]{3,}|[X]{3,}|[C]{3,}|[V]{3,}|[B]{3,}|[N]{3,}|[M]{3,}|";
		var rc4 = "[0]{3,}|[1]{3,}|[2]{3,}|[3]{3,}|[4]{3,}|[5]{3,}|[6]{3,}|[7]{3,}|[8]{3,}|[9]{3,}";
		var repeatingChars = rc1 + rc2 + rc3 + rc4;

		var rgc1 = "[Q]{2,}|[W]{2,}|[E]{2,}|[R]{2,}|[T]{2,}|[Y]{2,}|[U]{2,}|[I]{2,}|[O]{2,}|[P]{2,}|";
		var rgc2 = "[A]{2,}|[S]{2,}|[D]{2,}|[F]{2,}|[G]{2,}|[H]{2,}|[J]{2,}|[K]{2,}|[L]{2,}|";
		var rgc3 = "[Z]{2,}|[X]{2,}|[C]{2,}|[V]{2,}|[B]{2,}|[N]{2,}|[M]{2,}|";
		var rcg4 = "[0]{2,}|[1]{2,}|[2]{2,}|[3]{2,}|[4]{2,}|[5]{2,}|[6]{2,}|[7]{2,}|[8]{2,}|[9]{2,}";
		var repeatingGroupChars = rgc1 + rgc2 + rgc3 + rcg4;
		
		var text1 = id_pin;
		
		if (text1.length < 8 || text1.length > 12){
			return("La tua " + label + " deve contenere da un minimo di 8 a un massimo di 12 caratteri tra numeri e lettere maiuscole e minuscole.");
			//return false;
		}
		
		//Controllo caratteri, dimensione
		if (!text1.match(regex)){
			return("La tua "+ label +" deve contenere almeno una lettera.");
			return false;
		}		
		
		//Controllo numerico
		if (!text1.match(numeric)){
			return("La tua "+ label +" deve contenere almeno un numero.");
			//return false;
		}
		
                /*
		//Controllo caratteri speciali
		if (text1.match(special)){
			return("Ci sono caratteri speciali");
			//return false;
		}
                */
		
		//Controllo caratteri ripetuti +3
		if (text1.toUpperCase().match(repeatingChars)){
                  return("Non &egrave; possibile ripetere  pi&ugrave; di due volte gli stessi caratteri.<br><br><p style='color:red;'>Esempio di errore: AAABCD1.</p>");
			//return("Non &egrave; possibile ripetere pi&ugrave; di tre volte gli stessi caratteri.");
			//return false;
		}
		
		//Controllo gruppi ripetuti 3+
		var groupCounter = 0;
        	var subStringIndex = 0;
		var curText = "";

        	while (subStringIndex + 2 < text1.length + 1) {
			
			curText = text1.substring(subStringIndex, subStringIndex + 2)
			
			if (curText.toUpperCase().match(repeatingGroupChars)){
                		groupCounter++;
            		}

            		subStringIndex++;
        	}

        	if (groupCounter > 2) {
                  return("Non &egrave; possibile ripetere pi&ugrave; di due volte la stessa sequenza di caratteri.<br><br>" +
                  		"<p style='color:red;'>Esempio sequenza errata: AABBCC12.<br>" +
                  		"Esempio sequenza corretta: AABBCD12.</p>");
		//	return false;
        	}

		//return true;
                
                return null;
	}	
    


    return {
        username : username,
        numsOnly : numsOnly,
        numCivicoCharsOnly : numCivicoCharsOnly,
        numDocumentoCharsOnly : numDocumentoCharsOnly,
        emailCharNum : emailCharNum,
        promoCharsOnly : promoCharsOnly,
        alphaNumCharsOnly : alphaNumCharsOnly,
        nameCharsOnly : nameCharsOnly,
        indirizzoCharsOnly : indirizzoCharsOnly,
        luogoNascitaCharsOnly : luogoNascitaCharsOnly,
        codiceFiscaleNumCharsOnly : codiceFiscaleNumCharsOnly,
        risposteSicurezzaCharsOnly : risposteSicurezzaCharsOnly,
        luogoDiRilascioCharsOnly: luogoDiRilascioCharsOnly,
        provinciaCharsOnly: provinciaCharsOnly,
        usernameLogin : usernameLogin,
        controlloUsername : controlloUsername,
        controlloPin : controlloPin,
        controlloConfermaPin : controlloConfermaPin,
        controlloEmail : controlloEmail,
        controlloNome : controlloNome,
        controlloCartaIdentita : controlloCartaIdentita,
        controlloPatente : controlloPatente,
        controlloPassaporto : controlloPassaporto,
        controlloTelefono : controlloTelefono,
        alertMessaggio : alertMessaggio,
        controlloDomandeRisposta : controlloDomandeRisposta,
        controlloCodiceFiscale : controlloCodiceFiscale,
        controlloNumeroDocumento : controlloNumeroDocumento,
        controlloLuogoRilascioDocumento : controlloLuogoRilascioDocumento,
        controlloCap : controlloCap,
        controlloMaggioreEta : controlloMaggioreEta,
        controlloTrattamentoDatiPersonali : controlloTrattamentoDatiPersonali,
        controlloCaptcha : controlloCaptcha,
        iframeDocument  : iframeDocument ,
        controlloConsensoCondizini : controlloConsensoCondizini,
        controlloPassaportoEstero : controlloPassaportoEstero,
        controlloCartaIdentitaEuropea : controlloCartaIdentitaEuropea
    };
}());

if (SISAL.logger.isInfoEnabled()) {
    SISAL.logger.info("SISAL.GNTN.REGISTRAZIONE.VALIDAZIONE - namespace creato");
}


