function ControllaCF(cf)
{
	var validi, i, s, set1, set2, setpari, setdisp;
	if( cf == '' )
	{
		alert("Inserisci il codice fiscale");
		return false;
	}
	cf = cf.toUpperCase();
	if( cf.length != 16 )
	{
		alert("La lunghezza del codice fiscale non e'\n"
		+"corretta: il codice fiscale dovrebbe essere lungo\n"
		+"esattamente 16 caratteri.\n");
		return false;
	}
	validi = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
	for( i = 0; i < 16; i++ ){
		if( validi.indexOf( cf.charAt(i) ) == -1 )
		{
			alert("Il codice fiscale contiene un carattere non valido `" +
				cf.charAt(i) +
				"'.\nI caratteri validi sono le lettere e le cifre.\n");
			return false;
		}
	}
	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) )
	{
		alert("Il codice fiscale non e' corretto:\n"+
			"il codice di controllo non corrisponde.\n");
		return false;
			
	}
	return true;
}


function ControllaPIVA(pi)
{
	if( pi == '' ) 
	{
		alert("Inserire la Partita IVA");
		return false;
	}
	if( pi.length != 11 )
	{
		alert("La lunghezza della partita IVA non e'\n" +
			"corretta: la partita IVA dovrebbe essere lunga\n" +
			"esattamente 11 caratteri.\n");
		return false;
	}
	validi = "0123456789";
	for( i = 0; i < 11; i++ ){
		if( validi.indexOf( pi.charAt(i) ) == -1 )
		{
			alert("La partita IVA contiene un carattere non valido `" +
				pi.charAt(i) + "'.\nI caratteri validi sono le cifre.\n");
			return false;
		}
	}
	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) )
	{
			alert("La partita IVA non e' valida:\n" +
			"il codice di controllo non corrisponde.\n");
			return false;
	}
	return true;
}
			function emailCheck(emailStr) {
			var emailPat=/^(.+)@(.+)$/
			var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
			var validChars="\[^\\s" + specialChars + "\]"
			var quotedUser="(\"[^\"]*\")"
			var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
			var atom=validChars + '+'
			var word="(" + atom + "|" + quotedUser + ")"
			// The following pattern describes the structure of the user
			var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
			var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
			var matchArray=emailStr.match(emailPat)
			if (matchArray==null) {
			alert("L'email non é corretta")
			return false
			}
			var user=matchArray[1]
			var domain=matchArray[2]
			if (domain=='mailinator.com')
				{alert('Email inserita non valida!');
				return false;}
			// See if "user" is valid 
			if (user.match(userPat)==null) {
				// user is not valid
				alert("L'email non é corretta")
				return false
			}
			var IPArray=domain.match(ipDomainPat)
			if (IPArray!=null) {
				// this is an IP address
				  for (var i=1;i<=4;i++) {
					if (IPArray[i]>255) {
						alert("L'email non é corretta")
					return false
					}
				}
				return true
			}

			// Domain is symbolic name
			var domainArray=domain.match(domainPat)
			if (domainArray==null) {
				alert("L'email non é corretta")
				return false
			}
			var atomPat=new RegExp(atom,"g")
			var domArr=domain.match(atomPat)
			var len=domArr.length
			if (domArr[domArr.length-1].length<2 || 
				domArr[domArr.length-1].length>4) {
			   // the address must end in a two letter or three letter word.
			   alert("L'email non é corretta")
			   return false
			}

			// Make sure there's a host name preceding the domain.
			if (len<2) {
			   var errStr="L'email non é corretta"
			   alert(errStr)
			   return false
			}

			// If we've gotten this far, everything's valid!
			return true;
		}

		function formchecker()
		{

		if(form.nome.value=="")
		{
			alert("Inserire il nome");
			form.nome.focus();
			return false;
		}
		
		if(form.cognome.value=="")
		{
			alert("Inserire il cognome");
			form.cognome.focus();
			return false;
		}

		if(form.rag.value=="")
		{
			alert("Inserire la ragione sociale (se sei un privato scrivi 'Privato')");
			form.rag.focus();
			return false;
		}

		if(form.telefono.value=="")
		{
			alert("Inserire il telefono");
			form.telefono.focus();
			return false;
		}		
		if(form.email.value=="")
		{
			alert("Inserire la mail");
			form.email.focus();
			return false;
		}
		else
		{
			if(emailCheck(form.email.value)==false) return false;
		}

		if( form.codicefisc.value == "" )
		{
			alert("Inserire il codice fiscale/P.IVA");
			form.codicefisc.focus();
			return false;
		}
		else if( form.codicefisc.value=="12345678911")
		{
			alert("La partita IVA non é valida");
			return false;
		}
		else if( form.codicefisc.value=="00000000000")
		{
			alert("La partita IVA non é valida");
			return false;
		}		
		else if( form.codicefisc.value=="10101010105")
		{
			alert("La partita IVA non é valida");
			return false;
		}
		else if( form.codicefisc.value=="12547845854")
		{
			alert("La partita IVA non é valida");
			return false;
		}
		else if( form.codicefisc.value=="01234567897")
		{
			alert("La partita IVA non é valida");
			return false;
		}
		else if( form.codicefisc.value=="12312312312")
		{
			alert("La partita IVA non é valida");
			return false;
		}		
		else if( form.codicefisc.value=="xxxxxxxxxxxxxxxx")
		{
			alert("Il codice fiscale inserito non é valido");
			return false;
		}			
		else if( form.codicefisc.value.length == 16 )
		{
			 if(ControllaCF(form.codicefisc.value)==false)
			 return false;
		}
		else if( form.codicefisc.value.length == 11 )
		{
			 if(ControllaPIVA(form.codicefisc.value)==false)
			 return false;
		}
		else
		{
			alert("Il codice introdotto non e' valido:\n\n" +
				"  - un codice fiscale deve essere lungo 16 caratteri;\n\n" +
				"  - una partita IVA deve essere lunga 11 caratteri.\n");
			return false;
		}
	
		if(!(form.privacy.checked))
			{
				alert("Autorizzare il trattamento dei dati personali");
				form.privacy.focus();
				return false;
			}

		if(form.select.selectedIndex==0)
		{
			alert("Selezionare il campo 'Come ci hai conosciuto?'");
			return false;
		}


		return true;
	}

	function numeralsOnly(evt) 
	{
		evt = (evt) ? evt : event;
		var charCode = (evt.charCode) ? evt.charCode : ((evt.keyCode) ? evt.keyCode : 
			((evt.which) ? evt.which : 0));
		if (charCode > 31 && (charCode < 48 || charCode > 57)) {
			alert("Puoi inserire solo numeri");
			return false;
		}
		return true;
	}