function valida() {
	missatges = new Array (); 
	missatges[0] = new Array ('El camp ',
		' és obligatori', 
		' ha de ser numèric', 
		' no és un CP vàlid', 
		' no és un Email vàlid',
		' no és un DNI vàlid'); 
	missatges[1] = new Array ('El campo ',
		' es obligatorio', 
		' tiene que ser numérico', 
		' no es un CP válido', 
		' no es un Email válido',
		' no es un DNI válido');
	missatges[2] = new Array ('The field ',
		' is mandatory', 
		' must be a number', 
		' is not valid', 
		' is not a valid Email',
		' is not a valid DNI');
	missatges[3] = new Array ('Le champ ',
		' est obligatoire',
		' doit être un nombre',
		' n\'est pas valide',
		' n\'est pas un e-mail valide',
		' n\'est pas un DNI valide');
	
	extra = new Array('Missatge:','Mensaje:','Messaje:','Messaje:');
	 	
	var idioma = document.contacte.idioma.value;
	var idiomanum;
	if(idioma=="castellano")
		idiomanum = 1;
	else if(idioma=="english")
		idiomanum = 2;
	else if(idioma=="français")
		idiomanum = 3;
	else
		idiomanum = 0;
	var obligatoris = document.contacte.obligatoris.value;	
	var array_obligatoris=obligatoris.split(",");
	var labels = document.getElementsByTagName('label');
	var errors = "";
	var message = "";
	var result;
        for(var x=0;x < array_obligatoris.length;x++){
		result = true;
		var obligatori = array_obligatoris[x].split(":");	
		
		camp = eval("document.contacte." + obligatori[0]);
		
		if(obligatori[1]=="num"){
			if(!validaNumeric(camp)){
				errors+=obligatori[0]+",";
				for(var i=0;i<labels.length;i++)
				{
					if(labels[i].htmlFor==camp.id)
					{
						message+=missatges[idiomanum][0]+labels[i].firstChild.nodeValue+missatges[idiomanum][2]+"<br>";
					}
				}
				
			}
		}
		else if(obligatori[1]=="cp"){
			if(!validaCP(camp)){
				errors+=obligatori[0]+",";
				for(var i=0;i<labels.length;i++)
				{
					if(labels[i].htmlFor==camp.id)
					{
						message+=missatges[idiomanum][0]+labels[i].firstChild.nodeValue+missatges[idiomanum][3]+"<br>";
					}
				}
			}
		}
		else if(obligatori[1]=="email"){
			if(!validaEmail(camp)){
				errors+=obligatori[0]+",";
				for(var i=0;i<labels.length;i++)
				{
					if(labels[i].htmlFor==camp.id)
					{
						message+=missatges[idiomanum][0]+labels[i].firstChild.nodeValue+missatges[idiomanum][4]+"<br>";
					}
				}
			}
		}
		else if(obligatori[1]=="dni"){
			if(!validaDNI(camp)){
				errors+=obligatori[0]+",";
				for(var i=0;i<labels.length;i++)
				{
					if(labels[i].htmlFor==camp.id)
					{
						message+=missatges[idiomanum][0]+labels[i].firstChild.nodeValue+missatges[idiomanum][5]+"<br>";
					}
				}
			}
		}
		else{
			if(!validaObligatori(camp)){
				errors+=obligatori[0]+",";
				for(var i=0;i<labels.length;i++)
				{
					if(labels[i].htmlFor==camp.id)
					{
						if(camp.id == "comentaris")
							message+= missatges[idiomanum][0]+ extra[idiomanum] + missatges[idiomanum][1]+"<br>"; 
						else
							message+=missatges[idiomanum][0]+labels[i].firstChild.nodeValue+missatges[idiomanum][1]+"<br>";
					}
				}
			}		
		}
	}
	if(errors==""){
		return true;
	}
	else{
		mostraErrors(message,errors);
		return false;
	}
	
}

function validaObligatori(camp){
	if(camp.value.length<2)
		return false;
	else
		return true;
}

function validaNumeric(camp){
	numeric = new RegExp('^[0-9]+$');
        if(!numeric.test(camp.value))
                return false;
        else
		return true;
}

function validaCP(camp){
	numeric = new RegExp('^[0-9]+$');
        if(!numeric.test(camp.value) || camp.value.length!=5)
                return false;
        else
		return true;
}

function validaEmail(camp){
	if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/.test(camp.value))
                return true;
        else
		return false;
}

function validaDNI(camp){
	numero = camp.value.substr(0,camp.value.length-1);
	lletra = camp.value.substr(camp.value.length-1,1);
	numero = numero % 23;
	lletres='TRWAGMYFPDXBNJZSQVHLCKET';
	lletres=lletres.substring(numero,numero+1);
	if (lletra!=lletres)
		return false;
	else
		return true;
}

Array.prototype.find = function(searchStr) {
  var returnArray = false;
  for (i=0; i<this.length; i++) {
    if (typeof(searchStr) == 'function') {
      if (searchStr.test(this[i])) {
        if (!returnArray) { returnArray = [] }
        returnArray.push(i);
      }
    } else {
      if (this[i]===searchStr) {
        if (!returnArray) { returnArray = [] }
        returnArray.push(i);
      }
    }
  }
  return returnArray;
}


function mostraErrors(message,errors) {	
	document.getElementById("errors").innerHTML = message;
	var errors = errors.split(",");
	for(var x=0;x < errors.length-1;x++){
		error = eval("document.contacte."+errors[x]);
		clases = error.className.split(" ");
		var i=0;
		var newclass = "";
		while(i < clases.length){
			if(clases[i]!="error" && clases[i]!="ok"){
				newclass+=clases[i]+" ";
			}
			i++;
		}
		error.className=newclass+" "+"error";
	}
	var obligatoris = document.contacte.obligatoris.value;
	var array_obligatoris=obligatoris.split(",");
	for(var x=0;x < array_obligatoris.length;x++){
		var obligatori = array_obligatoris[x].split(":");
		if(!errors.find(obligatori[0])){
			ok = eval("document.contacte."+obligatori[0]);
			clases = ok.className.split(" ");
			var i=0;
			var newclass = "";
			while(i < clases.length){
				if(clases[i]!="ok" && clases[i]!="error"){
					newclass+=clases[i]+" ";
				}
				i++;
			}
				ok.className=newclass+" "+"ok";				
		}
	}
}

