/* Este javascript valida antes de enviar un formulario, comprobando campos obligatorios, y mails bien formados.

para funcionar, el formulario que se valide - compruebe tiene que tener las siguientes condiciones:

tiene que tener en el tag FORM un onsubmit="return window.validarForm(0);". Este evento valida el form y si todo es correcto devuelve TRUE,
y asi el formulario se procesa. Por el contrario, si algo no valida devuelve FALSE y el formulario no se procesa, mostrando un mensaje de error.

tiene que tener los siguientes campos ocultos:
camposObligatorios -> separados por punto y coma, tiene que tener como valor los nombres de los campos obligatorios del form
camposMail -> separados por punto y coma, tiene que tener como valor los campos que esperan una direccion de mail
checkboxesObligatorias -> las checkboxes que tienen que estar obligatoriamente "checked" para procesar el formulario
errorCamposObligatorios -> tiene que tener como valor el mensaje que se mostrara cuando la validacion falle por campos obligatorios vacios
errorCamposMail -> tiene que tener como valor el mensaje que se mostrara cuando la validacion falle por una direccion mail mal formada
errorCheckboxesObligatorias -> el mensaje de error que se mostrara si alguna chekcbox obligatoria no esta "checked"

*/

function enviar(indiceFormulario) {
    if(validarForm(indiceFormulario)) {
    	//si la comprobación es correcta
		//guardamos los datos como cookies
		formToCookies();//esta funcion esta definida en cookies.js
	
		//enviamos el formulario
    	window.document.forms[indiceFormulario].submit();
    }
}

function validarForm(indiceFormulario) {
     //primero seleccionamos el formulario que vamos a validar en el documento;
    var formulario = window.document.forms[indiceFormulario];
	var camposObligatoriosLlenos = true;
	var eMailsValidos = true;
   
   //ahora, comenzamos comprobando los CAMPOS OBLIGATORIOS (si los hay)
   if(formulario.camposObligatorios && formulario.camposObligatorios.value != "") {
   		//para ello, empezamos creando un array con todos los campos obligatorios que se han indicado en el form
   		//a traves de un campo oculto, llamado "camposObligatorios", cuyo valor seran los nombres de los campos obligatorios
		var camposObligatorios = new Array();
		camposObligatorios = formulario.camposObligatorios.value.split(';');
		//ahora tenemos en cada elemento de la array el nombre del campo que queremos validar como obligatorio
		//necesitamos sustituir el nombre por el valor de ese campo
		for(i=0;i<camposObligatorios.length;i++) {
			camposObligatorios[i] = eval("formulario."+camposObligatorios[i]+".value");
		}

    	//comprobamos en bucle que ninguno de los campos obligatorios este vacio, en cuyo caso, falla la validación.
   		 for (i=0;i<camposObligatorios.length;i++) {
       	 	if (camposObligatorios[i] == "") {
          	 	 camposObligatoriosLlenos = false;
				 window.alert(formulario.errorCamposObligatorios.value);
				 break;
       		 }
   		 }        
  	 }
	
	//comprobamos checkboxex que necesitan estar "activadas", si las hay
	if(formulario.checkboxesObligatorias && formulario.checkboxesObligatorias.value != "") {
   		//para ello, empezamos creando un array con todos las checkboxes obligatorias que se han indicado en el form
   		//a traves de un campo oculto, llamado "checkboxesObligatorias", cuyo valor seran los nombres de las checkboxes que tienen que estar marcadas
		//como por ejemplo la checkbox de consentimiento de uso de datos personales, o la de haber leido y aceptado las condiciones generales, etc.
		var checkboxesObligatorias = new Array();
		checkboxesObligatorias = formulario.checkboxesObligatorias.value.split(';');
		//ahora tenemos en cada elemento de la array el nombre de la checkbox que tiene que estar "checked" obligatoriamente
		//comprobamos cada checkbox del array para ver si esta "checked" o no, y almacenamos el resultudo booleano en el propio array
		for(i=0;i<checkboxesObligatorias.length;i++) {
			checkboxesObligatorias[i] = eval("formulario."+checkboxesObligatorias[i]+".checked");
		}

    	//comprobamos en bucle que ninguno de las checkboxes obligatorias este vacia, en cuyo caso, falla la validación.
   		 for (i=0;i<checkboxesObligatorias.length;i++) {
       	 	if (!checkboxesObligatorias[i]) {
          	 	 checkboxesObligatorias = false;
				 window.alert(formulario.errorCheckboxesObligatorias.value);
				 break;
       		 }
   		 }        
  	 }
	
	
	//si hay direcciones de mail a comprobar, comprobamos si son validas
	//las direcciones de mail vienen en un campo oculto llamado "camposMail"
	if(formulario.camposMail && formulario.camposMail.value != "") {
		//para ello, empezamos creando un array con todos los campos mail que se han indicado en el form
		var camposMail = new Array();
		camposMail = formulario.camposMail.value.split(';');
		//ahora tenemos en cada elemento de la array el nombre del campo que queremos validar como obligatorio
		//necesitamos sustituir el nombre por el valor de ese campo
		for(i=0;i<camposMail.length;i++) {
			camposMail[i] = eval("formulario."+camposMail[i]+".value");
		}
		
		//ahora comprobamos que la direccion de correo electronica puede ser una direccion valida
    	//para ello, primero comprobamos que tiene una arroba, y segundo que al menos tiene 1 punto.
    	for(i=0;i<camposMail.length;i++) {
			//la direccion de mail no sera correcta si, no estando vacio el campo (si vacio, entonces es valida porque puede no ser obligatoria)
			//, repito, si no estando vacio el campo, hay una arroba y un punto en la dirección. Podría complicar más la comprobacion, pero esta
			//me vale de momento. Más adelante, mirar con expresiones regulares.
			if(camposMail != "" && (camposMail[i].indexOf("@") == -1 || camposMail[i].indexOf(".") == -1)) {
				eMailsValidos = false;
				window.alert(formulario.errorCamposMail.value + " (" +camposMail[i]+")");
				break;
			}
			
		}
	}
          
    
    //si las comprobaciones realizadas son correctas, entonces devolvemos correcto, sino incorrecto
    var resultado = (camposObligatoriosLlenos == true && eMailsValidos == true) ? true : false;
    return resultado;
        
}


