/*
 *@Autor Andrés Omar Brizuela
 *@Year 2010
*/
	var Validador = new Array();
	/**** POR DEFECTO VALIDADOR EXPREG ****/
		var PorDefectoRegExp = new Array();
		PorDefectoRegExp.push({nombre: "mail", regexp: /(^[0-9a-z]([0-9a-z_\.-]*)@([0-9a-z_\.-]*)([.][a-z]{3})$)|(^[0-9a-z]([0-9a-z_\.-]*)@([0-9a-z_\.-]*)([.][a-z]{2})$)|(^[a-z]([a-z_\.-]*)@([a-z_\.-]*)(\.[a-z]{3})(\.[a-z]{2})*$)/i });
		PorDefectoRegExp.push({nombre: "numero", regexp: /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/ });
		PorDefectoRegExp.push({nombre: "cadena", regexp: /(^-?\D\D*\.\D*$)|(^-?\D\D*$)|(^-?\.\D\D*$)/ });
		PorDefectoRegExp.push({nombre: "entero", regexp: /(^-?\d\d*$)/ });
	/**** FIN VALIDADOR EXPREG ****/
	/**** POR DEFECTO VALIDADOR FUNCIONES ****/
		var PorDefectoFuncion = new Array();
		PorDefectoFuncion.push({nombre: "rq", funcion: "validaRQ", parametros: false, vacio: true});
		PorDefectoFuncion.push({nombre: "multiplechoice", funcion: "validaMChoice", parametros: true});
		PorDefectoFuncion.push({nombre: "repetir", funcion: "validaReplica", parametros: true});
		PorDefectoFuncion.push({nombre: "fecha", funcion: "validaFecha", parametros: false});
        PorDefectoFuncion.push({nombre: "MayorDeEdad", funcion: "ValidarMayorDeEdad", parametros: false});
		PorDefectoFuncion.push({nombre: "dia", funcion: "validaDia", parametros: false});
		PorDefectoFuncion.push({nombre: "mes", funcion: "validaMes", parametros: false});
		PorDefectoFuncion.push({nombre: "ano", funcion: "validaAno", parametros: false});
	/**** FIN VALIDADOR FUNCIONES ****/
	
	var MensajesError = new Array();
	/**** POR DEFECTO MENSAJES DE ERROR ****/
		var PorDefectoMensajes = new Array();
		PorDefectoMensajes.push({nombre: "pordefecto", error: "Este dato es requerido."});
		PorDefectoMensajes.push({nombre: "multiplechoice", error: "Por favor respondé todas las preguntas."});
		PorDefectoMensajes.push({nombre: "repetir", error: "Los datos no coinciden."});
		PorDefectoMensajes.push({nombre: "fecha", error: "Ingrese una fecha correcta (ej.: dd/mm/aaaa)."});
		PorDefectoMensajes.push({nombre: "dia", error: "Ingrese un número de día correcto."});
		PorDefectoMensajes.push({nombre: "mes", error: "Ingrese un número de mes correcto"});
		PorDefectoMensajes.push({nombre: "ano", error: "Ingrese un número de año correcto"});
		PorDefectoMensajes.push({nombre: "mail", error: "Ingrese un mail correcto (ej.: ejemplo@ejemplo.com.ar)."});
		PorDefectoMensajes.push({nombre: "numero", error: "Tiene que ser un número."});
		PorDefectoMensajes.push({nombre: "cadena", error: "Tiene que ser texto."});
		PorDefectoMensajes.push({nombre: "entero", error: "El dato ingresado es invalido."});
        PorDefectoMensajes.push({nombre: "MayorDeEdad", error: "Tiene que tener más de 18 años."});
	/**** FIN MENSAJES DE ERROR ****/

	var FunPrintError = "PrintErrorDF";
	/**** FUNCIONES GENERAL ****/
	/*
	 *	Esta funcion elimina el espacio en blanco que hay adelante o atras del string enviado.
	 *	
	 *	@parametro	STRING
	 *	@return		STRING
	*/
	function trimAll(strValue){
		
		var objRegExp = /^(\s*)$/
		
		//Elimino espacios en blanco
		if(objRegExp.test(strValue)) {
		   strValue = strValue.replace(objRegExp, '')
		   if( strValue.length == 0){
		      return strValue
		   }
		}
		
		objRegExp = /^(\s*)([\W\w]*)(\b\s*$)/
		if(objRegExp.test(strValue)) {
		   strValue = strValue.replace(objRegExp, '$2')
		}
		
		return strValue
	
	}
/**** FIN FUNCIONES GENERAL ****/
/**** FUNCIONES VALIDA ****/
	var RegExpFecha = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/
	var RegExpEntero = /(^-?\d\d*$)/

	function validaRQ (input, form){
		input.value = trimAll(input.value);
		Value = input.value;
		
		switch (input.type){
			case "checkbox":
            case "radio":
				
				if(input.checked != true){
					return false
				}
				
				break;
			default:
				
				if(Value.length < 1){
					return false;
				}
				
				break;
				
		}

		return true;
	}
	
	function validaMChoice (input, form, parametro){
		var CantOption;
		var GrupoNombre;
		var TypeInput;
		
		/**/
		if(parametro != undefined && parametro != ""){
			CantOption = parseFloat(parametro); 
		}else{
			CantOption = parseFloat("1");
		}
		
		if(input.name != undefined && input.name != ""){
			GrupoNombre = input.name;
		}else{
			return false;
		}
		
		TypeInput = input.type;
		/**/
				
		OpcionElegida = 0;
		InputBusqueda = document.getElementsByName(GrupoNombre);
		
		for (contAux=0;contAux<InputBusqueda.length;contAux++){

			if(InputBusqueda[contAux].disabled == false && InputBusqueda[contAux].type == TypeInput){
				
				Checked = InputBusqueda[contAux].checked;				
				if(Checked == true){
					OpcionElegida++;
				}
								
			}
			
		}
			
		if(OpcionElegida >= CantOption){
			return true;
		}else{
			return false;
		}
	}

	function validaReplica(input, form, parametro){
		var idComparar;
		var Value;
		/**/
		if(parametro == undefined || parametro == ""){
			return false;
		}
		
		idComparar = parametro;
		Value = input.value;
		/**/
		
		InputCompara = document.getElementById(idComparar);
		if(InputCompara.value == Value){
			return true;
		}
		
		return false;
	}

	function validaFecha(input, form){
		/**/

        var valorRetornado = false;
        
		var Value = input.value;
        var strFecha = Value;

		if(!RegExpFecha.test(Value)){		
			valorRetornado = false;		
		}else{
			var strSeparator = strFecha.substring(2,3) 
			var arrayDate = strFecha.split(strSeparator) 

			var arrayValidaMes = {  '01' : 31,'03' : 31, 
			                    	'04' : 30,'05' : 31,
			                    	'06' : 30,'07' : 31,
			                    	'08' : 31,'09' : 30,
			                    	'10' : 31,'11' : 30,
									'12' : 31}

			var intDia = parseInt(arrayDate[0],10) 			
			var intMes = parseInt(arrayDate[1],10)
			var intAno = parseInt(arrayDate[2])
            
			if(arrayValidaMes[arrayDate[1]] != null){
				if(intDia <= arrayValidaMes[arrayDate[1]] && intDia != 0){
			    	valorRetornado = true;
  				}
			}
            
			if (intMes == 2) {
   				if (intDia > 0 && intDia < 29) {
			    	valorRetornado = true;
			   	}else if (intDia == 29) {
			    	if ((intAno % 4 == 0) && (intAno % 100 != 0) || (intAno % 400 == 0)) {
			        	valorRetornado = true;
			     	}
			   	}
			}
		}  
            
		return valorRetornado;
	}
    
    function ValidarMayorDeEdad(input, form){
         var mayorde = 17;
         var strFecha =  input.value;

        if(mayorde > 0){
            var FechaHoy = new Date();

            var strSeparator = strFecha.substring(2,3) 
			var aFechaNac = strFecha.split(strSeparator) 

            var Edad = 0;

            Edad = (FechaHoy.getFullYear() - aFechaNac[2]) - 1; //-1 porque no se si ha cumplido años ya este año
            if(Edad < 0){
                valorRetornado = false;
            }
            
            if((FechaHoy.getMonth()+1) >= aFechaNac[1]){
                if((FechaHoy.getMonth()+1) == aFechaNac[1]){
                   if(FechaHoy.getDate() >= aFechaNac[0]){
                        Edad++;
                   } 
                }else{
                   Edad++; 
                }
            }
        }
        
        if(Edad > mayorde){
            return true;
        }else{
            return false;
        }
    }
	
	function validaDia(input, form){		
		var Value = input.value;
		
		if(!RegExpEntero.test(Value)){
			return false;
		}else{
			if(Value.length > 2 || Value < 1 || Value > 31){
				return false;
			}
		}
		
		return true;
	}
	
	function validaMes(input, form){		
		var Value = input.value;
		
		if(!RegExpEntero.test(Value)){
			return false;
		}else{
			if(Value.length > 2 || Value < 1 || Value > 12){
				return false;
			}
		}
		
		return true;
	}
	
	function validaAno(input, form){		
		var Value = input.value;
		
		if(!RegExpEntero.test(Value)){
			return false;
		}else{
			if(Value.length != 4){
				return false;
			}
		}
		
		return true;
	}
/**** END FUNCIONES ****/

function Validar(objForm){
		
	for (cont=0;cont<objForm.length;cont++){
		var PasarNoRequerido = false;
        
		ElementoForm = objForm.elements[cont];
		
		if(ElementoForm.disabled == false){
			Condiciones = ElementoForm.getAttribute("validar");
            
			if(Condiciones != null){
				
				arrCondiciones = Condiciones.split("::");
				
				for(idCondicion in arrCondiciones){
					/**/
					Condicion = arrCondiciones[idCondicion];

                    if(trimAll(Condicion) != "" && (!Object.isFunction(Condicion))){
    					/**/
    					arrCondicion = Condicion.split("_");
                        /**/
    					for(idConValida in Validador){
    						/**/
    						ConValida = Validador[idConValida];
    						/**/
    						if(arrCondicion[0] == ConValida.nombre){
                                if(ElementoForm.value == ""){
                                    if(ConValida.vacio != true){
                                        PasarNoRequerido = true;
                                    }
                                }
                                
                                if(!PasarNoRequerido){
        							if(ConValida.funcion != null){
        								ExecFun = ConValida.funcion+"(ElementoForm, objForm";
        								if(ConValida.parametros){
        								    strParametros = "";
        									for(idparametro in arrCondicion){
        									/**/
        									parametro = arrCondicion[idparametro];
        									/**/
        										if(parametro != arrCondicion[0]){
        											if(strParametros != ""){
        												strParametros = strParametros+",";
        											}
        											strParametros = strParametros+parametro;
        										}
        									}
        									ExecFun = ExecFun+",'"+strParametros+"'";
        								}
        								ExecFun = ExecFun+")";
        								
        								if(!eval(ExecFun)){
        									eval(FunPrintError+'("'+ConValida.nombre+'", ElementoForm)');
        									return false;
        								}
        							}else if(ConValida.regexp != null){
        								if(!ConValida.regexp.test(ElementoForm.value)){
        									eval(FunPrintError+'("'+ConValida.nombre+'", ElementoForm)');
        									return false;									
        								}
        							}
                                }
    						}
    					}
					}
				}
				
			}
		}
		
	}
	
	return true;
}

function PrintErrorDF(nombreError, Elemento){
	
	for (idMensaje = 0; idMensaje < MensajesError.length; idMensaje++ ){
		/**/
		Mensaje = MensajesError[idMensaje];
		/**/
		if(Mensaje.nombre == nombreError){
			window.alert(Mensaje.error);
			Elemento.focus();
			return true;
		}		
	}
	
	for (idMensaje = 0; idMensaje < MensajesError.length; idMensaje++ ){
		/**/
		Mensaje = MensajesError[idMensaje];
		/**/
		if(Mensaje.nombre == "pordefecto"){
			window.alert(Mensaje.error);
			Elemento.focus();
			return true;
		}		
	}
	
}

function iniValidador(){
	for (idValoresValida in PorDefectoRegExp){
		/**/
		ValoresValida = PorDefectoRegExp[idValoresValida];
		/**/
		Validador.push(ValoresValida);       
	}
	for (idValoresValida in PorDefectoFuncion){
		/**/
		ValoresValida = PorDefectoFuncion[idValoresValida];
		/**/
		Validador.push(ValoresValida);	
	}
	
	for (idMensaje in PorDefectoMensajes){
		/**/
		Mensaje = PorDefectoMensajes[idMensaje];
		/**/
		MensajesError.push(Mensaje);
	}
}
iniValidador();
