
function isDigit(c){
   if ((c >='0') && (c<='9')) {
      return true;
   }else{
      return false;
   }
}


function isLetterOrDigit(c){
   if ((isDigit(c)) || (c>='a') && (c<='z') || (c>='A') && (c<='Z')){
      return true;
   }else{
      return false;
   }
      
}


function isVocale(c){
   c=c.toUpperCase();
   return ((c =='A') || (c=='E') || (c=='I') || (c=='O') || (c=='U')) ;
}

function isConsonante(c){
   c=c.toUpperCase();
   return !isVocale(c) && ((c >='A') && (c<='Z')) ;
}

function Cognome2CodiceFiscale(cognome){
   var vocali    ='';
   var consonanti='';
   cognome=cognome.toUpperCase();
   for (var i = 0; i < cognome.length; i++) {
      
      var c=cognome.charAt(i);

      if (isVocale(c)) {
         vocali=vocali+c;
      }
      if (isConsonante(c)) {
         consonanti=consonanti+c;
      }
   }

   var codice=consonanti+vocali+'XXX';
   return codice.charAt(0)+codice.charAt(1)+codice.charAt(2);
}


function Nome2CodiceFiscale(nome){
   var vocali    ='';
   var consonanti='';
   
   nome=nome.toUpperCase();
   
   for (var i=0; i < nome.length; i++) {
      var c=nome.charAt(i);
      if (isVocale(c)) {
         vocali=vocali+c;
      }
      if (isConsonante(c)) {
         consonanti=consonanti+c;
      }
   }
   var skip=0;
   if (consonanti.length > 3) {
      skip=1;
   }
   var codice=consonanti+vocali+'XXX';
   //alert(cognome.length);
   return codice.charAt(0)+codice.charAt(1+skip)+codice.charAt(2+skip);
}

function Data2CodiceFiscale(gg,mm,aa,sesso){
   // mm 1-12
   // aa 00 99  oppure xxxx
   // sesso M/F
   var defaultvalue='?????';
   if (gg.length==0 || gg.length>2) {
      //alert('Data2CodiceFiscale : parametro giorno non valido')
      return defaultvalue;
   }
   if (mm.length==0 || mm.length>2) {
      //alert('Data2CodiceFiscale : parametro mese non valido')
      return defaultvalue;
   }
   if (aa.length!=2 && aa.length!=4) {
      //alert('Data2CodiceFiscale : parametro anno non valido')
      return defaultvalue;
   }
   if (sesso!='M' && sesso!='F') {
      //alert('Data2CodiceFiscale : parametro sesso non valido')
      return defaultvalue;
   }

   

   if (gg.length==1) {
      gg='0'+gg;
   }
   if (aa.length==4) {
      aa=aa.charAt(2)+aa.charAt(3);
   }
   if (sesso=='F') {
      gg=gg+40;
   }
   var codice= aa+  'ABCDEHLMPRST'.charAt(mm-1) + gg;
   return codice;
}

function aa2CodiceFiscale(aa){
   // aa 00 99  oppure xxxx
   var defaultvalue='??';
   if (aa.length!=2 && aa.length!=4) {
      //alert('Data2CodiceFiscale : parametro anno non valido')
      return defaultvalue;
   }
   if (aa.length==4) {
      aa=aa.charAt(2)+aa.charAt(3);
   }
   var codice= aa;
   return codice;
}


function mm2CodiceFiscale(mm){
   // mm 1-12
   // aa 00 99  oppure xxxx
   // sesso M/F
   var defaultvalue='?';
   if (mm.length==0 || mm.length>2) {
      //alert('Data2CodiceFiscale : parametro mese non valido')
      return defaultvalue;
   }
   var mesi='ABCDEHLMPRST';
   var codice= mesi.charAt(mm-1);
   return codice;
}

function CodiceFiscale2mm(cc){
   var mese ='ABCDEHLMPRST'.lastIndexOf(cc);
   return mese;
}


function gg2CodiceFiscale(gg,sesso){
   // sesso M/F
   var defaultvalue='??';
   if (gg.length==0 || gg.length>2) {
      //alert('Data2CodiceFiscale : parametro giorno non valido')
      return defaultvalue;
   }
   if (sesso!='M' && sesso!='F') {
      //alert('Data2CodiceFiscale : parametro sesso non valido')
      return defaultvalue;
   }

   if (gg.length==1) {
      gg='0'+gg;
   }
   if (sesso=='F') {
      gg=gg -1 +41;
   }
   var codice=gg;
   return codice;
}

function calcolaCarattereControlloCodiceFiscale (cf ){
   var defaultvalue='*';
   
   if ( cf.length < 15 ){
      //alert('calcolaCarattereControlloCodiceFiscale : lunghezza parametro CF < 15')
      return defaultvalue; //Il codice fiscale deve avere lunghezza 16
   }

   valori = new Array(26)
   valori[0]  = 1
   valori[1]  = 0
   valori[2]  = 5
   valori[3]  = 7
   valori[4]  = 9
   valori[5]  = 13
   valori[6]  = 15
   valori[7]  = 17
   valori[8]  = 19
   valori[9]  = 21
   valori[10] = 2
   valori[11] = 4
   valori[12] = 18
   valori[13] = 20
   valori[14] = 11
   valori[15] = 3
   valori[16] = 6
   valori[17] = 8
   valori[18] = 12
   valori[19] = 14
   valori[20] = 16
   valori[21] = 10
   valori[22] = 22
   valori[23] = 25
   valori[24] = 24
   valori[25] = 23

   var t = 0;
   var index = 0;
   var even = 0;
   
   for (var i = 1; i < 16; i++ ){
      if ( ! isLetterOrDigit(cf.charAt(i-1)) ){
         //alert('calcolaCarattereControlloCodiceFiscale : carattere non valido')
         return defaultvalue;//E' stato inserito un carattere non valido
      }
      even  = parseInt(( i / 2 ),10) * 2;
      index = cf.charCodeAt(i-1);
      if ( index > 60 )
          index -= 65;
      else
          index -= 48;

      if ( even == i )
          t = t + index;
      else
          t = t + parseInt(valori[index]);
   }
   t = t - parseInt( t / 26,10 ) * 26 + 65;
   return String.fromCharCode(t);
}




function validate (cf ){
   if (isDigit(cf.charAt(0))) { //codice fiscale per persona giuridica (numerico)
      if ( cf.length != 11 ){
         return 1;//Il codice fiscale deve avere lunghezza 11
      }
      var t = 0;
      var index = 0;
      var even = 0;
      for (var i = 1; i < 11; i++ ){
   
         if ( ! isDigit(cf.charAt(i-1)) ){
            return 3; //E' stato inserito un carattere non valido
            
         }
         even  = parseInt(( i / 2 ),10) * 2;
         index = parseInt(cf.charAt(i-1),10);

         if ( even == i ){
             var u = index * 2;

             if (u > 9) {
                var pp = u+"";
                u = parseInt(pp.charAt(0),10) + parseInt(pp.charAt(1),10);
             }
             t += u;
         }else{
             t += index;

         }
      }
   
      var ff = t +"";
      t = 10 - parseInt(ff.charAt(ff.length-1),10);
   
      if (t == 10 ) {
         t = 0;
      }

      if ( parseInt(cf.charAt(10)) != t ){
        return 4; //Il codice fiscale inserito non è corretto!
      }
   }else{//codice fiscale per persona fisica 
      if ( cf.length != 16 ){
      return 2; //Il codice fiscale deve avere lunghezza 16 
      }
   
      valori = new Array(26)
      valori[0]  = 1
      valori[1]  = 0
      valori[2]  = 5
      valori[3]  = 7
      valori[4]  = 9
      valori[5]  = 13
      valori[6]  = 15
      valori[7]  = 17
      valori[8]  = 19
      valori[9]  = 21
      valori[10] = 2
      valori[11] = 4
      valori[12] = 18
      valori[13] = 20
      valori[14] = 11
      valori[15] = 3
      valori[16] = 6
      valori[17] = 8
      valori[18] = 12
      valori[19] = 14
      valori[20] = 16
      valori[21] = 10
      valori[22] = 22
      valori[23] = 25
      valori[24] = 24
      valori[25] = 23
   
      var t = 0;
      var index = 0;
      var even = 0;
      
      for (var i = 1; i < 16; i++ ){
   
         if ( ! isLetterOrDigit(cf.charAt(i-1)) ){
            return 3;//E' stato inserito un carattere non valido
         }
         even  = parseInt(( i / 2 ),10) * 2;
         index = cf.charCodeAt(i-1);
         if ( index > 60 )
             index -= 65;
         else
             index -= 48;
   
         if ( even == i )
             t = t + index;
         else
             t = t + parseInt(valori[index]);
      }
   
      t = t - parseInt( t / 26,10 ) * 26 + 65;
   
      if ( cf.charCodeAt(15) != t ){
          return 4;//Il codice fiscale inserito non è corretto!
      }
      
      var c=cf.substring(6,7);
      //alert (c);   
      if (c<'0' || c>'9'){
        return 4;//Il codice fiscale inserito non è corretto!
      }

   }
   return 0;

}

function checkPassword(pwd1,pwd2){
   var msg="Il campo password deve essere di almeno 8 caratteri e contenere almeno un numero!";
   if (pwd1!=pwd2){
      alert("Attenzione! Le password inserite non coincidono");
      return false;
   }
   if (pwd1.length<8){
      alert(msg);
      return false;
   }
   var contieneunDigit=false;
   for (var i=0;i<pwd1.length;i++) {
      var c=pwd1.charAt(i);
      if (isDigit(c)) {
         //alert('digit found');
         contieneunDigit=true;
         break;
      }
   }
   if (!contieneunDigit){
      alert(msg);
      return false;
   }
   return true;
}



