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)
  4. Dni (dni)
  5. Fecha (fecha)

  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{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"
				}
				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;
				
			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"
				}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"
					  }
					}
				
					//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;				
		}//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