/**
  * ***********************************************************************************************
  *   				   Super-Ultra-Fashion validador automatico de formularios(v 1.0)                    
  *
  * Chequea automaticamente un formulario recorriendo todos sus elementos, y a partir 
  * del id que tengan, determina la mejor forma de verificarlos.
  * - Los tipos que se chequean son:
  *	str  - Strings
  *	int  - Enteros
  *	mail - Dirección de e-mail
  *	sel  - Select
  *	pass - Passwords, chequea que exista el campo "NOMBRECAMPOPASS2_pass" para chequearlo también.
  * - Los campos requeridos van a tener la sintaxis: rq_NOMBRECAMPO_tipo
  * - Usa el id "error" para referenciar a un bloque en el que se muestra el mensaje de error
  * - Usa la clase "error_contenedor" para cambiar los estilos de los td e inputs.
  * - Para especificar un contenedor de un campo (seria el tr), su id, debe ser: "contenedor_NOMBRECAMPO"
  * MODO DE USO:
  *				Darle los IDs correspondientes dentro del formulario, para especificar los campos requeridos y madar a validar, dando
  *				como parametro el "name" del formulario.
  *	  		    NOTA: Si existe un campo password, el validador automaticamente, chequea que exista el campo "Repetir contraseña" para comprobar que 
  * 				  se halla escrito igual.
  * NOTA: En caso de duda bajarse una mano.
  *
  * @param 		string 	nombreForm	El "name" del form a chequear.
  * @param		enum	layout	Si el form esta embebido en tablas o divs (para desplegar correctamente los errores).
  *					Los valores posibles del enum son ("div", "table")
  */
function validaForm(nombreForm, formLayout){
	formLayout = (formLayout=="")?"table":"div";
	var form = eval("document."+nombreForm);
	var todoBien = true;
	var elemento;
	var elemActual;
	var contenedor //el contenedor del elemento actual.
	var regExp = /rq_([^_]+(_[^_]+)?)_([a-z]+)/; /*obtiene todos los campos requeridos y separa su nombre, y su tipo */
	var mailRegExp = /[^@]+@[^\.]+\.[^\s]+$/; /* chequea que el mail tenga el formato correcto */
	
	var pass1, pass2; //para chequear que se ingresen ambos passwords iguales.
	
	for(index = 0; index < form.elements.length; index++)  {
		elemento = form.elements[index];
		if(elemento.id != undefined) {
			if(matches = elemento.id.match(regExp)) {
				//alert(matches[1]);
				elemActual = eval("document."+nombreForm+"."+matches[1]);
				contenedor = document.getElementById("contenedor_"+matches[1]);
				switch(matches[3]){
					case 'str':
						if(elemActual.value.length == 0) {
							todoBien = false;
							contenedor.className = "error_contenedor";
						} else {
							contenedor.className = "";
						}
					break;
					case 'mail':
						//alert(contenedor);
						if(!mailRegExp.test(elemActual.value)){
							todoBien = false;
							contenedor.className = "error_contenedor";
						} else {
							contenedor.className = "";
						}
					break;
					case 'int':
						if(isNaN(parseInt(elemActual.value))) {
							todoBien = false;
							contenedor.className = "error_contenedor";							
						} else {
							contenedor.className = "";
						}
					break;
					case 'sel':
						if(elemActual.options[elemActual.selectedIndex].value == -1) {
							todoBien = false;
							contenedor.className = "error_contenedor";
						} else {
							contenedor.className = "";
						}
					break;
					case 'pass':
						if(elemActual.value.length == 0) {
							todoBien = false;
							contenedor.className = "error_contenedor";							
						} else {
							contenedor.className = "";
						}
						
						var pass2 = matches[1] + "2_pass";
						var campo2 = document.getElementById(pass2);
						var contenedor2 = document.getElementById("contenedor_"+matches[1]+"2")
						if(campo2 != undefined) {
							if(campo2.value == "" || elemActual.value != campo2.value) {
								todoBien = false;
								contenedor2.className = "error_contenedor";	
							} else {
								contenedor2.className = "";
							}
						}
					break;
				}
			}
		}
	}
	
	if(!todoBien) { //si no está todo bien, no queda otra que mostrar el mensaje de error
		document.getElementById("error").style.display = (formLayout == "div" || navigator.appName.indexOf("Microsoft")!=-1)?"block":"table-cell";
	} else {
		form.submit();
	}
}
