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';
			FiText3= ' no pot ser 0';
			break;		  
		case "cast":
			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
				camps[x].value=TrimLeft(camps[x].value);
				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 (camps[x].value!=''){
							if (isNaN(camps[x].value)) {
								error = error + IniciText + camps[x].id.substr(2) + FiText2 +'\n';
							}		
							/*else{
								if (camps[x].value==0) {error = error + IniciText + camps[x].id.substr(2) + FiText3 +'\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;
			}	 
	 }	 
	 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,10);
    	  Mes = parseInt(Mes,10);
	      Anyo = parseInt(Anyo,10);

	   	  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 ObligarDescripcioRegAnterior(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 té un format correcte (09R00000)';
			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'; 
				}
				else
				{
					if (theField.value.substring(0,3).toUpperCase()!='09R' || isNaN(theField.value.substring(3,7)) || theField.value.length!=8) {
						theField.focus();
						missatge = 'obligatori';
					}
				}
			}		
		}
	}
	if (missatge!="") {alert(IniciText + ' ' +  theField.id.substr(2) + ' ' + FiText)}	
}

function ComparaDates(data2,data1)
{
	var IniciText,FiText;
	var missatge;
	var year,mes,dia,inici_barra,fi_barra;
	var dataInici, dataFi;
	
	//DATA INICI
	inici_barra=data1.value.indexOf('/',0);
	fi_barra=data1.value.indexOf('/',inici_barra+1);
	dia = data1.value.substring(0,inici_barra);	
	mes = data1.value.substring(inici_barra+1,fi_barra)-1;	
	year = data1.value.substring(fi_barra+1);	
	dataInici = new Date(year,mes,dia);

	//DATA FI
	inici_barra=data2.value.indexOf('/',0);
	fi_barra=data2.value.indexOf('/',inici_barra+1);
	dia = data2.value.substring(0,inici_barra);	
	mes = data2.value.substring(inici_barra+1,fi_barra)-1;	
	year = data2.value.substring(fi_barra+1);	
	dataFi = new Date(year,mes,dia);
	
	missatge='';
	switch (document.forms[0].elements['idioma'].value) {
		case "cat":
			IniciText='El camp';
			FiText='no pot ser inferior a';
			FiText2='te un format incorrecte';
			break;		  
		case "cast":
			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)
	}	
}
//toLocaleString()

function ComparaData_Avui(data)
{
	var IniciText,FiText,missatge;
	var year,mes,dia,inici_barra,fi_barra;
	var dataInici,avui;
	
	inici_barra=data.value.indexOf('/',0);
	fi_barra=data.value.indexOf('/',inici_barra+1);
	dia = data.value.substring(0,inici_barra);	
	mes = data.value.substring(inici_barra+1,fi_barra);//-1;	
	year = data.value.substring(fi_barra+1);	
	
	dataInici = new Date(year,mes,dia);
	avui = new Date();

	missatge='';
	switch (document.forms[0].elements['idioma'].value) {
		case "cat":
			IniciText='El camp';
			FiText='no pot ser inferior a la data d\'avui';
			FiText2='te un format incorrecte';
			FiText3='no pot ser igual a la data d\'avui';
			break;		  
		case "cast":
			break;		  
		case "eng":
			break;		  
	}
	
	if (EsData(data.value))
	{
		if (dataInici.getTime()<avui.getTime()){ 
			missatge=IniciText + ' ' +  data.id.substr(2) + ' ' + FiText;
		}
		else{
			if (dataInici.getTime()==avui.getTime()){ 
				missatge=IniciText + ' ' +  data.id.substr(2) + ' ' + FiText3;
			}		
		}
		
	}
	else
	{
		missatge=IniciText + ' ' +  data.id.substr(2) + ' ' + FiText2
	}
	if (missatge!="") 
	{
		data.focus;
		alert(missatge)
	}
}

function DateDemo()
{
  var d, s = "Today's date is: ";
  d = new Date();
  s += (d.getMonth() + 1) + "/";
  s += d.getDate() + "/";
  s += d.getYear();
  return(s);
}

function TrimLeft(str) {
	var resultStr = "";
	var i = len = 0;

	if (str+"" == "undefined" || str == null)		// Return immediately if an invalid value was passed in
		return null;
	str += ""; 	// Make sure the argument is a string
	if (str.length == 0) 
		resultStr = "";
	else {	
		len = str.length;
  		while ((i <= len) && (str.charAt(i) == " "))
			i++;
	  		resultStr = str.substring(i, len);
  		}
  	return resultStr;
}
