function Validar(f,EsPrincipal)
{
 var camps,x,error;
 var IniciText,FiText,FiText2;
 var radio;
 var check;
 var x=0,i=0;
 var selected=false;
 error='';
 camps = f.elements; 

	switch (camps['idioma'].value) {
		case "cat":
			IniciText='El camp ';
			FiText=' no pot ser blanc';
			FiText2= ' té un format incorrecte';
			break;		  
		case "cast":
		IniciText='El campo ';
			FiText=' no puede ser blanco';
			FiText2= ' tiene un formato incorrecto';
			break;		  
		case "eng":
			break;		  
	}
  
	 for (x=0; x < camps.length; x++) { //Bucle per mirar tots els camps del formulari
	 //Tractar els tipus de camp per separat.
		switch (camps[x].type) {
			case "text":	//Tractar els imputs TEXT
		   		//Mirar si el camp es obligat o no. O->Obligatori
			    if (camps[x].id.substr(0,1) == 'O') { 
					if (camps[x].value=='') {error = error + IniciText + camps[x].id.substr(2) + FiText +'\n';}		
				}
				//Mirar si el camp té un format correcte.
				switch (camps[x].id.substr(1,1)){	
					case "N":
						if (isNaN(camps[x].value)) {error = error + IniciText + camps[x].id.substr(2) + FiText2 +'\n';}		
					break;		  
					case "D":
						if (!EsData(camps[x].value)) {error = error + IniciText + camps[x].id.substr(2) + FiText2 +'\n';}		
					break;
					case "E":
						if (!EsEmail(camps[x].value)) {error = error + IniciText + camps[x].id.substr(2) + FiText2 +'\n';}
					break;
				}
			  break;		  
			case "radio": //Tractar els imputs RADIO
				//Mirar si el camp es obligat o no. O->Obligatori
				if (camps[x].id.substr(0,1) == 'O') 
				{
					if (!GrupPle(camps[camps[x].name])) {error = error + IniciText + camps[x].id.substr(2) + FiText +'\n'; }
					x=x+camps[camps[x].name].length-1; //Salto tots els check que ja he llegit.*/						
				}
			  break;
			case "textarea": //Tractar els imputs TEXTAREA
				//Mirar si el camp es obligat o no. O->Obligatori
			    if (camps[x].id.substr(0,1) == 'O') { 
					if (camps[x].value=='') {error = error + IniciText + camps[x].id.substr(2) + FiText +'\n';}		
				}
			  break;
			case "checkbox": //Tractar els imputs CHECKBOX
				//Mirar si el camp es obligat o no. O->Obligatori
				if (camps[x].id.substr(0,1) == 'O') 
				{
					if (!GrupPle(camps[camps[x].name])) {error = error + IniciText + camps[x].id.substr(2) + FiText +'\n'; }
					x=x+camps[camps[x].name].length-1; //Salto tots els check que ja he llegit.*/						
				}
			  break;
			case "select-one": //Tractar els imputs CHECKBOX
				//Mirar si el camp es obligat o no. O->Obligatori
				if (camps[x].id.substr(0,1) == 'O') 
				{
					//Mirar que no sigui la primera opció
					if (camps[x].options[camps[x].options.selectedIndex].value=='') {error = error + IniciText + camps[x].id.substr(2) + FiText +'\n'; }
				}
			  break;
			}	 
	 }	 
	 if (error.length > 0){
		alert(error);
		return false;
	 }
	 else{
	 	if (EsPrincipal==true){f.submit();}
	 	return true;
	 } 
}

function GrupPle(grup){
	var selected;
	var i;
	i=0;
	selected=false
	while (!selected && (i <grup.length)) 
	{
		if (grup[i].checked){selected = true;}
		i++;
	}
	return selected;
}

function EsData(data){ //Funció per comprovar si una data té el format correcte
    var Dia, Mes, Anyo;
	var Dia_Mes_Mal = false;

	Dia  = data.substr(0,data.indexOf('/'));
	Mes  = data.substr(data.indexOf('/')+1,data.lastIndexOf('/')-data.indexOf('/')-1);
	Anyo = data.substr(data.lastIndexOf('/')+1); 

	if( Dia == "" && Mes == "" && Anyo == "" ) return true;
    else
	{
	      Dia = parseInt(Dia);
    	  Mes = parseInt(Mes);
	      Anyo = parseInt(Anyo);
		  
	
	   	  if( !isNaN(Dia) && !isNaN(Mes) && !isNaN(Anyo) &&  Dia >= 1 && Anyo >= 1900 && Mes <=12 && Mes >=1)  {
	        // Los meses de Enero, Marzo, Mayo, Julio, Agosto,  Octubre y Diciembre tienen 31 días 
			if(( Mes == 1 || Mes == 3 || Mes == 5 || Mes == 7 || Mes == 8 || Mes == 10 || Mes == 12)
			     && Dia > 31)   Dia_Mes_Mal = true;
			// Los meses de Mayo, Junio, Septiembre y Noviembre tienen 30 días 
			if((Mes == 4 || Mes == 6 || Mes == 9 || Mes == 11) && Dia > 30)   Dia_Mes_Mal = true;	
			// Febrero tiene 28 ó 29 días, dependiendo de si es bisiesto  o no. Un año es bisiesto si es múltiplo de 4 pero no de
			//   100 salvo que sea múltiplo de 400. Por ejemplo, 12 y 400  son bisiestos, pero 100 y 700 no. 
			if( Mes == 2 && 
				( Dia > 29 ||
				  ( Dia == 29 &&
					( 
					  (Anyo % 400 != 0)
					  && (
						 (Anyo % 4 != 0) || (Anyo % 100 == 0)
						 )
					)
				  )
				)
			   ) Dia_Mes_Mal = true;
			if(Dia_Mes_Mal)  
			{
			  return false;
			}
			else return true;
		}   /* Si la fecha está fuera del rango razonable... */
      	else
		{
        	return false;
        }
      }
}
		 
function EsEmail(mail) //Funció per comprovar si un correu electrònic té el format correcte
{
	var at_count=0, at_pos=0, dot_pos=0,dot_count=0;
	var temp=0,i=0,pos=0;
	var condition,dom,ok;	
	var domain="",error="";
	
	ok=true;
	at_pos=mail.indexOf("@");
	dot_pos=mail.indexOf(".");
	condition=true;
	if (mail.length>0)
	{
		for(var i=0;i<mail.length;i++)
		{
			//Comprovar que siguin lletres i no caràcters especials
			if((mail.charCodeAt(i)>0 && mail.charCodeAt(i)<45)||(mail.charCodeAt(i)>45 && mail.charCodeAt(i)<48)||(mail.charCodeAt(i)>57 && mail.charCodeAt(i)<65)||(mail.charCodeAt(i)>91 && mail.charCodeAt(i)<95)||(mail.charCodeAt(i)>95 && mail.charCodeAt(i)<97)||mail.charCodeAt(i)>122)
			{
				if(mail.charAt(i)=="@"||mail.charAt(i)==".")
				{
						if(mail.charAt(i)=="@"){at_count++}else{dot_count++} // conta el numero de cops que la @ i el . apareix en el email
						if(dot_count>=1)
						{
							dot_pos=i
							if((dot_pos>at_pos) && temp==0)
							{
								pos=dot_pos-at_pos
								temp++
							}								
						}
				}
				else
				{
					condition=false
					i=mail.length
				}
			}
		}
		if(condition==false)
		{
			ok=false
		}
		else
		{
			if(at_count==0)//L'email no conté @
			{
				ok=false
			}
			if(at_count>1)//L'email conté més d´una @
			{
				ok=false
			}
			else
			{
				if(pos<2)//Falta el domini entre la '@' i el '.'
				{
					ok=false
				}
				else
				{	
					count=dot_pos+1
					for(count;count<mail.length;count++)
					{
						domain=domain+mail.charAt(count)		
					}
					dom=new Array("au","com","net","org","edu","in","mil","gov","arpa","biz","aero","name","coop","info","pro","museum")
					error=true
					for(var k=0;k<dom.length;k++)
					{
						if(domain==dom[k])
						{
							k=dom.length
							error=false
						}
					}
					if((error==true && (domain.length>2)) || (domain.length<2)) //El nom del domini del seu email ha d'acabar amb uno domini conegut o amb una text de 2 lletres (per als noms de dominis de paisos) eg: es,com,edu,in etc.
					{
						ok=false
					}								
				}
			}
		}	
	}
	return ok;
}

function ActivarDescripcioRadio(radio,valorTrue,theField)
{
	if(radio.value==valorTrue)
	{
		theField.disabled=false;
		theField.focus();
	}
	else
	{
		theField.disabled=true;
		theField.value="";
	}		  
}
function ActivarDescripcioCheck(check,theField)
{
	if(check.checked)
	{
		theField.disabled=false;
		theField.focus();
	}
	else
	{
		theField.disabled=true;
		theField.value="";
	}		  
}

function ObligarDescripcio(radio,valorTrue,theField)
{
	var IniciText,FiText;
	var missatge;
	var i;
	i=0;
	missatge='';
	
	switch (document.forms[0].elements['idioma'].value) {
		case "cat":
			IniciText='El camp';
			FiText='no pot ser blanc';
			break;		  
		case "cast":
			break;		  
		case "eng":
			break;		  
	}
	for (i=0; i < radio.length;i++)
	{
		if (radio[i].checked)
		{
			if(radio[i].value==valorTrue)
			{
				if (theField.value=='') 
				{
					theField.focus();
					missatge = 'obligatori'; 
				}
			}		
		}
	}
	if (missatge!="") {alert(IniciText + ' ' +  theField.id.substr(2) + ' ' + FiText)}	
}
function ComparaDates(data2,data1)
{
	var IniciText,FiText;
	var missatge;
	var dataInici, dataFi;
	
	dataInici = new Date(data1.value);
	dataFi = new Date(data2.value);
	
	missatge='';
	switch (document.forms[0].elements['idioma'].value) {
		case "cat":
			IniciText='El camp';
			FiText='no pot ser superior a';
			FiText2='te un format incorrecte';
			break;		  
		case "cast":
			IniciText='El campo';
			FiText='no puede ser superior a';
			FiText2='tiene un formato incorrecto';
			break;		  
		case "eng":
			break;		  
	}
	//Mirar si totes dues son data
	if (EsData(data1.value))
	{
		if (EsData(data2.value)) 
		{
			if (dataFi.getTime()<dataInici.getTime()){ // (data2.value.getDate()<data1.value.getDate()){
				missatge=IniciText + ' ' +  data2.id.substr(2) + ' ' + FiText + ' ' +  data1.id.substr(2);
			}		
		}
		else
		{
			missatge=IniciText + ' ' +  data2.id.substr(2) + ' ' + FiText2
		}
	}
	else
	{
		missatge=IniciText + ' ' +  data1.id.substr(2) + ' ' + FiText2
	}
	if (missatge!="") 
	{
		//data2.focus;
		alert(missatge)
		return false;
	}	
	else
	{
		return true;
	}
}
