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) )
                return "La partita IVA non è valida:\n" +
                        "il codice di controllo non corrisponde.\n";
        return '';

}

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) )
                return "Il codice fiscale non è corretto:\n"+
                        "il codice di controllo non corrisponde.\n";
        return "";
}

function validEmail(email)
{
   //controlla che la e-mail non sia vuota
   if (email == "")
   {
      return false;
   }

   // controllo della presenza del carattere '@'
   var index     = email.indexOf('@', 0);
   var address   = "";
   var ok = true;

   if (index == -1)
   {
      ok = false;
   }
   else
   {
      var size = email.length;
      address = email.substring(size + 1, index + 1);
      userid =  email.substring(1, index);

      // controlla: l'unicità del carattere "@";
      // - la presenza del "." nella parte DX dell'indirizzo;
      // - l'assenza di spazi e
      // - che la stringa non sia del tipo userid@.address o userid.@address
      if ((address.indexOf('@') != -1) || (userid.indexOf('@') != -1) ||
          (address.indexOf('.') == -1) || (!nospace(email)) ||
          (email.charAt(index - 1) == '.') || (email.charAt(index + 1) == '.'))
      {
         ok = false;
      }
   }
   if (ok == false)
   {
      alert("Indirizzo E-mail non valido!\n (Inserisci un indirizzo nella forma utente@dominio.it)");
      return false;
   }
   else
   {
      return true;
   }
}

function numberOK(num)
{
   var i = 0;
   var letter;

   while (i < num.length)
   {
      letter = num.charAt(i);

      if ((letter == '0') || (letter == '1') || (letter == '2') ||
          (letter == '3') || (letter == '4') || (letter == '5') ||
          (letter == '6') || (letter == '7') || (letter == '8') ||
          (letter == '9'))
      {
         i++;
      }
      else
      {
         return false;
      }
   }

   return true;
}

function TelNumberOK(data)
{
   var size        = data.length;
   var ReturnValue = true;
   var italiano    = false;
   var index  = 0;
   var prefix = 0;
   var space  = 0;
   var num;

   var CellPrefix = "/333|334|335|336|337|338|339|330" +
      "|360|368|340|347|348|349|320|328|329|380|388|389|392/g";

   if (data == "")
   {
      return true;
   }

   // controlla che il primo carattere sia un + e che
   // ci sia almeno uno spazio
   if ((data.indexOf('+', 0) != 0) || (data.indexOf(' ', 0) == -1))
   {
      ReturnValue = false;
   }
   else
   {
      // aggiunge uno spazio in fondo alla stringa
      data = data + ' ';
      size++;

      // cerca il primo spazio
      space = data.indexOf(' ', index);

      // fintanto che ci sono degli spazi e non c'è un errore
      while ((space != -1) && (space != '') && (ReturnValue == true))
      {
         // legge il numero
         num = data.substring(index + 1, space);

         if ((num == '') || !numberOK(num))
         {
            ReturnValue = false;
         }
         else
         {
            // controlla se il primo prefisso è italiano
            if ((prefix == 0) && (num == 39))
               italiano = true;

            // se è un numero per l'italia il secondo prefisso
            // deve iniziare con uno zero solo se non è un numero di cellulare
            if ((prefix == 1) && (italiano == true) && (num.charAt(0) == 0))
            {
               // controlla che non sia un numero di cellulare
               if (num.match(CellPrefix))
               {
                  ReturnValue = false;
               }
            }

            index = space;
            space = data.indexOf(' ', index + 1);
            prefix ++;
         }
      }
   }

   if ((ReturnValue == true) && (prefix == 3))
   {
      return true;
   }
   else
   {
      alert ("Numero non valido!\n (Inserisci un numero del tipo +39 06 315000)");
      return false;
   }
}

function isBlank(s)
{
        for(i=0;i<s.length;i++)
        {
                c=s.charAt(i);
                if((c!=' ')&&(c!='\n')&&(c!='\t'))return false;
        }
        return true;
}

function isValidInt(s)
{
        var i, c;

        for (i=0; i<s.length; i++) {
                c = s.charCodeAt(i);
                if ((c < 48) || (c > 57))
                        return false;
        }
        return true;
}

function isNegInt(s)
{
        if (s<0)
                return true;
        else
                return false;
}

function isHex(s) {
        var j, x = 0;
        for (var i = 0 ; i < s.length; i++) {
                var c = s.charAt(i);
                j = parseInt(c, 16);
                if (!((j == 0) || (j == 1)|| (j == 2)|| (j == 3)|| (j == 4)|| (j == 5)|| (j == 6)
                        || (j == 7)|| (j == 8)|| (j == 9)|| (j == 10)|| (j == 11)|| (j == 12)|| (j == 13)
                        || (j == 14)|| (j == 15))) {
                        x = 1;
                }
                if (x == 1) return false;
        }
        return true;
}

function isValidNum(s) {
        if((isBlank(s)) || (isNaN(s))||(isNValidInt(s))||(isNegInt(s)))
                return false;
        else
                return true;
}

function isSpecialChar(s) {
        var src = new String(s);
        var lst = new String("\\\"\'\/");
        var i, n;

        n = lst.length;
        for (i=0; i<n; i++) {
                var c = lst.charAt(i);
                var tmpS = new String(c);
                if (src.indexOf(tmpS) != -1) {
                        return true;
                }
        }

        return false;
}

function nospace(str)
{
   if (str != "")
   {
      var index = str.indexOf(" ", 0);
      if (index != -1)
      {
         return false;
      }
   }

   return true;
}

