// controllo della correttezza di un codice fiscale
// adattato da esempio trovato in rete
// la funzione riceve il testo da verificare e ritorna true se esatto


// sulla base della lunghezza della stringa decido se devo verificare un CF o
// una PI
function PIVACheck (obj)
{
	testo = document.getElementsByName(obj)[0];
	if ( startVerifica(testo)==false)
	{
		testo.value="";
		testo.focus();
		testo.select();
	}
}


function startVerifica(testo)
{
	if ( testo.value.length == 11 )
	{
		 return controllaPIVA(testo.value);
	} 
	else 
	{
		if ( testo.value.length == 16) 
			return controllaCF(testo.value);
		else
		{
			// se non è stato inserito il valore, salto la validazione
			if (testo.value.length == 0 )
				return true;
				
			$message = "I CF devono essere di 16 caratteri e le PI di 11\n";
			alert($message);
			return false;
		}
	}
}


/**************************************
    Controllo del Codice Fiscale
    Linguaggio: JavaScript
***************************************/

function controllaCF(cf)
{
    var validi, i, s, set1, set2, setpari, setdisp;
    if( cf == '' )  return '';
    cf = cf.toUpperCase();
    if( cf.length != 16 )
        return "La lunghezza del codice fiscale non �\n"
        +"corretta: il codice fiscale dovrebbe essere lungo\n"
        +"esattamente 16 caratteri.\n";
    validi = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    for( i = 0; i < 16; i++ ){
        if( validi.indexOf( cf.charAt(i) ) == -1 )
            return "Il codice fiscale contiene un carattere non valido `" +
                cf.charAt(i) +
                "'.\nI caratteri validi sono le lettere e le cifre.\n";
    }
    set1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    set2 = "ABCDEFGHIJABCDEFGHIJKLMNOPQRSTUVWXYZ";
    setpari = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    setdisp = "BAKPLCQDREVOSFTGUHMINJWZYX";
    s = 0;
    for( i = 1; i <= 13; i += 2 )
        s += setpari.indexOf( set2.charAt( set1.indexOf( cf.charAt(i) )));
    for( i = 0; i <= 14; i += 2 )
        s += setdisp.indexOf( set2.charAt( set1.indexOf( cf.charAt(i) )));
    if( s%26 != cf.charCodeAt(15)-'A'.charCodeAt(0) )
    {
        $message = "Il codice fiscale non e' corretto:\n"+
            "il codice di controllo non corrisponde.\n";
      alert ( $message);
      return false;
    }
    else
    {
   	return true;
   	// return "";
    }
}

/*****************************************
    Controllo della Partita I.V.A.
    Linguaggio: JavaScript
******************************************/

function controllaPIVA(pi)
{
    if( pi == '' )  return '';
    if( pi.length != 11 )
        return "La lunghezza della partita IVA non �\n" +
            "corretta: la partita IVA dovrebbe essere lunga\n" +
            "esattamente 11 caratteri.\n";
    validi = "0123456789";
    for( i = 0; i < 11; i++ ){
        if( validi.indexOf( pi.charAt(i) ) == -1 )
            return "La partita IVA contiene un carattere non valido `" +
                pi.charAt(i) + "'.\nI caratteri validi sono le cifre.\n";
    }
    s = 0;
    for( i = 0; i <= 9; i += 2 )
        s += pi.charCodeAt(i) - '0'.charCodeAt(0);
    for( i = 1; i <= 9; i += 2 ){
        c = 2*( pi.charCodeAt(i) - '0'.charCodeAt(0) );
        if( c > 9 )  c = c - 9;
        s += c;
    }
    if( ( 10 - s%10 )%10 != pi.charCodeAt(10) - '0'.charCodeAt(0) )
    {
        $message= "La partita IVA non e' valida:\n" +
            "il codice di controllo non corrisponde.\n";
        alert ( $message);
        return false;
            
    }
    return true;
}
