			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")
			order.email.focus();
			return false
			}
			var user=matchArray[1]
			var domain=matchArray[2]

			// See if "user" is valid 
			if (user.match(userPat)==null) {
				// user is not valid
				alert("L'email non é corretta")
				order.email.focus();
				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")
						order.email.focus();
					return false
					}
				}
				return true
			}

			// Domain is symbolic name
			var domainArray=domain.match(domainPat)
			if (domainArray==null) {
				alert("L'email non é corretta")
				order.email.focus();
				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")
			   order.email.focus();
			   return false
			}

			// Make sure there's a host name preceding the domain.
			if (len<2) {
			   var errStr="L'email non é corretta"
			   alert(errStr)
			   order.email.focus();
			   return false
			}

			// If we've gotten this far, everything's valid!
			return true;
		}

	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 formchecker()
		{
			
		if(order.fattura[1].checked)
		{

			if(order.rag.value=="")
			{
				alert("Inserire la ragione sociale");
				order.rag.focus();
				return false;
			}
		}

			if(order.nome.value=="")
			{
				alert("Inserire il nome");
				order.nome.focus();
				return false;
			}

			if(order.cognome.value=="")
			{
				alert("Inserire il cognome");
				order.cognome.focus();
				return false;
			}



		
		if(order.fattura[1].checked)
		{
		
			if(order.Piva.value == "" )
			{
				alert("Inserire la P.IVA");
				order.Piva.focus();
				return false;
			}
			else if(order.Piva.value=="12345678911")
			{
				alert("La partita IVA non é valida");
				order.Piva.focus();
				return false;
			}
			else if(order.Piva.value=="00000000000")
			{
				alert("La partita IVA non é valida");
				order.Piva.focus();
				return false;
			}
			else if(order.Piva.value=="10101010105")
			{
				alert("La partita IVA non é valida");
				order.Piva.focus();
				return false;
			}
			else if( order.Piva.value=="12547845854")
			{
				alert("La partita IVA non é valida");
				return false;
			}
			else if( order.Piva.value=="01234567897")
			{
				alert("La partita IVA non é valida");
				return false;
			}
			else if( order.Piva.value=="12312312312")
			{
				alert("La partita IVA non é valida");
				return false;
			}			
			else if( order.Piva.value=="xxxxxxxxxxxxxxxx")
			{
				alert("Il codice fiscale inserito non é valido");
				return false;
			}			
			
			else if( order.Piva.value.length == 11 )
			{
				 if(ControllaPIVA(order.Piva.value)==false)
				 return false;
			}
			else
			{
				alert("la partita IVA deve essere lunga 11 caratteri");
				order.Piva.focus();				
				return false;
			}
			
			
			
			if( order.codicefisc.value == "" )
		{
			alert("Inserire il codice fiscale della società");
			order.codicefisc.focus();
			return false;
		}
		else if(order.codicefisc.value=="12345678911")
		{
			alert("Il codice fiscale non è valido");
			order.codicefisc.focus();
			return false;
		}
		else if(order.codicefisc.value=="00000000000")
		{
			alert("Il codice fiscale non è valido");
			order.codicefisc.focus();
			return false;
		}
		else if(order.codicefisc.value=="10101010105")
		{
			alert("Il codice fiscale non è valido");
			order.codicefisc.focus();
			return false;
		}
		else if( order.codicefisc.value=="12547845854")
		{
			alert("Il codice fiscale non è valido");
			return false;
		}
		else if( order.codicefisc.value=="01234567897")
		{
			alert("Il codice fiscale non è valido");
			return false;
		}
		else if( order.codicefisc.value=="12312312312")
		{
			alert("Il codice fiscale non è valido");
			return false;
		}			
		else if( order.codicefisc.value=="xxxxxxxxxxxxxxxx")
		{
			alert("Il codice fiscale non è valido");
			return false;
		}			
		else if( order.codicefisc.value.length == 16 )
		{
			 if(ControllaCF(order.codicefisc.value)==false)
			 return false;
		}
		else if( order.codicefisc.value.length == 11 )
		{
			 if(ControllaPIVA(order.codicefisc.value)==false)
			 return false;
		}
		else
		{
			alert("Il codice fiscale non è valido");
			order.codicefisc.focus();				
			return false;
		}
		
		}
		
		
		
		if(order.fattura[0].checked)
		{
				if( order.codicefisc.value == "" )
				{
					alert("Inserire il codice fiscale");
					order.codicefisc.focus();
					return false;
				}
				else if( order.codicefisc.value=="xxxxxxxxxxxxxxxx")
				{
					alert("Il codice fiscale inserito non é valido");
					return false;
				}			
				else if( order.codicefisc.value.length == 16 )
				{
					 if(ControllaCF(order.codicefisc.value)==false)
					 return false;
				}
				else
				{
					alert("il codice fiscale deve essere lungo 16 caratteri");
					order.codicefisc.focus();				
					return false;
				}
		}
		

			if(order.indirizzo.value=="")
			{
				alert("Inserire la via");
				order.indirizzo.focus();
				return false;
			}

			if(order.citta.value=="")
			{
				alert("Inserire la città");
				order.citta.focus();
				return false;
			}

			if(order.prov.value=="")
			{
				alert("Inserire la provincia");
				order.prov.focus();
				return false;
			}

			if(order.cap.value=="")
			{
				alert("Inserire il CAP");
				order.cap.focus();
				return false;
			}

			if(order.stato.value=="")
			{
				alert("Inserire il Paese");
				order.stato.focus();
				return false;
			}

			if(order.email.value=="")
			{
				alert("Inserire la mail");
				order.email.focus();
				return false;
			}
			else
			{
				if(emailCheck(order.email.value)==false) return false;
			}

			if(order.telefono.value=="")
			{
				alert("Inserire il telefono");
				order.telefono.focus();
				return false;
			}
			
			if(!(order.privacy.checked))
			{
				alert("Autorizzare il trattamento dei dati personali");
				order.privacy.focus();
				return false;
			}
			
			
			
		if(order.scelta[1].checked) //Devo controllare anche la spedizione
		{
			if(order.rag_sped.value=="")
			{
				alert("Inserire la ragione sociale per la spedizione");
				order.rag_sped.focus();
				return false;
			}

			if(order.nome_sped.value=="")
			{
				alert("Inserire il nome per la spedizione");
				order.nome_sped.focus();
				return false;
			}

			if(order.cognome_sped.value=="")
			{
				alert("Inserire il cognome per la spedizione");
				order.cognome_sped.focus();
				return false;
			}

			
			if(order.indirizzo_sped.value=="")
			{
				alert("Inserire la via per la spedizione");
				order.indirizzo_sped.focus();
				return false;
			}

			if(order.citta_sped.value=="")
			{
				alert("Inserire la città per la spedizione");
				order.citta_sped.focus();
				return false;
			}

			if(order.prov_sped.value=="")
			{
				alert("Inserire la Provincia per la spedizione");
				order.prov_sped.focus();
				return false;
			}

			if(order.cap_sped.value=="")
			{
				alert("Inserire il CAP per la spedizione");
				order.cap_sped.focus();
				return false;
			}

			if(order.stato_sped.value=="")
			{
				alert("Inserire lo stato per la spedizione");
				order.stato_sped.focus();
				return false;
			}

			if(order.email_sped.value=="")
			{
				alert("Inserire la mail per la spedizione");
				order.email_sped.focus();
				return false;
			}
			else
			{
				if(emailCheck(order.email_sped.value)==false) return false;
			}

			if(order.telefono_sped.value=="")
			{
				alert("Inserire il telefono per la spedizione");
				order.telefono_sped.focus();
				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;
	}

