// validform (un check evoluto per i campi di un form) 1.0

/*
formfield -- the document reference to your form field (e.g., myform.fieldName)
fieldlabel -- the user friendly string that you want the error message to refer to your field by
required -- whether the field is required to be filled in by the user (true/false)
*/

/*
validRequired(formfield, fieldlabel) -- checks for a field being empty
validRequired2(formfield, fieldlabel) -- checks for a field being empty & with char
validEmail(formfield, fieldlabel, required) -- checks for a correctly formatted email address
validNum(formfield, fieldlabel, required) -- checks for a valid number (a string where all the characters are digits)
validNum2(formfield, fieldlabel, required) -- checks for a valid number (a string where all the characters are digits or tel symbols)
validInt(formfield, fieldlabel, required) -- checks for a number (integer) that can be correctly parsed with the function parseInt
validCap(formfield, fieldlabel, required) -- checks for a number (integer) by 5 elements
validDate(formfield, fieldlabel, required) -- checks for a correctly formatted date
*/

function validRequired(formfield,fieldlabel)
{
	var result = true;
	//alert(formfield.value);
	var n=formfield.value.length;
	spazio= new String(" ");
	spazio2=new String(" ");
	var i=0;
	for(i=0;i<n-1;i++)
		spazio=spazio+spazio2;
	if (formfield.value == spazio||formfield.value =="")
	{
		alert('Inserire le informazioni nel campo "' + fieldlabel +'"');
		formfield.focus();
		result = false;
	}
	return result;//OK controllato
}


function validRequired2(formfield,fieldlabel)
{
	var result = true;
	//alert(formfield.value);
	var n=formfield.value.length;
	spazio= new String(" ");
	spazio2=new String(" ");
	var i=0;
	for(i=0;i<n-1;i++)
		spazio=spazio+spazio2;
	if (formfield.value == spazio||formfield.value =="")
	{
		alert('Inserire le informazioni nel campo "' + fieldlabel +'"');
		formfield.focus();
		result = false;
	}
 	if (result)
 	{
 		if (!allChars(formfield.value))
 		{
 			alert('E\' stato inserito un carattere non permesso nel campo "' + fieldlabel +'"');
			formfield.focus();		
			result = false;
		}
	} 
	return result;//OK controllato
}


function validEmail(formfield,fieldlabel,required)
{
	var result = true;
	//alert(formfield.value+"-"+fieldlabel+"-"+required);
	if (result && ((formfield.value.length < 3) || !isEmailAddr(formfield.value) || !allFulls(formfield.value)))
	{
		alert("Inserire un indirizzo nella seguente forma: il_tuo_indirizzo@provider.estensione");
		formfield.focus();
		result = false;
	}
   return result;//OK controllato
}


function validNum(formfield,fieldlabel,required)
{
	var result = true;
	//alert(formfield.value+"-"+fieldlabel+"-"+required);
	if (required && !validRequired(formfield,fieldlabel))
		result = false;
 	if (result)
 	{
 		if (!allDigits(formfield.value))
 		{
 			alert('Inserire un numero nel campo "' + fieldlabel +'"');
			formfield.focus();		
			result = false;
		}
	} 
	return result; //Ok controllato
}


function validNum2(formfield,fieldlabel,required)
{
	var result = true;
	//alert(formfield.value+"-"+fieldlabel+"-"+required);
	if (required && !validRequired(formfield,fieldlabel))
		result = false;
 	if (result)
 	{
 		if (!allDigitstel(formfield.value))
 		{
 			alert('Inserire un numero telefonico (senza spazi) nel campo "' + fieldlabel +'"');
			formfield.focus();		
			result = false;
		}
	} 
	return result; //Ok controllato
}


function validInt(formfield,fieldlabel,required)
{
	var result = true;
	if (required && !validRequired(formfield,fieldlabel))
		result = false;
 	if (result)
 	{
 		var num = parseInt(formfield.value,10);
 		if (isNaN(num))
 		{
 			alert('Inserire un numero nel campo "' + fieldlabel +'"');
			formfield.focus();		
			result = false;
		}
	} 
	return result;
}


function validPrivacy(formfield,fieldlabel,required)
{
	//alert(formfield.value+"-"+fieldlabel+"-"+required);
	var result = true;
	if (required && !validRequired(formfield,fieldlabel))
		result = false;
 	if (result)
 	{
 		if (!allPositivi(formfield.value))
 		{
 			alert('Per accettare un ordine è necessario autorizzare il trattamento dei dati personali');
			formfield.focus();		
			result = false;
		}
	} 
	return result;//OK controllato
}

function validCap(formfield,fieldlabel,required)
{
	var result = true;
	if (required && !validRequired(formfield,fieldlabel))
		result = false;
 	if (result)
 	{
 		var num = parseInt(formfield.value,10);
		if (formfield.value.length != 5 || isNaN(num) || !allDigits(formfield.value))
		{
 			alert('Inserire un numero di 5 cifre nel campo "' + fieldlabel +'"');
			formfield.focus();		
			result = false;
		}			
	} 
	return result;//OK controllato
}


function validDate(formfield,fieldlabel,required)
{
	var result = true;
	if (required && !validRequired(formfield,fieldlabel))
		result = false;
 	if (result)
 	{
 		var elems = formfield.value.split("/");
 		result = (elems.length == 3); // should be three components
 		if (result)
 		{
 			var day = parseInt(elems[0],10);
  			var month = parseInt(elems[1],10);
 			var year = parseInt(elems[2],10);
			result = allDigits(elems[0]) && (day > 0) && (day < 32) &&
					 allDigits(elems[1]) && (month > 0) && (month < 13) &&
					 allDigits(elems[2]) && ((elems[2].length == 2) || (elems[2].length == 4));
 		}
  		if (!result)
 		{
 			alert('Inserire una data nel formato GG/MM/AAAA nel campo "' + fieldlabel +'".');
			formfield.focus();		
		}
	} 
	return result;
}


/*
isEmailAddr(email) controlla il formato indirizzo email
inValidCharSet(str,charset) controlla tipologia caratteri usati nel campo

allDigits(str) stringa dei numeri
allDigitstel(str) stringa dei numeri telefonici
allChars(str) stringa degli alfabetici o altri caratteri per scrivere nomi (ma sono esclusi nomi stranieri)
allFulls(str) stringa che non permette spazi vuoti
*/


function isEmailAddr(email)  //controlla il formato indirizzo email
{
  var result = false;
  var theStr = new String(email);
  var index = theStr.indexOf("@");
  if (index > 0 )
  {
    var pindex = theStr.indexOf(".",index);
    if ((pindex > index+1) && (theStr.length > pindex+1))
	result = true;
  }
  //alert(result); //Ok controllato
  return result;
}


function inValidCharSet(str,charset) //controlla tipologia caratteri usati nel campo
{
	var result = true;
	// Note: doesn't use regular expressions to avoid early Mac browser bugs	
	for (var i=0;i<str.length;i++)
		if (charset.indexOf(str.substr(i,1))<0)
		{
			result = false;
			break;
		}
	return result;
}

function allPositivi(str) //stringa dei numeri
{
	return inValidCharSet(str,"si");
}


function allDigits(str) //stringa dei numeri
{
	return inValidCharSet(str,"0123456789");
}


function allDigitstel(str) //stringa dei numeri telefonici
{
	return inValidCharSet(str,"0123456789-./#\\");
}


function allChars(str) //stringa degli alfabetici o altri caratteri per scrivere nomi (ma sono esclusi nomi stranieri)
{
	return inValidCharSet(str,"qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNMèéòàù \'&");
}


function allFulls(str) //stringa che non permette spazi vuoti
{
	return inValidCharSet(str,"qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNMèéòàù0123456789-_@.");
}



//funzioni dei controlli campi (una per ogni modulo presente nel sito)

function validateForm(theForm)
{
	// Customize these calls for your form

	// Start ------->
	if (!validRequired2(theForm.nome,"nome")){
		//alert("nome"); //Ok controllato
		return false;
	}
	if (!validRequired2(theForm.cognome,"cognome")){
		//alert("cognome"); //Ok controllato
		return false;
	}
	if (!validRequired(theForm.indirizzo,"indirizzo")){
		//alert("indirizzo"); //Ok controllato
		return false;
	}
	if (!validCap(theForm.cap,"cap",true)){
		//alert("cap"); //Ok controllato
		return false;
	}
	if (!validRequired(theForm.citta,"città")){
		//alert("città"); //Ok controllato
		return false;
	}
	if (!validNum2(theForm.tel,"telefono",false)){
		//alert("telefono"); //Ok controllato
		return false;
	}
	if (!validNum2(theForm.fax,"fax",false)){
		//alert("fax"); //Ok controllato
		return false;
	}
	if (!validEmail(theForm.email,"e-mail",true)){
		//alert("e-mail");//Ok controllato
		return false;
	}
	if (!validNum(theForm.dossier2004,"Dossier Statistico Immigrazione 2004",false)){
		//alert("Dossier");//Ok controllato
		return false;
	}
	if (!validNum(theForm.europaest,"Europa. Allargamento ad Est e immigrazione",false)){
		alert("Europa");//Ok controllato
		return false;
	}
	if (theForm.privacy[0].checked==true){
		if (!validPrivacy(theForm.privacy[0],"trattamento dati",true)){
			//Ok controllato
			return false;
		}
	}
	else if (theForm.privacy[1].checked==true) {
		if (!validPrivacy(theForm.privacy[1],"trattamento dati",true)){
			//Ok controllato
			return false;
		}
	}
	/*	if (!validPrivacy(theForm.privacy,"trattamento dati",true)){
		alert("trattamento");
		return false;
	}*/
	// <--------- End
	//alert("tutto ok"); funge alla grande (credo)
	return true;
}


function validateForm2(theForm)
{
	// Customize these calls for your form

	// Start ------->
	if (!validRequired2(theForm.nome,"nome"))
		return false;

	if (!validRequired2(theForm.cognome,"cognome"))
		return false;

	if (!validRequired(theForm.indirizzo,"indirizzo"))
		return false;

	if (!validCap(theForm.cap,"cap",true))
		return false;

	if (!validRequired(theForm.citta,"città"))
		return false;

	if (!validNum2(theForm.tel,"telefono",true))
		return false;

	if (!validNum2(theForm.cell,"cellulare",false))
		return false;

	if (!validNum2(theForm.fax,"fax",false))
		return false;

	if (!validEmail(theForm.email,"e-mail",true))
		return false;
		
	if (!validRequired(theForm.tabelle,"richiesta tabelle"))
		return false;
		
	if (!validRequired(theForm.motivazioni,"motivazioni richiesta"))
		return false;
	// <--------- End
	return true;
}