function checkForm(){
/* 
  La función 'checkForm' se encarga de evaluar los campos de los
  formularios según el tipo de comprovación pedida:
  1. Obligatorio (ob)
  2. Numérico (num)
  3. Email (email)

  La manera de pasar los parámetros (al invocar la función) 
  es en pares de valores del tipo: (tipoError,nombreCampo)
  y habrán tantos pares como campos queramos comprobar.

*/
	var args, numArgs, descError='Han ocurrido los siguientes errores:\n\n', tipoError, nombreCampo, valorCampo;

	//metemos en la variable 'args' los argumentos de la función
	args = checkForm.arguments;
	//y en 'numArgs' metemos el número de argumentos
	numArgs = args.length;	
	
	//Con el 'for' recorremos los pares de valores y tratamos los posibles errores
	for (i=0; i<numArgs; i+=2){
		tipoError = args[i];
		nombreCampo = args[i+1];
		/*
		  Obtenemos el valor del campo correspondiente gracias al nombre
		  pasado como parámetro y al método 'getElementById'
		*/
		valorCampo = document.getElementById(nombreCampo).value;
		
		switch(tipoError){

			case 'ob':
				if (valorCampo==''){
					descError += "- Es obligatorio rellenar el campo '" + nombreCampo + "'\n"
				}
				break;

			case 'num':
				valorCampo=parseFloat(valorCampo)
				
				if(isNaN(valorCampo)){
					descError += "- El campo '" + nombreCampo + "' debe contener un número.\n"
				}
				break;
			
			case 'email':
				/*
					Para mirar si un campo contiene un email, hacemos lo siguiente:
					1º Miramos que en el campo haya algo (valorCampo!='')
					2º Comprobamos que aparezca la @ y que además su posición no sea 
					   ni el primer, ni el último caracter.
				*/
				if( valorCampo!='' && (valorCampo.indexOf('@')==-1 || valorCampo.indexOf('@')==0 || valorCampo.indexOf('@')==valorCampo.length-1) ){
					descError += "- El campo '" + nombreCampo + "' debe contener una dirección de correo electrónico.\n"
				}
				break;

			case 'dni':
				/* validamos el DNI */
					var tipodoc;
					var dato = valorCampo;
					while (dato.indexOf("-") != -1) {
						guion = dato.indexOf("-");
						dato = dato.substr(0,guion) + dato.substr(guion+1);
					}
					dato = dato.toUpperCase();
					var regex1 = /^(\d{8})(([a-zA-Z]{1})$)/; //NIF
					var regex2 = /^((X|T|x|t){1})([-]?)(\d{8})([-]?)([a-zA-Z]{1})$/; //NIE
					var letra='TRWAGMYFPDXBNJZSQVHLCKET';
					if (regex1.test(dato)) { //si es nif
						//if (document.getElementById('tipodoc') != null) {document.getElementById('tipodoc').value = 1;}
						var numero = dato.substr(0,dato.length-1);
					} else if (regex2.test(dato)) { //si es nie
						//if (document.getElementById('tipodoc') != null) {document.getElementById('tipodoc').value = 2;}
						var letra_ini = dato.substr(0,1);
						var numero = dato.substr(1,dato.length-2);
						if (letra_ini == "X" || letra_ini == "T") { 
							numero = "0" + numero;
						} else if (letra_ini == "Y") {
							numero = "1" + numero;
						} else if (letra_ini == "Z") {
							numero = "2" + numero;
						}						
					} else {
						descError += "- El campo '" + nombreCampo + "' debe contener un DNI correcto.\n"	
					}
					var let = dato.substr(dato.length-1,1);
					numero = numero % 23;
					letra=letra.substring(numero,numero+1);
					if (letra!=let) {
						descError += "- El campo '" + nombreCampo + "' tiene un número identificativo incorrecto.\n"						
					}				
				break
		}//end_switch
		
	}//end_for
	
	/*
	  Si la cadena de descripción de errores contiene algo diferente
	  a lo que contenía al declararla, han ocurrido errores,
	  los mostramos y no enviamos el formulario.
	  Sólo lo enviamos si dicha cadena continua igual.
	*/
	if (descError!='Han ocurrido los siguientes errores:\n\n'){
		alert(descError);
	}else{
		document.formulario.submit();
	}

}//end_checkForm

function checkFormCat(){
/* 
  La función 'checkForm' se encarga de evaluar los campos de los
  formularios según el tipo de comprovación pedida:
  1. Obligatorio (ob)
  2. Numérico (num)
  3. Email (email)

  La manera de pasar los parámetros (al invocar la función) 
  es en pares de valores del tipo: (tipoError,nombreCampo)
  y habrán tantos pares como campos queramos comprobar.

*/
	var args, numArgs, descError='Han ocorregut els següents errors:\n\n', tipoError, nombreCampo, valorCampo;

	//metemos en la variable 'args' los argumentos de la función
	args = checkFormCat.arguments;

	//y en 'numArgs' metemos el número de argumentos
	numArgs = args.length;	
	
	//Con el 'for' recorremos los pares de valores y tratamos los posibles errores
	for (i=0; i<numArgs; i+=2){
		tipoError = args[i];
		nombreCampo = args[i+1];
		/*
		  Obtenemos el valor del campo correspondiente gracias al nombre
		  pasado como parámetro y al método 'getElementById'
		*/
		valorCampo = document.getElementById(nombreCampo).value;
		
		switch(tipoError){

			case 'ob':
				if (valorCampo==''){
					descError += "- Es obligatori emplenar el camp '" + nombreCampo + "'\n"
				}
				break;

			case 'num':
				valorCampo=parseFloat(valorCampo)
				
				if(isNaN(valorCampo)){
					descError += "- El camp '" + nombreCampo + "' ha de contindre un número.\n"
				}
				break;
			
			case 'email':
				/*
					Para mirar si un campo contiene un email, hacemos lo siguiente:
					1º Miramos que en el campo haya algo (valorCampo!='')
					2º Comprobamos que aparezca la @ y que además su posición no sea 
					   ni el primer, ni el último caracter.
				*/
				if( valorCampo!='' && (valorCampo.indexOf('@')==-1 || valorCampo.indexOf('@')==0 || valorCampo.indexOf('@')==valorCampo.length-1) ){
					descError += "- El camp '" + nombreCampo + "' ha de contindre una adreça de correu electrònic.\n"
				}
				break;

		}//end_switch
		
	}//end_for
	
	/*
	  Si la cadena de descripción de errores contiene algo diferente
	  a lo que contenía al declararla, han ocurrido errores,
	  los mostramos y no enviamos el formulario.
	  Sólo lo enviamos si dicha cadena continua igual.
	*/
	if (descError!='Han ocorregut els següents errors:\n\n'){
		alert(descError);
	}else{
		document.formulario.submit();
	}

}//end_checkForm

function checkFormEng(){
/* 
  La función 'checkForm' se encarga de evaluar los campos de los
  formularios según el tipo de comprovación pedida:
  1. Obligatorio (ob)
  2. Numérico (num)
  3. Email (email)

  La manera de pasar los parámetros (al invocar la función) 
  es en pares de valores del tipo: (tipoError,nombreCampo)
  y habrán tantos pares como campos queramos comprobar.

*/
	var args, numArgs, descError='The following error(s) occurred:\n\n', tipoError, nombreCampo, valorCampo;

	//metemos en la variable 'args' los argumentos de la función
	args = checkFormEng.arguments;

	//y en 'numArgs' metemos el número de argumentos
	numArgs = args.length;	
	
	//Con el 'for' recorremos los pares de valores y tratamos los posibles errores
	for (i=0; i<numArgs; i+=2){
		tipoError = args[i];
		nombreCampo = args[i+1];
		/*
		  Obtenemos el valor del campo correspondiente gracias al nombre
		  pasado como parámetro y al método 'getElementById'
		*/
		valorCampo = document.getElementById(nombreCampo).value;
		
		switch(tipoError){

			case 'ob':
				if (valorCampo==''){
					descError += "- '" + nombreCampo + "' is required.\n"
				}
				break;

			case 'num':
				valorCampo=parseFloat(valorCampo)
				
				if(isNaN(valorCampo)){
					descError += "- '" + nombreCampo + "' must contain a number.\n"
				}
				break;
			
			case 'email':
				/*
					Para mirar si un campo contiene un email, hacemos lo siguiente:
					1º Miramos que en el campo haya algo (valorCampo!='')
					2º Comprobamos que aparezca la @ y que además su posición no sea 
					   ni el primer, ni el último caracter.
				*/
				if( valorCampo!='' && (valorCampo.indexOf('@')==-1 || valorCampo.indexOf('@')==0 || valorCampo.indexOf('@')==valorCampo.length-1) ){
					descError += "- '" + nombreCampo + "' must contain an e-mail address.\n"
				}
				break;

		}//end_switch
		
	}//end_for
	
	/*
	  Si la cadena de descripción de errores contiene algo diferente
	  a lo que contenía al declararla, han ocurrido errores,
	  los mostramos y no enviamos el formulario.
	  Sólo lo enviamos si dicha cadena continua igual.
	*/
	if (descError!='The following error(s) occurred:\n\n'){
		alert(descError);
	}else{
		document.formulario.submit();
	}

}//end_checkForm
