﻿//Formato de la fecha  
// 1 = DD/MM/YYYY   
// 2 = MM/DD/YYYY     
// 3 = YYYY/MM/DD  
// 4 = YYYY/DD/MM  

//**********************************************************************************************  
//  invierta una fecha dada retornando en formato YYYYMMDD  
//  dFecIni = Fecha a invertir  
//  nTipFormat = Formato en que biene la fecha  
//               1 = DD/MM/YYYY   
//               2 = MM/DD/YYYY   
//               3 = YYYY/MM/DD  
//               4 = YYYY/DD/MM  

function invFecha(nTipFormat, dFecIni) {
    var dFecIni = dFecIni.replace(/-/g, "/");                    // reemplaza el - por /   

    // primera division fecha  
    var nPosUno = ponCero(dFecIni.substr(0, dFecIni.indexOf("/")));
    // 2º divicion fecha  
    var nPosDos = ponCero(dFecIni.substr(parseInt(dFecIni.indexOf("/")) + 1, parseInt(dFecIni.lastIndexOf("/")) - parseInt(dFecIni.indexOf("/")) - 1));
    // 3º divicion fecha  
    var nPosTres = ponCero(dFecIni.substr(parseInt(dFecIni.lastIndexOf("/")) + 1));

    switch (nTipFormat) {
        case 1:    //  DD/MM/YYYY  
            dReturnFecha = nPosTres + "" + nPosDos + "" + nPosUno;
            break;

        case 2:    //  MM/DD/YYYY  
            dReturnFecha = nPosTres + "" + nPosUno + "" + nPosDos;
            break;

        case 3:    //  YYYY/MM/DD  
            dReturnFecha = nPosUno + "" + nPosDos + "" + nPosTres;
            break;

        case 4:    //  YYYY/DD/MM  
            dReturnFecha = nPosUno + "" + nPosTres + "" + nPosDos;
            break;
    }

    return dReturnFecha;    // retorna la fecha       
}

// Agrega un cero delante del strPon cuando tenga solo un caracter  
function ponCero(strPon) {
    if (parseInt(strPon.length) < 2)
        strPon = "0" + strPon;
    return strPon;
}

//*******************************************************************************  
// valida que la fecha dFecMenor es menor o igual a  dFecMayor  
// los parametros dFecMenor, dFecMayor son fecha con divisores validos "-" o "/"  
// el parametro dFormat es el tipo de formato en que viene la fecha   
//               1 = DD/MM/YYYY   
//               2 = MM/DD/YYYY   
//               3 = YYYY/MM/DD  
//               4 = YYYY/DD/MM

function comparaFecha(dFormat, dFecMenor, dFecMayor, control, span, foco) {
    dFecMenor = invFecha(dFormat, dFecMenor);
    dFecMayor = invFecha(dFormat, dFecMayor);

    if (dFecMenor > dFecMayor) {
        showError(control, span, 'La fecha que has seleccionado pertenece al futuro. Por favor corrige la fecha', foco);
        return false;
    }
    else {
        hideError(control, span);
    }
    return true;
}

function isEmail(control, span, foco) {
    if (!/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(control.val())) {
        showError(control, span, 'El email no es válido', foco);
        return false;
    }
    else {
        hideError(control, span);
    }
    return true;
}

function isUrl(control, optional, span, foco) {
    if (optional && control.val() && !/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(control.val())) {
        showError(control, span, 'La web no es válida', foco);
        return false;
    }
    else {
        hideError(control, span);
    }
    return true;
}

function isTime(control, optional, span, foco) {
    re = /^(\d{2}):(\d{2})?$/;
    err = false;

    if (control.val() != '' && control.val() != '__:__') {
        if (regs = control.val().match(re)) {
            if (regs[1] > 23 || regs[2] > 59)
                err = true;
        }
        else
            err = true;
    }
    else
        err = true && !optional;

    if (err) {
        showError(control, span, 'La hora no es válida', foco);
        return false;
    }
    else {
        hideError(control, span);
    }

    return true;
}

function isCehckedList(vecCheck, span) {
    for (j = 0; j < vecCheck.length; j++) {
        if (vecCheck[j].is(':checked') && !vecCheck[j].is(':disabled')) {
            hideError(null, span);
            return true;
        }
    }

    showError(null, span, 'Debe seleccionar una opción', null);
    return false;
}

function isEmpty(control, span, foco, defaultValue) {
    if (defaultValue == undefined)
        defaultValue = '';
    if (control.val() == defaultValue && !control.attr('disabled')) {
        showError(control, span, 'Este campo no puede dejarse en blanco', foco);
        return true;
    }
    else {
        hideError(control, span);
    }
    return false;
}

/*
function isSelected(control, defaultValue, span, foco) {
if (control.val() == defaultValue) {
showError(control, span, 'Debe seleccionar uno', foco);
return false;
}
else {
hideError(control, span);
}
return true;
}
*/

function isEqual(control, control2, span, foco) {
    if (control.val() != control2.val()) {
        showError(control2, span, 'No coincide', foco);
        return false;
    }
    else {
        hideError(control2, span);
    }

    return true;
}

function showError(control, span, text, foco) {
    span.text(text);
    span.removeClass('noVisible');
    if (control != null)
        control.addClass('inputError');
    if (foco != null && foco.value == null)
        foco.value = control;
}

function hideError(control, span) {
    span.addClass('noVisible');
    if (control != null)
        control.removeClass('inputError');
}