var consonanti =  "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ";
var numeri = "0123456789";
var nn=document.layers?true:false,liv;

function inizia()
	{
	liv=nn?document.layers.livelloNN:top.frames.livelloIE;
	}

function CalcolaCodiceFiscale()
	{
	if (document.forms.CodiceFiscale.iCognome.value.replace(" ","")=="" || document.forms.CodiceFiscale.iNome.value.replace(" ","")=="" || document.forms.CodiceFiscale.iAnno.value.replace(" ","")=="" || document.forms.CodiceFiscale.iComune.value.replace(" ","")==""){window.alert("Compilare tutti i campi!");}
	document.forms.CodiceFiscale.iCognome.focus();
	with (document.forms.CodiceFiscale)
		 {
		 Cognome=document.forms.CodiceFiscale.iCognome.value;
		 Nome=document.forms.CodiceFiscale.iNome.value
		 GiornoNascita=document.forms.CodiceFiscale.iGiorno.options[iGiorno.selectedIndex].value;
		 MeseNascita=document.forms.CodiceFiscale.iMese.options[iMese.selectedIndex].value;
		  if (MeseNascita=='A'){MeseNumero='01'}
      if (MeseNascita=='B'){MeseNumero='02'}
      if (MeseNascita=='C'){MeseNumero='03'}
      if (MeseNascita=='D'){MeseNumero='04'}
      if (MeseNascita=='E'){MeseNumero='05'}
      if (MeseNascita=='H'){MeseNumero='06'}
      if (MeseNascita=='L'){MeseNumero='07'}
      if (MeseNascita=='M'){MeseNumero='08'}
      if (MeseNascita=='P'){MeseNumero='09'}
      if (MeseNascita=='R'){MeseNumero='10'}
      if (MeseNascita=='S'){MeseNumero='11'}
      if (MeseNascita=='T'){MeseNumero='12'}
		 AnnoNascita=document.forms.CodiceFiscale.iAnno.value;
 		 Sesso=document.forms.CodiceFiscale.iGender.options[iGender.selectedIndex].value;
		Comune=document.forms.CodiceFiscale.iComune.value;
		 }
	 if (parseInt(AnnoNascita) % parseInt(AnnoNascita) != 0 && Cognome != "" && Nome != "" && Comune != "")	{alert("Formato Anno Errato!");Cognome="";document.CodiceFiscale.iAnno.focus();} 
   if (Cognome != "" && Nome != "" && Comune != "")
   {
      ComuneCalcolato=CalcolaComune(Comune);
      rc = CalcolaCognome(Cognome);
	  rn = CalcolaNome(Nome)
	  rN = CalcolaNascita(GiornoNascita, MeseNascita, AnnoNascita, Sesso);

      var cf = rc+" "+rn+" "+rN+" "+ComuneCalcolato+" ";

      cf += CalcolaK(rc+rn+rN+ComuneCalcolato);
      if (ComuneCalcolato != -1)
       document.getElementById("cfsc").innerHTML='<br /><br /><strong>Ecco il tuo codice fiscale:</strong><div id="ris_cdfisc"><div style="padding:85px 0px 0px 45px;">' + cf + '</div><div style="margin:8px 0px 0px 45px;">' + Nome.toUpperCase() + '</div><div style="margin:2px 0px 0px 45px;">' + Cognome.toUpperCase() + '<span style="padding-left:150px;">' + Sesso + '</span></div><div style="margin:3px 0px 0px 45px;">' + Comune.toUpperCase() + '</div><div style="margin:3px 0px 0px 165px;">' + GiornoNascita + '/' + MeseNumero + '/'+ AnnoNascita + '</div></div><span style="padding-left:230px;"><input type="button" value="Reset" style="background-color:#e6e6e6;" onclick="javascript:document.location.reload();" title="Calcola Nuovo Codice Fiscale" /></span><br /><br />'
		else
		  window.alert("Comune non presente in archivio...");
   }
}

function CalcolaCognome(Cognome)
{
   var code = "";
   code = GetConsonanti(Cognome);
   if (code.length >= 3)
      code = code.substring(0, 3);
   else
   {
      code += GetVocali(Cognome).substring(0, 3 - code.length)
      if (code.length < 3)
         for (i = code.length; i < 3; i++)
            code += "X";
   }
   return code;
}

function CalcolaNome(Nome)
{
   var code = "";
   cons = GetConsonanti(Nome);
   if (cons.length > 3)
      code = cons.substring(0, 1) + cons.substring(2, 3) + cons.substring(3, 4);
   else if (cons.length == 3)
      code = cons;
   else
   {
      code = cons + GetVocali(Nome).substring(0, 3 - cons.length);
      if (code.length < 3)
         for (i = code.length; i < 3; i++)
            code += "X";
   }
   return code;
}

function GetConsonanti(Stringa)
{
   var cns = "";
   for (i = 0; i < Stringa.length; i++)
      if (consonanti.indexOf(Stringa.substring(i, i + 1)) != -1)
         cns += Stringa.substring(i, i + 1);
   return cns.toUpperCase();
}

function GetVocali(Stringa)
{
   var voc = "";
   for (i = 0; i < Stringa.length; i++)
      if (consonanti.indexOf(Stringa.substring(i, i + 1)) == -1 && Stringa.substring(i, i + 1) != " ")
         voc += Stringa.substring(i, i + 1);
   return voc.toUpperCase();
}

function CalcolaNascita(Giorno, Mese, Anno, Sesso)
{
   var code = "";
   code += Anno.substring(2, 4) + Mese;
   if (Sesso == "M")
      code += Giorno;
   else
      code += parseInt(40, 10) + parseInt(Giorno, 10);
   return code;
}

function CalcolaComune(Comune)
{
var flag = -1;

   for (i = 0; i < arrComuni.length; i++)
   {
      if(Comune.toUpperCase() == arrComuni[i][1])
      {
         flag = i;
         break;
      }
   }
   if (flag < 0)
      return -1;
   else
      return arrComuni[flag][0];            
}

function CalcolaK(Stringa)
{
   var somma = 0, k;
   var arrPari = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
   var arrDispari = new Array(
      Array(0,1),
      Array(1,0),
      Array(2,5),
      Array(3,7),
      Array(4,9),
      Array(5,13),
      Array(6,15),
      Array(7,17),
      Array(8,19),
      Array(9,21),
      Array("A",1),
      Array("B",0),
      Array("C",5),
      Array("D",7),
      Array("E",9),
      Array("F",13),
      Array("G",15),
      Array("H",17),
      Array("I",19),
      Array("J",21),
      Array("K",2),
      Array("L",4),
      Array("M",18),
      Array("N",20),
      Array("O",11),
      Array("P",3),
      Array("Q",6),
      Array("R",8),
      Array("S",12),
      Array("T",14),
      Array("U",16),
      Array("V",10),
      Array("W",22),
      Array("X",25),
      Array("Y",24),
      Array("Z",23)
   );
   for (i = 0; i < Stringa.length; i += 2)
   {
      for (j = 0; j < arrDispari.length; j++)
      {
         if (Stringa.substring(i, i + 1).toUpperCase() == arrDispari[j][0])
         {
            somma += parseInt(arrDispari[j][1], 10);
            break;
         }
      }
   }
   for (i = 1; i < Stringa.length; i += 2)
   {
      if (isNaN(Stringa.substring(i, i + 1)))
         somma += parseInt(arrPari.indexOf(Stringa.substring(i, i + 1)), 10);
      else
         somma += parseInt(Stringa.substring(i, i + 1), 10);
   }
   k = somma % 26;
   k = arrPari.charAt(k);
   return k;
}
