
// --------------------------------------------------------------------------
function CalcolaCodiceFiscale(formCF)
{
	
 //alert ("calcolaCodiceFiscale " + formCF.name);	
	
 var gs=0;
 var i=0;
 var somma=0;

 strCodFis="";
 strcognome="";
 strnome="";
 strgiornosex="";
 chrcontrollo='';
 
	Nome    			= formCF.id_nome.value.toUpperCase();
	Cognome 			= formCF.id_cognome.value.toUpperCase();
	Sesso         = formCF.id_sesso.value;
	
	Nazionenascita = formCF.nazioneNascita.value.toUpperCase();
	
	if (Nazionenascita == "Z000")
	{
		//alert ("ITALIA = " + formCF.comuneDiNascita.value.toUpperCase());
		Comune        = formCF.comuneNascita.value.toUpperCase();
	}	
	else if (Nazionenascita != "Z000")	
	{
		//alert ("ESTERO");
		Comune = Nazionenascita;
	}
	
	//alert ("Comune = " + Comune);
	
	DataDiNascita = formCF.id_dataDiNascita.value.toUpperCase();
  
	
	
	formCF.id_nome.style.backgroundColor = "";
	formCF.id_cognome.style.backgroundColor = "";
	formCF.comuneNascita.style.backgroundColor = "";
	formCF.id_dataDiNascita.style.backgroundColor = "";
	
	if (Nome == "")
	{
		//alert ("Nome non valorizzato impossibile generare codice fiscale");
		Dialog.alert("Nome non valorizzato impossibile generare codice fiscale", {width:350, height:110,title:'Attenzione'});
		formCF.id_nome.style.backgroundColor = "#F37D16";
		formCF.id_nome.focus();
		return;
	}
	else if (Cognome == "")
	{
		Dialog.alert("Cognome non valorizzato impossibile generare codice fiscale", {width:350, height:110,title:'Attenzione'});
		// alert ("Cognome non valorizzato impossibile generare codice fiscale");
		formCF.id_cognome.style.backgroundColor = "#F37D16";
		formCF.id_cognome.focus();
		return;
	}
	else if (Comune == "")
	{
		Dialog.alert("Comune di nascita non valorizzato impossibile generare codice fiscale", {width:350, height:110,title:'Attenzione'});
		//alert ("Comune non valorizzato impossibile generare codice fiscale");
		formCF.comuneNascita.style.backgroundColor = "#F37D16";
		formCF.comuneNascita.focus();
		return;
	}
	else if (DataDiNascita == "")
	{
		Dialog.alert("Data di nascita non valorizzata impossibile generare codice fiscale", {width:350, height:110,title:'Attenzione'});
		//alert ("Data Di Nascita non valorizzata impossibile generare codice fiscale");
		formCF.id_dataDiNascita.style.backgroundColor = "#F37D16";
		formCF.id_dataDiNascita.focus();
		return;
	}
	
	
/*
if (SessoM)
{
	Sesso = "M";
}	
else
{
	Sesso = "F";
}	
*/	

// DECODIFICA MESE //

mesi    = new Array(); 
mesiCod = new Array(); 
Mese    = DataDiNascita.substr(3,2);
Mese    = parseFloat(Mese);
Giorno  = DataDiNascita.substr(0,2);
Giorno  = parseFloat(Giorno);


mesi [0]="01";
mesi [1]="02";
mesi [2]="03";
mesi [3]="04";
mesi [4]="05";
mesi [5]="06";
mesi [6]="07";
mesi [7]="08";
mesi [8]="09";
mesi [9]="10";
mesi [10]="11";
mesi [11]="12";

mesiCod [0]="A";
mesiCod [1]="B";
mesiCod [2]="C"; 
mesiCod [3]="D";
mesiCod [4]="E";
mesiCod [5]="H"; 
mesiCod [6]="L";
mesiCod [7]="M";
mesiCod [8]="P"; 
mesiCod [9]="R";
mesiCod [10]="S";
mesiCod [11]="T"; 


i=0;

 //inizio blocco di istruzioni
 while(i<mesi.length) 
 {
	if (mesi[i] == Mese)
	{
		Mese = mesiCod[i];
		break;
	}	

  i++; //aumento l'indice di 1
 } 
 
// DECODIFICA SESSO  

if (Sesso == "M")
{
	Sesso = 0;
}
else if (Sesso == "F")
{
	Sesso = 1;
}	

// DATA DI NASCITA

AnnoCento = DataDiNascita.substr(6,2);
AnnoCento = parseFloat(AnnoCento);
AnnoDieci = DataDiNascita.substr(8,1);
AnnoDieci = parseFloat(AnnoDieci);
AnnoZero  = DataDiNascita.substr(9,1);
AnnoDieci = parseFloat(AnnoDieci);

/*
alert ("giorno = " + Giorno);
alert ("AnnoCento = " + AnnoCento);
alert ("AnnoDieci = " + AnnoDieci);
alert ("AnnoZero = " + AnnoZero);
alert ("Mese = " + Mese);
alert ("Comune = " + Comune);
alert ("Sesso = " + Sesso);
alert ("Cognome = " + Cognome);
alert ("nome = " + Nome);
*/


lunghezzaCognome = Cognome.length;
lunghezzaNome = Nome.length;


if (Cognome != "" && Nome != "")
 {

  // Processa il cognome
  //----------------------------------------------------------------
    for (i=0; i<lunghezzaCognome; i++) 
        {
        	
        	//alert ("i = " + i);
        	//alert ("cognome charAt = " + Cognome.charAt(i));
        	
         switch (Cognome.charAt(i)) 
                {
                  case 'A':
                  case 'E':
                  case 'I':
                  case 'O':
                  case 'U': break;            
                  default : 
                  if((Cognome.charAt(i)<='Z')&& (Cognome.charAt(i)>'A'))
                   strcognome = strcognome + Cognome.charAt(i);
                }
        }
        
    //alert ("strcognome.length  = " + strcognome.length );
        
    if (strcognome.length < 3) 
      {
       for (i=0; i<lunghezzaCognome; i++) 
          {
           switch (Cognome.charAt(i)) 
                 {
                  case 'A':
                  case 'E':
                  case 'I':
                  case 'O':
                  case 'U': strcognome = strcognome + Cognome.charAt(i);
                 }
          }
       if (strcognome.length < 3) 
         {
          for (i=strcognome.length; i<=3; i++) 
             { strcognome = strcognome + 'X'; }
         }
      }
   strcognome = strcognome.substring(0,3);

 //------------------------------------------------------------ 



  // processa il nome
  //----------------------------------------------------------------
    for (i=0; i<lunghezzaNome; i++) 
       {
       	
       	//alert ("i = " + i);
       	//alert ("Nome.charAt(i) ) " + Nome.charAt(i));
       	
        switch (Nome.charAt(i)) 
              {
               case 'A':
               case 'E':
               case 'I':
               case 'O':
               case 'U': break;
               default:
 if((Nome.charAt(i)<='Z')&& (Nome.charAt(i)>'A'))
                  strnome = strnome + Nome.charAt(i);
              }
       }
       
    if (strnome.length > 3) 
      {
        strnome = strnome.substring(0,1) + strnome.substring(2,4);
      } 
    else {
          if (strnome.length < 3) 
            {
             for (i=0; i<lunghezzaNome; i++) 
                {
                  switch (Nome.charAt(i)) 
                        {
                         case 'A':
                         case 'E':
                         case 'I':
                         case 'O':
                         case 'U': strnome = strnome + Nome.charAt(i);
                        }
                }
             if (strnome.length < 3) 
               {
                for (i=strnome.length; i<=3; i++) 
                   {strnome = strnome + 'X';}
               }
            }
          strnome = strnome.substring(0,3);
         }
 //--------------------------------------- Fine processa nome




 // processa giorno e sesso
 //--------------------------------------------
  gs = Giorno + (40 * Sesso);
  
  if(gs<10)
  	strgiornosex = "0" + gs;
  else
  	strgiornosex =  gs;
  	
 //--------------------------------------------

 strCodFis = strcognome + strnome + AnnoDieci + AnnoZero + Mese + strgiornosex + Comune;
 
 // calcola la cifra di controllo
 //--------------------------------------------
    for (i=0; i<15; i++) 
       {
        if (((i+1) % 2) != 0) //caratteri dispari
          {
           switch (strCodFis.charAt(i)) 
                 {
                  case '0':
                  case 'A':{ somma += 1; break;}
                  case '1':
                  case 'B':{ somma += 0; break;}
                  case '2':
                  case 'C':{ somma += 5; break;}
                  case '3':
                  case 'D':{ somma += 7; break;}
                  case '4':
                  case 'E':{ somma += 9; break;}
                  case '5':
                  case 'F':{ somma += 13; break;}
                  case '6':
                  case 'G':{ somma += 15; break;}
                  case '7':
                  case 'H':{ somma += 17; break;}
                  case '8':
                  case 'I':{ somma += 19; break;}
                  case '9':
                  case 'J':{ somma += 21; break;}
                  case 'K':{ somma += 2; break;}
                  case 'L':{ somma += 4; break;}
                  case 'M':{ somma += 18; break;}
                  case 'N':{ somma += 20; break;}
                  case 'O':{ somma += 11; break;}
                  case 'P':{ somma += 3; break;}
                  case 'Q':{ somma += 6; break;}
                  case 'R':{ somma += 8; break;}
                  case 'S':{ somma += 12; break;}
                  case 'T':{ somma += 14; break;}
                  case 'U':{ somma += 16; break;}
                  case 'V':{ somma += 10; break;}
                  case 'W':{ somma += 22; break;}
                  case 'X':{ somma += 25; break;}
                  case 'Y':{ somma += 24; break;}
                  case 'Z':{ somma += 23; break;}
                 }
          } 
        else //caratteri pari
            {
              switch (strCodFis.charAt(i)) 
                 {
                  case '0':
                  case 'A':{ somma += 0; break;}
                  case '1':
                  case 'B':{ somma += 1; break;}
                  case '2':
                  case 'C':{ somma += 2; break;}
                  case '3':
                  case 'D':{ somma += 3; break;}
                  case '4':
                  case 'E':{ somma += 4; break;}
                  case '5':
                  case 'F':{ somma += 5; break;}
                  case '6':
                  case 'G':{ somma += 6; break;}
                  case '7':
                  case 'H':{ somma += 7; break;}
                  case '8':
                  case 'I':{ somma += 8; break;}
                  case '9':
                  case 'J':{ somma += 9; break;}
                  case 'K':{ somma += 10; break;}
                  case 'L':{ somma += 11; break;}
                  case 'M':{ somma += 12; break;}
                  case 'N':{ somma += 13; break;}
                  case 'O':{ somma += 14; break;}
                  case 'P':{ somma += 15; break;}
                  case 'Q':{ somma += 16; break;}
                  case 'R':{ somma += 17; break;}
                  case 'S':{ somma += 18; break;}
                  case 'T':{ somma += 19; break;}
                  case 'U':{ somma += 20; break;}
                  case 'V':{ somma += 21; break;}
                  case 'W':{ somma += 22; break;}
                  case 'X':{ somma += 23; break;}
                  case 'Y':{ somma += 24; break;}
                  case 'Z':{ somma += 25; break;}
                 }
            }
    }
   somma %= 26;
   switch (somma) 
         {
          case 0: {chrcontrollo='A'; break;}
          case 1: {chrcontrollo='B'; break;}
          case 2: {chrcontrollo='C'; break;}
          case 3: {chrcontrollo='D'; break;}
          case 4: {chrcontrollo='E'; break;}
          case 5: {chrcontrollo='F'; break;}
          case 6: {chrcontrollo='G'; break;}
          case 7: {chrcontrollo='H'; break;}
          case 8: {chrcontrollo='I'; break;}
          case 9: {chrcontrollo='J'; break;}
          case 10: {chrcontrollo='K'; break;}
          case 11: {chrcontrollo='L'; break;}
          case 12: {chrcontrollo='M'; break;}
          case 13: {chrcontrollo='N'; break;}
          case 14: {chrcontrollo='O'; break;}
          case 15: {chrcontrollo='P'; break;}
          case 16: {chrcontrollo='Q'; break;}
          case 17: {chrcontrollo='R'; break;}
          case 18: {chrcontrollo='S'; break;}
          case 19: {chrcontrollo='T'; break;}
          case 20: {chrcontrollo='U'; break;}
          case 21: {chrcontrollo='V'; break;}
          case 22: {chrcontrollo='W'; break;}
          case 23: {chrcontrollo='X'; break;}
          case 24: {chrcontrollo='Y'; break;}
          case 25: {chrcontrollo='Z'; break;}
         }
 //--------------------------------------------

codicefiscale = strCodFis + chrcontrollo;

//alert ("codice fiscale finale = " + codicefiscale);

//formCF.id_codicefiscale.value = codicefiscale;

 }
 return codicefiscale; 
}

// --------------------------------------------------------------------------
//  END OF SCRIPT
// --------------------------------------------------------------------------

