// FUNZIONI PER IL CALCOLO DEL CODICE FISCALE

function GetConsonanti(Stringa)
{	
   consonanti = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ";
   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)
{
   consonanti = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ";
   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 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 CalcolaNascita(Giorno, Mese, Anno, Sesso)
{	
	m=new Array('A','B','C','D','E','H','L','M','P','R','S','T');
   var code = "";
   code += Anno.substring(2, 4) + m[Mese-1];
   if (Sesso == "M")
      code += Giorno;
   else
      code += parseInt(40) + parseInt(Giorno,10);
   return code;
}

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]);
            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)));
      else
         somma += parseInt(Stringa.substring(i, i + 1));
   }
   k = somma % 26;
   k = arrPari.charAt(k);
   return k;
}

function codice_fiscale(id){
	sesso=getCheckedValue(this.document.getElementsByName('sess_'));
	nome=this.document.getElementById('nome_').value;
	cognome=this.document.getElementById('cogn_').value;
	codi_nazi=this.document.getElementById('codi_nazi').value;
	data_nasc=this.document.getElementById('data_nasc').value;
	//alert("sesso="+sesso+" nome="+nome+" cognome"+cognome+" codi_nazionale="+codi_nazi+" data_nascita="+data_nasc);
	if (cognome != "" && nome != "" && sesso!="" && codi_nazi != "" && data_nasc!="")
		{      
		rc 	= CalcolaCognome(cognome);
		rn 	= CalcolaNome(nome);
		data	= data_nasc.split('/');
		rN 	= CalcolaNascita(data[0], data[1], data[2], sesso);
		k		= CalcolaK(rc+rn+rN+codi_nazi);
		cf 	= rc+rn+rN+codi_nazi+k;
		this.document.getElementById('codi_fisc').value = cf;
		}
}


