function emailCheck (emailStr) {

/* Questa variabile decide se verificare se la terminazione dell'indirizzo email finisce con TLD di due lettere o con un TLD da 3 o 4 lettere. 1 significa controlla, 0 significa non controlla. */

var checkTLD=1;

/* Lista dei TLD conosciuti. */

var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;

/* Qui controlla che ci sia il @. */

var emailPat=/^(.+)@(.+)$/;

/* Qui escludo i caratteri speciali come ( ) < > @ , ; : \ " [ ] */

var specialChars="\\(\\)><@,;:\\\\\\\"\\[\\]";

/* Qui indica quali sono i caratteri permessi in un user o domainname.*/

var validChars="\[^\\s" + specialChars + "\]";

/* Qui controlla se l'username è tra " . */

var quotedUser="(\"[^\"]*\")";

/* Qui controlla se il nome di dominio è un indirizzo ip. */

var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;

/* Serie di caratteri non speciali (atom) */

var atom=validChars + '+';

/* Qui rappresenta una parola nell'username. */

var word="(" + atom + "|" + quotedUser + ")";

// Qui descrive la struttura dell'username

var userPat=new RegExp("^" + word + "(\\." + word + ")*$");

/* Qui descrive la struttura di un normale dominio simbolico, in contrapposizione a ipDomainPat. */

var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");

/* E ora cominciamo a vedere se l'indirizzo e valido. */

/* Iniziamo con il coarse pattern per spezzare utente@dominio in diverse parti piu' facili da analizzare. */

var matchArray=emailStr.match(emailPat);

if (matchArray==null) {

/* Troppi o troppo pochi @. In sostanza questo indirizzo non rispetta la sintassi generica. */

alert("Indirizzo email non valido (controllare @ e .)");
return false;
}
var user=matchArray[1];
var domain=matchArray[2];

// Iniziamo col controllare se i caratteri sono tutti ASCII.

for (i=0; i<user.length; i++) {
if (user.charCodeAt(i)>127) {
alert("L'username dell'indirizzo email contiene caratteri non validi");
return false;
   }
}
for (i=0; i<domain.length; i++) {
if (domain.charCodeAt(i)>127) {
alert("Il nome dominio dell'indirizzo email contiene caratteri non validi");
return false;
   }
}

// Vediamo se "user" e' valido

if (user.match(userPat)==null) {

// user non e' valido

alert("L'username dell'indirizzo email non e' valido");
return false;
}

/* se l'indirizzo email va a un indirizzo ip, assicuriamoci che l'ip sia valido. */

var IPArray=domain.match(ipDomainPat);
if (IPArray!=null) {

// questo e' un indirizzo ip

for (var i=1;i<=4;i++) {
if (IPArray[i]>255) {
alert("L'indirizzo IP di destinazione non e' valido");
return false;
   }
}
return true;
}

// il dominio e' un nome simbolico. controlliamo se e' valido.
 
var atomPat=new RegExp("^" + atom + "$");
var domArr=domain.split(".");
var len=domArr.length;
for (i=0;i<len;i++) {
if (domArr[i].search(atomPat)==-1) {
alert("Il nome del dominio dell'indirizzo email non e' valido");
return false;
   }
}

/* il dominio sembra valido, ma assicuriamoci che finisca con un dominio toplevel o con 2 lettere che rappresentano un paese, e che ci sia un hostname che precede il dominio o paese. */

if (checkTLD && domArr[domArr.length-1].length!=2 && 
domArr[domArr.length-1].search(knownDomsPat)==-1) {
alert("L'indirizzo email deve terminare con un dominio conosciuto o due lettere");
return false;
}

// assicuriamoci che ci sia un hostname.

if (len<2) {
alert("L'indirizzo email non contiene un hostname");
return false;
}

// If we've gotten this far, everything's valid!
return true;
}

//  End -->
function checkFormReg()
{

	var sessione1 			= document.getElementById('form_sessione_1').checked;
	var sessione2 			= document.getElementById('form_sessione_2').checked;
	var sessione3 			= document.getElementById('form_sessione_3').checked;
	var email				= document.getElementById('form_email').value;
	var nome 				= document.getElementById('form_nome').value;
	var cognome 			= document.getElementById('form_cognome').value;
	/*var data_nascita 		= document.getElementById('form_data_nascita').value;*/
	var luogo_nascita 		= document.getElementById('form_luogo_nascita').value;
	var provincia_nascita	= document.getElementById('form_provincia_nascita').value;
	var residenza		 	= document.getElementById('form_residenza').value;
	var via 				= document.getElementById('form_via').value;
	var cap			 		= document.getElementById('form_cap').value;
	var provincia	 		= document.getElementById('form_provincia').value;
	var stato		 		= document.getElementById('form_stato').value;
	var telefono	 		= document.getElementById('form_telefono').value;
	var telefono_urgenze	= document.getElementById('form_telefono_urgenze').value;
	var societa		 		= document.getElementById('form_societa').value;
	var email_societa 		= document.getElementById('form_email_societa').value;
	var citta_societa 		= document.getElementById('form_citta_societa').value;
	var campi=0;
	
	if(sessione1==false && sessione2==false && sessione3==false)
	{
		campi++;
		alert_sessione="- Session\n"
	}	
	else
	{
		alert_sessione="";
	}	

	if(email=="")
	{
		campi++;
		alert_email="- Email\n"
	}
	else
	{
		if(emailCheck(email)==false)
		{
			campi++;
			alert_email="- Invalid email\n"
		}
		else
		{
			alert_email="";
		}
	}
	
	if(nome=="")
	{
		campi++;
		alert_nome="- Name\n"
	}	
	else
	{
		alert_nome="";
	}	
	
	if(cognome=="")
	{
		campi++;
		alert_cognome="- Surname\n"
	}	
	else
	{
		alert_cognome="";
	}	
	
	/*if(data_nascita=="")
	{
		campi++;
		alert_data_nascita="- Date of birth\n"
	}	
	else
	{
		alert_data_nascita="";
	}*/
	
	if(luogo_nascita=="")
	{
		campi++;
		alert_luogo_nascita="- Place of birth\n"
	}	
	else
	{
		alert_luogo_nascita="";
	}	
	
	if(provincia_nascita=="")
	{
		campi++;
		alert_provincia_nascita="- Country of birth\n"
	}	
	else
	{
		alert_provincia_nascita="";
	}
	
	if(residenza=="")
	{
		campi++;
		alert_residenza="- Town\n"
	}	
	else
	{
		alert_residenza="";
	}
	
	if(via=="")
	{
		campi++;
		alert_via="- Home Address\n"
	}	
	else
	{
		alert_via="";
	}
	
	if(cap=="")
	{
		campi++;
		alert_cap="- Zip Code\n"
	}	
	else
	{
		alert_cap="";
	}
	
	if(provincia=="")
	{
		campi++;
		alert_provincia="- Country\n"
	}	
	else
	{
		alert_provincia="";
	}
	
	if(stato=="")
	{
		campi++;
		alert_stato="- State\n"
	}	
	else
	{
		alert_stato="";
	}
	
	if(telefono=="")
	{
		campi++;
		alert_telefono="- Telephone\n"
	}	
	else
	{
		alert_telefono="";
	}
	
	if(telefono_urgenze=="")
	{
		campi++;
		alert_telefono_urgenze="- Emergency telephone\n"
	}	
	else
	{
		alert_telefono_urgenze="";
	}
	
	if(societa=="")
	{
		campi++;
		alert_societa="- Club\n"
	}	
	else
	{
		alert_societa="";
	}
	
	if(email_societa=="")
	{
		campi++;
		alert_email_societa="- Club email\n"
	}
	else
	{
		if(emailCheck(email_societa)==false)
		{
			campi++;
			alert_email_societa="- Invalid club email\n"
		}
		else
		{
			alert_email_societa="";
		}
	}
	
	if(citta_societa=="")
	{
		campi++;
		alert_citta_societa="- Club town\n"
	}	
	else
	{
		alert_citta_societa="";
	}
	
	if(campi!=0)
	{
		alert("The following fields must be filled in:\n"
				+alert_sessione
				+alert_email
				+alert_nome
				+alert_cognome
				+alert_luogo_nascita
				+alert_provincia_nascita
				+alert_residenza
				+alert_via
				+alert_cap
				+alert_provincia
				+alert_stato
				+alert_telefono
				+alert_telefono_urgenze
				+alert_societa
				+alert_email_societa
				+alert_citta_societa
		);
		return false;
	}
	else
	{
		return true;
	}
}

