//Función para validar un número de domicilio, perimite colocar S/N
function validarNumeroDomicilio(elm) { 
    var Campo = document.getElementById(elm).value;
    var patron = /^([0-9]*)$|\bs\/n\b|\bS\/N\b/; 
    if(Campo != ""){
        if (!Campo.match(patron)){
            alert("El número NO es válido, por favor verifíquelo");
            document.getElementById(elm).value = "";
            document.getElementById(elm).focus();
            return false;
        }
    }
    return true;
} 


//Función para validar una dirección de correo electrónico
function ValidaCorreo(elm){
    var Campo = document.getElementById(elm).value;
    var patron = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
    if(Campo != ""){
        if (!Campo.match(patron)){
            alert("El formato del correo electrónico NO es válido, por favor verifíquelo");
            document.getElementById(elm).value = "";
            document.getElementById(elm).focus();
            return false;
        }
    }
    return true;
} 	


//Función que valida un RFC normal 4letras+6digitos o bien RFC con homoclave 4letras+6digitos+1letra+2digitos
function ValidaRFC(elm){ 
    var er=/^(([A-Z][AEIOU][A-Z]{2}\d{6})|([A-Z]{4}\d{6}[A-Z]\d{2})|([A-Z]{4}\d{6}[A-Z][A-Z]\d{1})|([A-Z]{4}\d{6}[A-Z]{3})|([A-Z]{4}\d{6}\d{3})|([A-Z]{4}\d{6}\d{2}[A-Z])|([A-Z]{3}\d{6}[A-Z]{2}\d{1})|([A-Z]{4}\d{6}[A-Z]\d{1}[A-Z])|([A-Z]{4}\d{7}[A-Z]\d{1}))$/i;
    var num= document.getElementById(elm).value; 
    if(num != ""){
        if(er.test(num)==false){ 		 
            alert("El formato del RFC NO es válido, por favor verifíquelo"); 
            document.getElementById(elm).value = "";
            document.getElementById(elm).focus();
            return(false);
        } 
    }
    return (true);
}


//Función para validar el Login y Password en el evento onKeyPress
function validarLoginPassword(e) { 
    tecla = (document.all) ? e.keyCode : e.which; 
    if (tecla==8 || tecla==13 || tecla==0) return true; 
    patron =/[A-Za-z0-9_]/; 
    te = String.fromCharCode(tecla); 
    return patron.test(te); 
} 

//Función para validar que el Login sea alfanumérico (que contenga números y letras) y tenga una
//longitud de 6 a 12 caracteres
function validarLogin(elm){
    var log = document.getElementById(elm).value;
    var er = /^(\w*(?=\w*\d)\w*){6,12}$/;
    if(log != ""){
        if(er.test(log) == false){
            alert("La Clave de Usuario y la Contraseña deben ser de 6 a 12 caracteres y contener al menos un dígito");
            document.getElementById(elm).value = "";
            document.getElementById(elm).focus();
            return false;
        }else{
        return true;    
    }
}
return true;
}

//Función para validar que la Contraseña sea alfanumérica (que contenga números y letras) y tenga una
//longitud de 6 a 12 caracteres
function validarPsw(elm){
    var log = document.getElementById(elm).value;
    var er = /^(\w*(?=\w*\d)\w*){6,12}$/;
    if(log != ""){
        if(er.test(log) == false){  
            alert("La Contraseña debe ser de 6 a 12 caracteres y contener al menos un dígito");
            document.getElementById(elm).value = "";
            document.getElementById(elm).focus();
            return false;
        }else{
        return true;    
    }
}
return true;
}

//Función para validar CURP
function validarCurp(elm) { 
    var curp = document.getElementById(elm).value; 
    var patron =/[A-Z0-9]{18}/; 
    if(curp != ""){
        if(patron.test(curp)==false){ 		 
            alert("El formato de la CURP NO es válido, por favor verifíquelo"); 
            document.getElementById(elm).value = "";
            document.getElementById(elm).focus();
            return(false);
        } 
    }
    return (true);
} 

//Función que valida que el Código Postal sea de 5 dígitos
function validarCp(elm){ 
    var er=/[0-9]{5}/;
    var num= document.getElementById(elm).value; 
    if(num != ""){
        if(er.test(num)==false){ 		 
            alert("El Código Postal debe ser de 5 dígitos, por favor verifíquelo"); 
            document.getElementById(elm).value = "";
            document.getElementById(elm).focus();
            return(false);
        } 
    }
    return (true);
}


/**Funciones para validar la fecha introducida por el usuario separándola en día, mes y año
Valida que la fecha sea correcta, que tenga el formato dd/mm/aaaa y si su argumento act = true
también valida que no sea mayor a la fecha actual
*/
function validarFecha(fecha, act){
    
    var a, mes, dia, anyo, febrero;
    
    //Obtener la fecha capturada	
    a=document.getElementById(fecha).value;			
    if(a==""){
        return true;//para este caso la fecha es opcional
    } 
    
    dia=a.split("/")[0];
    mes=a.split("/")[1];
    anyo=a.split("/")[2];
    
    if( (isNaN(dia)==true) || (isNaN(mes)==true) || (isNaN(anyo)==true) ){
        alert("La fecha introducida debe estar formada por números y /");
        document.getElementById(fecha).value = "";
        document.getElementById(fecha).focus();
        return false;
    }
    if(a.length<10){
        alert("La fecha debe ir con un formato de dd/mm/aaaa");
        document.getElementById(fecha).value = "";
        document.getElementById(fecha).focus();
        return false;
    }
    if(anyoBisiesto(anyo))
        febrero=29;
    else
        febrero=28;
    /**
    * si el mes introducido es negativo, 0 o mayor que 12 > alertamos y detenemos ejecucion
    */
    if ((mes<1) || (mes>12)){
        alert("El mes introducido no es válido. Por favor, introduzca un mes correcto");
        document.getElementById(fecha).value = "";
        document.getElementById(fecha).focus();
        return false;
    }
    /**
    * si el mes introducido es febrero y el dia es mayor que el correspondiente
    * al año introducido > alertamos y detenemos ejecucion
    */
    if ((mes==2) && ((dia<1) || (dia>febrero))){
        alert("El día introducido no es válido. Por favor, introduzca un día correcto");
        document.getElementById(fecha).value = "";
        document.getElementById(fecha).focus();
        return false;
    }
    /**
    * si el mes introducido es de 31 dias y el dia introducido es mayor de 31 > alertamos y detenemos ejecucion
    */
    if (((mes==1) || (mes==3) || (mes==5) || (mes==7) || (mes==8) || (mes==10) || (mes==12)) && ((dia<1) || (dia>31))){
        alert("El día introducido no es válido. Por favor, introduzca un día correcto");
        document.getElementById(fecha).value = "";
        document.getElementById(fecha).focus();
        return false;
    }
    /**
    * si el mes introducido es de 30 dias y el dia introducido es mayor de 30 > alertamos y detenemos ejecucion
    */
    if (((mes==4) || (mes==6) || (mes==9) || (mes==11)) && ((dia<1) || (dia>30))){
        alert("El dia introducido no es valido. Por favor, introduzca un dia correcto");
        document.getElementById(fecha).value = "";
        document.getElementById(fecha).focus(); 
        return false;
    }
    
    
    if (act == true){        
        //Validar que la fecha capturada no sea mayor a la fecha actual
        var FecAct=document.getElementById('form1:hidFecAct').value;
        var diaA,mesA,anyoA;
        
        diaA=FecAct.split("/")[0];
        mesA=FecAct.split("/")[1];
        anyoA=FecAct.split("/")[2];
        FechaA=new Date(anyoA + "/"+ mesA + "/"+ diaA);
        FechaC=new Date(anyo+ "/" + mes + "/" +dia);
        if(FechaC > FechaA){
            alert("La fecha no puede ser mayor a la fecha de hoy");
            document.getElementById(fecha).value = "";
            document.getElementById(fecha).focus(); 
            return false;
        }else{
        return true;
    }
}
} 
function validarFechas(fecIni, fecFin){
    var diaFecIni,mesFecIni,anyoFecIni,diaFecFin,mesFecFin,anyoFecFin;
    FechaInicial=document.getElementById(fecIni).value;			
    FechaFinal=document.getElementById(fecFin).value;
    if(FechaInicial=="" || FechaFinal==""){
        return true;//para este caso la fecha es opcional
    } 
    diaFecIni=FechaInicial.split("/")[0];
    mesFecIni=FechaInicial.split("/")[1];
    anyoFecIni=FechaInicial.split("/")[2];
    diaFecFin=FechaFinal.split("/")[0];
    mesFecFin=FechaFinal.split("/")[1];
    anyoFecFin=FechaFinal.split("/")[2];
    var FechaA = new Date(anyoFecIni+"/"+mesFecIni+"/"+diaFecIni);
    var FechaB = new Date(anyoFecFin+"/"+mesFecFin+"/"+diaFecFin);
    if (FechaB<FechaA){
        alert("La fecha Inicial no puede ser mayor que la fecha Final");
        document.getElementById(fecFin).value="";
        document.getElementById(fecFin).focus();
        return false;
    }
}
/**
* funcion para comprobar si una año es bisiesto
* argumento anyo > año extraido de la fecha introducida por el usuario
*/
function anyoBisiesto(anyo){
    /** si el año introducido es de dos cifras lo pasamos al periodo de 1900. Ejemplo: 25 > 1925 */
    if (anyo < 100)
        var fin = anyo + 1900;
    else
        var fin = anyo;
    
    /*
    * primera condicion: si el resto de dividir el año entre 4 no es cero > el año no es bisiesto
    * es decir, obtenemos año modulo 4, teniendo que cumplirse anyo mod(4)=0 para bisiesto
    */
    if (fin % 4 != 0)
        return false;
    else{
        if (fin % 100 == 0){
            /**
            * si el año es divisible por 4 y por 100 y divisible por 400 > es bisiesto
            */
            if (fin % 400 == 0){
                return true;
            }else{
            /**
            * si es divisible por 4 y por 100 pero no lo es por 400 > no es bisiesto
            */
            return false;
        }
    }else{
    /**
    * si es divisible por 4 y no es divisible por 100 > el año es bisiesto
    */
    return true;
}
}
}
