// Calcolo del codice fiscale

// Variabili:

var strCodFis="";
var strcognome="";
var strnome="";
var strgiornosex="";
var ChSumm=''; //carattere di controllo del codice

 var Lanno=0;//lunghezza campo anno
// --------------------------------------------------------------------------

// controlla il cognome

function CheckCognome()
{
 if(document.FormCodFis.Cognome.value.length < 1)
   {
    alert("Attenzione:\nManca il Cognome!");
		document.FormCodFis.Cognome.focus();
    return(0);
   }
document.FormCodFis.Cognome.value = document.FormCodFis.Cognome.value.toUpperCase();
return(1);
}
// controllo del nome

function CheckNome()
{
 if(document.FormCodFis.Nome.value.length < 1)
   {
    alert("Attenzione:\nManca il Nome!");
		document.FormCodFis.Nome.focus();
    return(0);
   }
document.FormCodFis.Nome.value = document.FormCodFis.Nome.value.toUpperCase();
return(1);
}

// controllo del comune

function CheckComune()
{
 if(document.FormCodFis.Comune.value.length < 1)
   {
    alert("Attenzione:\nManca il Comune!");
    return(0);
   }
document.FormCodFis.Comune.value = document.FormCodFis.Comune.value.toUpperCase();
return(1);
}
// controllo dell'anno di nascita

function CheckAnno()
{
 if(document.FormCodFis.Anno.value.length < 2)
   {
    alert("Attenzione:\nAnno di nascita incompleto!");
	document.FormCodFis.Anno.focus();
    return(0);
   }
Lanno=document.FormCodFis.Anno.value.length
AnnoNasc = document.FormCodFis.Anno.value.slice((Lanno-2),Lanno)
document.FormCodFis.Anno.value = document.FormCodFis.Anno.value.toUpperCase();
return(1);
}


// calcolo del codice fiscale

function CalcolaCodiceFiscale()
{
 var gs=0;
 var i=0;
 var st=0;

 strCodFis="";
 strcognome="";
 strnome="";
 strgiornosex="";
 ChSumm='';
 
Giorno=parseInt(document.FormCodFis.Giorno.options[document.FormCodFis.Giorno.selectedIndex].value,10); 

Lanno=document.FormCodFis.Anno.value.length;
AnnoNasc = document.FormCodFis.Anno.value.slice((Lanno-2),Lanno);
Mese=document.FormCodFis.Mese.options[document.FormCodFis.Mese.selectedIndex].value;
Comune=document.FormCodFis.Comune.value;
Sesso=parseInt(document.FormCodFis.Sesso.options[document.FormCodFis.Sesso.selectedIndex].value,10);

if(CheckCognome() && CheckNome() && CheckAnno() && CheckComune())
 {

  // estrazione dal cognome

    for (i=0; i<document.FormCodFis.Cognome.value.length; i++) 
        {
         switch (document.FormCodFis.Cognome.value.charAt(i)) 
                {
                  case 'A':
                  case 'E':
                  case 'I':
                  case 'O':
                  case 'U': break;            
                  default : 
                  if((document.FormCodFis.Cognome.value.charAt(i)<='Z')&& (document.FormCodFis.Cognome.value.charAt(i)>'A'))
                   strcognome = strcognome + document.FormCodFis.Cognome.value.charAt(i);
                }
        }
    if (strcognome.length < 3) 
      {
       for (i=0; i<document.FormCodFis.Cognome.value.length; i++) 
          {
           switch (document.FormCodFis.Cognome.value.charAt(i)) 
                 {
                  case 'A':
                  case 'E':
                  case 'I':
                  case 'O':
                  case 'U': strcognome = strcognome + document.FormCodFis.Cognome.value.charAt(i);
                 }
          }
       if (strcognome.length < 3) 
         {
          for (i=strcognome.length; i<=3; i++) 
             { strcognome = strcognome + 'X'; }
         }
      }
   strcognome = strcognome.substring(0,3);

  // estrazione dal nome

    for (i=0; i<document.FormCodFis.Nome.value.length; i++) 
       {
        switch (document.FormCodFis.Nome.value.charAt(i)) 
              {
               case 'A':
               case 'E':
               case 'I':
               case 'O':
               case 'U': break;
               default:
 if((document.FormCodFis.Nome.value.charAt(i)<='Z')&& (document.FormCodFis.Nome.value.charAt(i)>'A'))
                  strnome = strnome + document.FormCodFis.Nome.value.charAt(i);
              }
       }
    if (strnome.length > 3) 
      {
        strnome = strnome.substring(0,1) + strnome.substring(2,4);
      } 
    else {
          if (strnome.length < 3) 
            {
             for (i=0; i<document.FormCodFis.Nome.value.length; i++) 
                {
                  switch (document.FormCodFis.Nome.value.charAt(i)) 
                        {
                         case 'A':
                         case 'E':
                         case 'I':
                         case 'O':
                         case 'U': strnome = strnome + document.FormCodFis.Nome.value.charAt(i);
                        }
                }
             if (strnome.length < 3) 
               {
                for (i=strnome.length; i<=3; i++) 
                   {strnome = strnome + 'X';}
               }
            }
          strnome = strnome.substring(0,3);
         }

 // giorno e sesso

  gs = Giorno + (40 * Sesso);
  if(gs<10) strgiornosex = "0" + gs;
  else strgiornosex =  gs;

 strCodFis = strcognome + strnome + AnnoNasc + Mese + strgiornosex + Comune;
 
 // calcolo della cifra di controllo
 //--------------------------------------------
    for (i=0; i<15; i++) 
       {
        if (((i+1) % 2) != 0) //caratteri dispari
          {
           switch (strCodFis.charAt(i)) 
                 {
                  case '0':
                  case 'A':{ st += 1; break;}
                  case '1':
                  case 'B':{ st += 0; break;}
                  case '2':
                  case 'C':{ st += 5; break;}
                  case '3':
                  case 'D':{ st += 7; break;}
                  case '4':
                  case 'E':{ st += 9; break;}
                  case '5':
                  case 'F':{ st += 13; break;}
                  case '6':
                  case 'G':{ st += 15; break;}
                  case '7':
                  case 'H':{ st += 17; break;}
                  case '8':
                  case 'I':{ st += 19; break;}
                  case '9':
                  case 'J':{ st += 21; break;}
                  case 'K':{ st += 2; break;}
                  case 'L':{ st += 4; break;}
                  case 'M':{ st += 18; break;}
                  case 'N':{ st += 20; break;}
                  case 'O':{ st += 11; break;}
                  case 'P':{ st += 3; break;}
                  case 'Q':{ st += 6; break;}
                  case 'R':{ st += 8; break;}
                  case 'S':{ st += 12; break;}
                  case 'T':{ st += 14; break;}
                  case 'U':{ st += 16; break;}
                  case 'V':{ st += 10; break;}
                  case 'W':{ st += 22; break;}
                  case 'X':{ st += 25; break;}
                  case 'Y':{ st += 24; break;}
                  case 'Z':{ st += 23; break;}
                 }
          } 
        else //caratteri pari
            {
              switch (strCodFis.charAt(i)) 
                 {
                  case '0':
                  case 'A':{ st += 0; break;}
                  case '1':
                  case 'B':{ st += 1; break;}
                  case '2':
                  case 'C':{ st += 2; break;}
                  case '3':
                  case 'D':{ st += 3; break;}
                  case '4':
                  case 'E':{ st += 4; break;}
                  case '5':
                  case 'F':{ st += 5; break;}
                  case '6':
                  case 'G':{ st += 6; break;}
                  case '7':
                  case 'H':{ st += 7; break;}
                  case '8':
                  case 'I':{ st += 8; break;}
                  case '9':
                  case 'J':{ st += 9; break;}
                  case 'K':{ st += 10; break;}
                  case 'L':{ st += 11; break;}
                  case 'M':{ st += 12; break;}
                  case 'N':{ st += 13; break;}
                  case 'O':{ st += 14; break;}
                  case 'P':{ st += 15; break;}
                  case 'Q':{ st += 16; break;}
                  case 'R':{ st += 17; break;}
                  case 'S':{ st += 18; break;}
                  case 'T':{ st += 19; break;}
                  case 'U':{ st += 20; break;}
                  case 'V':{ st += 21; break;}
                  case 'W':{ st += 22; break;}
                  case 'X':{ st += 23; break;}
                  case 'Y':{ st += 24; break;}
                  case 'Z':{ st += 25; break;}
                 }
            }
    }
   st %= 26;
   switch (st) 
         {
          case 0: {ChSumm='A'; break;}
          case 1: {ChSumm='B'; break;}
          case 2: {ChSumm='C'; break;}
          case 3: {ChSumm='D'; break;}
          case 4: {ChSumm='E'; break;}
          case 5: {ChSumm='F'; break;}
          case 6: {ChSumm='G'; break;}
          case 7: {ChSumm='H'; break;}
          case 8: {ChSumm='I'; break;}
          case 9: {ChSumm='J'; break;}
          case 10: {ChSumm='K'; break;}
          case 11: {ChSumm='L'; break;}
          case 12: {ChSumm='M'; break;}
          case 13: {ChSumm='N'; break;}
          case 14: {ChSumm='O'; break;}
          case 15: {ChSumm='P'; break;}
          case 16: {ChSumm='Q'; break;}
          case 17: {ChSumm='R'; break;}
          case 18: {ChSumm='S'; break;}
          case 19: {ChSumm='T'; break;}
          case 20: {ChSumm='U'; break;}
          case 21: {ChSumm='V'; break;}
          case 22: {ChSumm='W'; break;}
          case 23: {ChSumm='X'; break;}
          case 24: {ChSumm='Y'; break;}
          case 25: {ChSumm='Z'; break;}
         }

//document.FormCodFis.CodiceFiscale.value = strCodFis + ChSumm;
 document.FormCodFis.CodiceFiscale.value = strcognome +" "+ strnome +" " + AnnoNasc + Mese + strgiornosex +" "+ Comune+ChSumm;
 }
 return; 
}

