function checkForm_ESP(){
/* 
  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_ESP.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{7})([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 numero = dato.substr(1,dato.length-1);
				} else {
					descError += "El campo '" + nombreCampo + "' ha de contener un DNI correcto.\n";
					break;
				}
				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;
				}				
				break;
				
			case 'fecha':
				/*Validamos una fecha*/
				var strValue = valorCampo;
				var objRegExp = /^([123]0|[012][1-9]|31)\/(0[1-9]|1[012])\/(19[0-9]{2}|2[0-9]{3})$/;
				//check to see if in correct format
				if(!objRegExp.test(strValue)) {
					descError += "El campo '" + nombreCampo + "' tiene un formato de fecha incorrecto.\n";
					break;
				}else{
					var strSeparator = strValue.substring(2,3);
					var arrayDate = strValue.split(strSeparator); 
					//create a lookup for months not equal to Feb.
					var arrayLookup = {'01':31, '03':31, '04':30, '05':31, '06':30, '07':31, '08':31, '09':30, '10':31, '11':30, '12':31};
					var intDay = parseInt(arrayDate[1],10); 
					
					//check if month value and day value agree
					if(arrayLookup[arrayDate[0]] != null) {
					  if(intDay <= arrayLookup[arrayDate[0]] && intDay != 0) {
						break; //found in lookup table, good date
					  } else {
						descError += "El campo '" + nombreCampo + "' tiene una fecha incorrecta.\n";
						break;
					  }
					}
				
					//check for February (bugfix 20050322)
					//bugfix  for parseInt kevin
					//bugfix  biss year  O.Jp Voutat
					var intMonth = parseInt(arrayDate[0],10);
					if (intMonth == 2) { 
					   var intYear = parseInt(arrayDate[2]);
					   if (intDay > 0 && intDay < 29) {
						   break;
					   } else if (intDay == 29) {
						 if ((intYear % 4 == 0) && (intYear % 100 != 0) || 
							 (intYear % 400 == 0)) {
							  // year div by 4 and ((not div by 100) or div by 400) ->ok
							 break; }
					   } else {
							descError += "El campo '" + nombreCampo + "' tiene una fecha incorrecta.\n";
							break;
					   }
					}
				}
				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);
		return false;
	}else{
		return true;
	}

}//end_checkForm

function checkForm_ENG(){
/* 
  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 = checkForm_ENG.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;
				
			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{7})([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 numero = dato.substr(1,dato.length-1);
				} else {
					descError += "'" + nombreCampo + "' must contain a correct Personal Identification Number.\n"
				}
				var let = dato.substr(dato.length-1,1);
				numero = numero % 23;
				letra=letra.substring(numero,numero+1);
				if (letra!=let) {
					descError += "'" + nombreCampo + "' has a wrong Identification Number.\n"
				}				
				break;
				
			case 'fecha':
				/*Validamos una fecha*/
				var strValue = valorCampo;
				var objRegExp = /^([123]0|[012][1-9]|31)\/(0[1-9]|1[012])\/(19[0-9]{2}|2[0-9]{3})$/;
				//check to see if in correct format
				if(!objRegExp.test(strValue)) {
					descError += "'" + nombreCampo + "' has a wrong date format.\n"
				}else{
					var strSeparator = strValue.substring(2,3);
					var arrayDate = strValue.split(strSeparator); 
					//create a lookup for months not equal to Feb.
					var arrayLookup = {'01':31, '03':31, '04':30, '05':31, '06':30, '07':31, '08':31, '09':30, '10':31, '11':30, '12':31};
					var intDay = parseInt(arrayDate[1],10); 
					
					//check if month value and day value agree
					if(arrayLookup[arrayDate[0]] != null) {
					  if(intDay <= arrayLookup[arrayDate[0]] && intDay != 0) {
						break; //found in lookup table, good date
					  } else {
						descError += "'" + nombreCampo + "' has a wrong date.\n"
					  }
					}
				
					//check for February (bugfix 20050322)
					//bugfix  for parseInt kevin
					//bugfix  biss year  O.Jp Voutat
					var intMonth = parseInt(arrayDate[0],10);
					if (intMonth == 2) { 
					   var intYear = parseInt(arrayDate[2]);
					   if (intDay > 0 && intDay < 29) {
						   break;
					   } else if (intDay == 29) {
						 if ((intYear % 4 == 0) && (intYear % 100 != 0) || 
							 (intYear % 400 == 0)) {
							  // year div by 4 and ((not div by 100) or div by 400) ->ok
							 break; }
					   } else {
							descError += "'" + nombreCampo + "' has a wrong date.\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);
		return false;
	}else{
		return true;
	}

}//end_checkForm

