function validateForm(frm, bolAlert) {
var elem = frm.elements;
// Loop all elements
for (var i = 0; i < elem.length; ++i) 
	{
    // If element is required see if it's filled in
    // Check for special condition
	//alert(elem[i].name);
    if (elem[i].name.indexOf("_") > 1) 
		{
    		// Text
      		if ((elem[i].type=="text")||(elem[i].type=="password"))
				{
        			if (elem[i].value==""&&elem[i].style.display!="none") 
						{
          					elem[i].className = "text_err";
          					if(bolAlert) alert("Compilare i campi obbligatori");
          					elem[i].focus();
          					return false;
        				} 
					else 
						{
          					elem[i].className = "text";
						}
      			}
      else if (elem[i].type=="radio") 
	  			{
      				// Radio
        			var radiogroup = elem[elem[i].name];
        			var itemchecked = false;
        			for(var j = 0 ; j < radiogroup.length ; ++j) 
						{
          					if(radiogroup[j].checked) 
								{
            						itemchecked = true;
            						break;
          						}
        				}
        			if(!itemchecked) 
						{ 
          					if(bolAlert) alert("You must check one option for "+elem[i].name);
          					if(elem[i].focus) elem[i].focus();
          					return false;
        				}
      			}
      	else if (elem[i].type=="checkbox") 
				{
      				// Checkbox
        			var itemchecked = false;
        			var elems = document.getElementsByTagName("input");
        			for(var j = 0; j < elems.length; ++j) 
						{
        					if(elems[j].type=="checkbox"&&elems[j].id==elem[i].id) 
								{
        							if(elems[j].checked) 
										{
        									itemchecked = true;
        									break;
        								}
        						}
        				}
        			if(!itemchecked) 
						{ 
          			if(bolAlert) alert("You must check atleast one option for "+elem[i].name);
          			if(elem[i].focus) elem[i].focus();
          			return false;
        				}
      			}
      else if (elem[i].type=="textarea") 
	  			{
      				// Textarea
        			if (elem[i].value=="") 
						{
          					elem[i].className = "textarea_err";
          					if(bolAlert) alert("You must enter "+elem[i].name);
          					elem[i].focus();
          					return false;
        				}
					else 
						{
          					elem[i].className = "textarea";
        				}
      			}
      else if (elem[i].type=="select-one") 
	  			{
      				// Select-one
        			if (elem[i].selectedIndex==0) 
						{
          					elem[i].className = "select_err";
          					if(bolAlert) alert("You must choose "+elem[i].name);
          					elem[i].focus();
          					return false;
        				} 
					else 
						{
        					elem[i].className = "select";
  						}
      			}
      else if (elem[i].type=="select-multiple") 
	  			{
      				// Select-multiple
      				var optionselected = false;
      				for(var j=0;j<elem[i].options.length; ++j) 
						{
      						if (elem[i].options[j].selected) 
								{
      								optionselected = true;
      								break;
      							}
      					}
      				if (!optionselected) 
						{
          					elem[i].className = "select_err";
          					if(bolAlert) alert("You must select at least one option for "+elem[i].name);
          					elem[i].focus();
          					return false;
        				} 
					else 
						{
        					elem[i].className = "select";
        				}
      			}
    	}		
	if(elem[i].name.indexOf("§") >1)
		{
			var ammessi = "0123456789.-";
			var c;
			var a=0;
			var check =1;
			var ln= elem[i].value.length-0;
			for(var j=0;j<ln; j++) 
				{
   					c = elem[i].value.charAt(j);
					if(ammessi.indexOf(c)==-1)
						{
							check=0;
			     		}
				}
			if (check==0)
				{
					alert("Inserire valori numerici, o numeri decimali separati da . ");
					elem[i].className = "text_err";
					elem[i].focus();
          			return false;
				}
			else
				{
					elem[i].className = "text";	
				}	

		 } 
		 
		if(elem[i].name.indexOf("privacy") > -1)
		{
		if (elem[i].type=="checkbox")
		         {
						 if (elem[i].checked != true)
						        {
										if(bolAlert) alert("Fornire il consenso al trattammento dei dati personali per proseguire");
          			    if(elem[i].focus) elem[i].focus();
										elem[i].className = "text_err";
										 return false;
						        }
		         } 
		}
		 
		 
		 
	if(elem[i].name.indexOf("EMAIL") > -1)
		{
				if(elem[i].value!="")
				{
			var testArr=elem[i].value.split("@");
			//testArr[0]quello che sta prima della chiocciola
			//testArr[1] quello che sta dopo la chiocciola
			if(testArr.length<=1||testArr.length>2)
    			{
				alert("Inserire email valida");
				elem[i].className = "text_err";
				elem[i].focus();
    			return false;
				}
	 		else 
   				{
					if(caratteriProibitiMail(testArr[0],elem[i])&&caratteriInizialiMail(testArr[0])&&caratteriProibitiMail(testArr[1])) 
						{   //primo if
							//controllo che nessuno dei due campi sia vuoto
							if(!stringaVuotaMail(testArr[testArr.length-1])&&!stringaVuotaMail(testArr[0])) 
				 				{   //secondo if
				 					//eseguo lo split sulla stringa dopo la chiocciola usando come separatore il punto
				 					var testArr2=testArr[testArr.length-1].split(".");
				 					if(testArr2.length>=2) 
					 					{   // terzo iff
											var toggle=1;
					 						var lng= testArr2.length-0;
					 						for(var ind=0; ind<lng; ind++) 
												{			
													var pippo=stringaVuotaMail(testArr2[ind]);
													var pluto=caratteriInizialiMail(testArr2[ind]);
													if(stringaVuotaMail(testArr2[ind])||!caratteriInizialiMail(testArr2[ind]))
														{
															toggle=0;
															break;
														}
												}
					  						if(toggle&&controllaDominioMail(testArr2[testArr2.length-1]))								   
						    					{
													elem[i].className = "text";
												}
					  						else
												{ 
													alert("Inserire email valida");
						    						elem[i].className = "text_err";
													elem[i].focus();
													return false; 
												}
					  					} // fine terzo if
					  				else
					  					{ // terzo else
					  						alert("Inserire email valida");
					  						elem[i].className = "text_err";
					  						elem[i].focus();
					  						return false;     
					  					}
			     				}// fine secondo if
							else 
								{ // secondo else
									alert("Inserire email valida");
									elem[i].className = "text_err";
									elem[i].focus();
									return false;
								}
   						}// fine primo if
					else 
						{ // primo else
							alert("Inserire email valida primo if");
							elem[i].className = "text_err";
							elem[i].focus();
							return false;
						}
	  			}
					}
		}
	if(elem[i].name.indexOf("DATA") >-1)
		{
		if(elem[i].value!="")
				{
					var ammessi = "0123456789/";
					var c;
					var a=0;
					var check =1;
					var ln= elem[i].value.length-0;
					for(var j=0;j<ln; j++) 
						{
							c = elem[i].value.charAt(j);
							if(ammessi.indexOf(c)==-1)
								{
									check=0;
			     				}
						}
					if (check==0)
						{
							alert("Inserire valori numerici separati da / ");
							elem[i].className = "text_err";
							elem[i].focus();
          					return false;
						}
					else
						{
		       				var dataArr=elem[i].value.split("/");
							if(dataArr.length!=3)
    							{
									alert("Inserire valori numerici separati da / ");
									elem[i].className = "text_err";
									elem[i].focus();
									return false;
								}
							if(dataArr[1]>12)
								{
					        		alert("Numero mesi errato");
									elem[i].className = "text_err";
									elem[i].focus();
									return false;
								}
							if (dataArr[1]==01 || dataArr[1]==03 || dataArr[1]==05 || dataArr[1]==07 || dataArr[1]==08 || dataArr[1]==10 || dataArr[1]==12) 
								{
									if(dataArr[0]>31)
										{
							    			alert("Numero giorni errato");
											elem[i].className = "text_err";
											elem[i].focus();
											return false;								
										}
			
								}
							else if (dataArr[1]==04 || dataArr[1]==06 || dataArr[1]==09 || dataArr[1]==11)
								{
									if(dataArr[0]>30)
										{
											alert("Numero giorni errato");
											elem[i].className = "text_err";
											elem[i].focus();

											return false;	
										}
								}
							else if (dataArr[1]==02)
								{
						 			if((dataArr[2]%4==0)&&(dataArr[2]%400!=0))
										{
											if(dataArr[0]>29)
												{
													alert("Numero giorni errato");
													elem[i].className = "text_err";
													elem[i].focus();
													return false;	
												}
										}
						 			else 
										{
											if(dataArr[0]>28)
												{
													alert("Numero giorni errato");	
													elem[i].className = "text_err";
													elem[i].focus();
													return false;	
												}
										}		
		    					}
		
		 				}
				}		
		}
  }
  return true;
}

function gotFocus(elem) {
	if (elem.className.indexOf("_err") < 0) {
		if (elem.type=="text") {
			elem.className = "text_focus";
		} else if (elem.type=="textarea") {
			elem.className = "textarea_focus";
		} else if (elem.type=="select-one") {
			elem.className = "select_focus";
		} else if (elem.type=="select-multiple") {
			elem.className = "select_focus";
		}
	}
}

function lostFocus(elem) {
	if (elem.className.indexOf("_err") < 0) {
		if (elem.type=="text") {
			elem.className = "text";
		} else if (elem.type=="textarea") {
			elem.className = "textarea";
		} else if (elem.type=="select-one") {
			elem.className = "select";
		} else if (elem.type=="select-multiple") {
			elem.className = "select";
		}
	}
}

function elemCond(elem, val, id, req) {
	var justDoIt = false;
	
	if (elem.type=="select-one") {
		if (elem[elem.selectedIndex].value==val) justDoIt = true;
	}
	else if (elem.type=="select-multiple") {
		for(var j=0;j<elem.options.length; ++j) {
      		if (elem.options[j].selected) {
      			if (elem.options[j].value==val) justDoIt = true;
      		}
      	}
	}
	else if(elem.type=="radio"||elem.type=="text"||elem.type=="textarea"||elem.type=="checkbox") {
		if (elem.value==val) justDoIt = true;
	}
	
	if (justDoIt) {
		var frm = document.forms;
		for (var i=0;i<frm.length; i++) {
			for (var j=0;j<frm[i].length; j++) {
				var ele = frm[i].elements[j];
				if (ele.id==id) {
					if (req) { ele.name = id+'*'; } else { ele.name = id; }
				}
			}
		}
	}
}







function stringaVuotaMail(strin)
 {
		var testArr=strin.split("");
		if(testArr.length==0)
			return true;
		var toggle=0;
		for(var i=0; i<testArr.length; i++) {
			if(testArr[i]==" ") {
				toggle=1;
				break;
			}
		}
		if(toggle)
			return true;
		return false;
	}

function caratteriProibitiMail(stringa) 
{
		var invalidChars=new Array("~","!","@","#","$","%","^","&","*","(",")","+","=","[","]",":",";",",","\"","'","|","{","}","\\","/","<",">","?");
		//faccio lo split della stringa contenuta nel parametro passato email senza inserire un separatore
		var testArr=stringa.split("");
		//controllo uno a uno i caratteri affinche non ce ne sia uno uguale a quelli sopra elencati.
		for(var i=0; i<testArr.length; i++) {
			for(var j=0; j<invalidChars.length; j++) {
				if(testArr[i]==invalidChars[j]) {
					return false;
				}
			}
		}
		return true;
	}
	
// riceve in ingresso quello che sta prima della chiocciola nella email
function caratteriInizialiMail(stringa) 
{
		var invalidChars=new Array("-","_",".");
		//faccio lo split della stringa contenuta nel parametro passato email senza inserire un separatore
		var testArr=stringa.split("");
		which=0;
		for(var i=0; i<2; i++) {
			for(var j=0; j<invalidChars.length; j++) {
				if(testArr[which]==invalidChars[j]) {
					return false;
				}
			}
			which=testArr.length-1;
		}
		return true;
}

function controllaDominioMail(dom) 
{
		var invalidChars=new Array("-","_",".");
		var testArr=dom.split("");
		//controllo la lunghezza del dominio
		if(testArr.length<2||testArr.length>4) {
			return false;
		}
		for(var i=0; i<testArr.length; i++) {
			for(var j=0; j<invalidChars.length; j++) {
				if(testArr[i]==invalidChars[j]) {
					return false;
				}
			}
		}
		return true;
}

