/**
  * ***********************************************************************************************
  *   				   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&oacute;n de e-mail
  *									sel  - Select
  *                 ci   - Cedulas en el formato 1234567-8
  *									pass - Passwords, chequea que exista el campo "NOMBRECAMPOPASS2_pass" para chequearlo tambi&eacute;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(theForm){
	var form = theForm;
	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 ciRegExp = /[0-9]{6,7}-\d/;
	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)) {
				//elemActual = eval("document."+nombreForm+"."+matches[1]);
				elemActual = elemento;
				contenedor = document.getElementById("contenedor_"+matches[1]);
				switch(matches[3]){
					case 'str':
					case 'txt':
						if(elemActual.value.length == 0) {
							todoBien = false;
							contenedor.className = "error";
						} else {
							contenedor.className = "";
						}
					break;
					case 'mail':
						if(!mailRegExp.test(elemActual.value)){
							todoBien = false;
							contenedor.className = "error";
						} else {
							contenedor.className = "";
						}
					break;
					case 'int':
						if(isNaN(parseInt(elemActual.value))) {
							todoBien = false;
							contenedor.className = "error";
						} else {
							contenedor.className = "";
						}
					break;
					case 'sel':
						//alert(elemActual.name + ' - ' + elemActual.selectedIndex + ' - ' + (elemActual.selectedIndex == 0));
						if (elemActual.selectedIndex == 0){
							todoBien = false;
							contenedor.className = "error";
						} else {
							contenedor.className = "";
						}
					break;
					case 'ci':
					  if(!ciRegExp.test(elemActual.value)) {
					    todoBien = false;
							contenedor.className = "error";
						} else {
						  contenedor.className = "";
						}
					break;
					case 'rut':
						//if(!validoRut(elemActual.value+"-"+document.getElementById("rut_guion").value)){
						if(!validoRut(elemActual.value)){
					    todoBien = false;
							contenedor.className = "error";
						} else {
						  contenedor.className = "";
						}
					break;
					case 'radio':
						var nombre = elemActual.name;
						var elems = form.getElementsByTagName('input');
						var valido = false;
						for(i = 0; i < elems.length; i++)
						{
							if(elems[i].type == 'radio' && elems[i].name == nombre && elems[i].checked)
							{
								valido = true;
								break;
							}
						}
						if(!valido){
					    todoBien = false;
							contenedor.className = "error";
						} else {
						  contenedor.className = "";
						}
					break;
					case 'pass':
						if(elemActual.value.length == 0) {
							todoBien = false;
							contenedor.className = "error";							
						} 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";	
							} 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 = "block";
		var loc = window.location.href.split("#");
		window.location.href = loc[0] + "#error";
		return false;
	} else {
		//form.submit();				
			return true;
	}
}


function validoRut(valor)
{
	rut_completo = valor.split("-");
	vari = rut_completo[0];
	dv   = rut_completo[1];
	suma = 0;
	divi = 0;
	cont = 0;
	rut = vari;
	res = 1;
	cont = 2;  
	
	//if(objRut.value == "" || dv.value == "") return false;
	if(vari == "" || dv == "") return false;

	for (a = 1; a <= vari.length; a++){
		divi = (rut % 10);
		rut = rut - divi;
		rut = Math.ceil(rut / 10);
		res = divi * cont;
		suma = suma + res;
		cont++;
		if(cont == 8) {
			cont = 2;
		}
	}
	
	suma = suma % 11;
	suma = 11 - suma;
	
	if(suma == 11){
		suma = 0;
	} else if (suma == 10) {
		suma = "k";
	}
	
	if(dv != suma) {
		return false;
	}

	return true;
}
