// VERIFICA NOME
function isName(what,fname)
{
   var i=new RegExp("([a-zA-Z\ ]{2,})");
   if(!i.test(what)) { alert("The field "+fname+" is invalid."); return false}   
   return true;
}

// VERIFICA CITTA
function isCitta(what,fname)
{
   var i=new RegExp("([a-zA-Z\ ]{3,})");
   if(!i.test(what)) { alert("The field "+fname+" is invalid."); return false}   
   return true;
}

// VERIFICA PROVINCIA
function isProv(what,fname)
{
   var i=new RegExp("([a-zA-Z\ ]{2})");
   if(!i.test(what)) { alert("The field "+fname+" is invalid."); return false}   
   return true;
}

// VERIFICA EMAIL
function isEmail(what)
{
   var i=new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,4}|[0-9]{1,4})(\\]?)$");
   if(!i.test(what)) { alert("The field E-MAIL is invalid."); return false}   
   return true;
}

// VERIFICA PASSWORD
function isPassword(what,fname)
{
   var i=new RegExp("([a-zA-Z0-9]{7,20})");
   if(!i.test(what)) { alert("The field "+fname+" is invalid."); return false}   
   return true;
}

// VERIFICA URL
function isURL(what)
{
   var i=new RegExp("HTTP:\/\/([a-zA-Z\.0-9]{2,})\.([a-zA-Z\.0-9]{2,})");
   if(!i.test(what)) { alert("The field WEB-SITE is invalid."); return false}   
   return true;
}

// VERIFICA TEL/FAX
function isTelFax(what,fname)
{
   var i=new RegExp("([0-9\\-\\ \\/]{6,})");
   if(!i.test(what)) { alert("The field "+fname+" is invalid."); return false}   
   //numero di rete fissa
   //if(what.substring(0,1)!=0) { alert("Inserire un numero di rete fissa."); return false}
   return true;
}

// VERIFICA CAP
function isCAP(what)
{
   var i=new RegExp("^[0-9]{4,10}$");
   if(!i.test(what)) { alert("The field ZIP is incorrect."); return false }   
   return true;
}

// VERIFICA CF
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 če'\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 e' corretto:\n"+
			"il codice di controllo non corrisponde.\n";
	return "";
}

// VERIFICA P.IVA
function ControllaPIVA(pi)
{
	if( pi == '' )  return '';
	if( pi.length != 11 )
		return "La lunghezza della partita IVA non e'\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 e' valida:\n" +
			"il codice di controllo non corrisponde.\n";
	return '';
}

// VERIFICA Indirizzo
function isAddress(what)
{
   var i=new RegExp("([a-zA-Z0-9\ ]{3,})");
   if(!i.test(what)) { alert("The field INDIRIZZO is invalid."); return false }
   return true;
}

// VERIFICA Data di nascita
function isDate(what,fname)
{
   var i=new RegExp("^([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{4})$");
   if(i.test(what))
   {
	datePart=what.split("/");
	giorno=(datePart[0]>=1) && (datePart[0]<=31);
	mese=(datePart[1]>=1) && (datePart[1]<=12);
	anno=(datePart[2]>=1900) && (datePart[2]<=9999);

	if(!giorno || !mese || !anno) { alert("The field "+fname+" is invalid."); return false }
	
   }  
   else
   {
	alert("The field "+fname+" is invalid"); return false
   }
   return true;
}

// VERIFICA Titolare carta di credito
function isCCOwner(what)
{
   var i=new RegExp("([a-zA-Z\. ])");
   if(!i.test(what)) { alert("The field TITOLARE is invalid."); return false }
   return true;
}

// VERIFICA Numero carta di credito
function isCCNumber(what)
{
   var i=new RegExp("([0-9]{16,20})");
   if(!i.test(what)) { alert("The field NUMERO CARTA is invalid."); return false }
   return true;
}

// VERIFICA Scadenza carta di credito
function isCCExpiration(what)
{
   var i=new RegExp("([0-9]{1,2})/([0-9]{4})$");
   if(i.test(what))
   {
	datePart=what.split("/");
	mese=(datePart[0]>=1) && (datePart[0]<=12);
	anno=(datePart[1]>=1900) && (datePart[1]<=9999);

	if(!mese || !anno) { alert("The field SCADENZA CARTA is invalid."); return false }
	
   }  
   else
   {
	alert("The field SCADENZA CARTA is invalid"); return false
   }
   return true;
}
