﻿/* 
Incluir el Script
documentEvents.js
*/

var ITValidate = function(strFormName) {
    this.addField = addField;
    this.addFieldEqual = addFieldEqual;
    this.frmName = strFormName;

    checkForm(strFormName);
}

function checkForm(strFormName) {
    $(strFormName).setProperty('isSubmited', 'false'); // Para evitar validaciones antes del submit.
    $(strFormName).addEvent('submit', frmsubmit);
    $(strFormName).setProperty('frmFields', '-');
}

function addFieldEqual(strFieldName, strDivID, strLabelText, strFieldEqual, strFieldType) {
    AddNewFields(this.frmName, strFieldName, strDivID, strLabelText, strFieldEqual, strFieldType);
}

function addField(strFieldName, strDivID, strLabelText, strFieldType) {
    AddNewFields(this.frmName, strFieldName, strDivID, strLabelText, '', strFieldType);
}

function AddNewFields(strFormName, strFieldName, strDivID, strLabelText, strFieldEqual, strFieldType) {
    var oInput = $(strFormName).elements[strFieldName];

    if (oInput.length > 1 && (oInput[0].type == 'checkbox' || oInput[0].type == 'radio')) {
        var nInput;
        for (var i = 0; i < oInput.length; i++) {
            nInput = $(strFormName).getElementById(oInput[i].id);
            nInput.addEvent('click', frmClick);
            newField(strFormName, nInput, strDivID, strLabelText, strFieldEqual, strFieldType, (i == 0));
        }
    } else {
        newField(strFormName, oInput, strDivID, strLabelText, strFieldEqual, strFieldType, true);
    }
}

function newField(strFormName, oInput, strDivID, strLabelText, strFieldEqual, strFieldType, blnAddToList) {
    var mInput = $(oInput);

    mInput.addEvent('blur', frmBlur);
    mInput.addEvent('change', frmChange);
    mInput.addEvent('keyup', frmKeyUp);

    if (!$(strFormName + '.text' + strDivID)) { strDivID = mInput.name; }

    mInput.oErr = $(strFormName + '.msg' + strDivID);
    mInput.oText = $(strFormName + '.text' + strDivID);
    mInput.label = strLabelText;
    mInput.fieldType = strFieldType;
    mInput.setProperty('frmName', strFormName);

    if (strFieldEqual !== '') {
        var mInputEqual = $(strFieldEqual);
        mInput.inputEqual = mInputEqual;
        mInput.fieldType = strFieldType + 'isEqual';
    }


    if (blnAddToList == true) {
        var strFields = $(strFormName).getProperty('frmFields');
        if (strFields == '-')
            $(strFormName).setProperty('frmFields', mInput.name + ',');
        else {
            $(strFormName).setProperty('frmFields', strFields + mInput.name + ',');
        }
    }
}

function frmFocus(event) {
}

function frmBlur(event) {
    validarValorCampo(event);
}

function frmClick(event) {
    validarValorCampo(event);

    try {
        frmClick_Overrides(event);
    } catch (e) {
    }
}

function frmChange(event) {
    validarValorCampo(event);
}

function frmKeyUp(event) {
    validarValorCampo(event);
}

function validarValorCampo(event) {
    var type = event.type;
    var target = event.target || event.srcElement;
    var msg = ValidarForm(target, target.fieldType);
    var isLastSubmit = $(target).form.getProperty('isSubmited');

    if (isLastSubmit == 'true') {
        IT_MarkField(target, msg);
    }
}

function frmsubmit(event) {
    var blnSubmit = true;
    var blnFocus = false;
    var strMsg = '';

    if (document.MM_ButtonCancelar == true) return;

    var type = event.type;
    var target = event.target || event.srcElement;

    var strFields = $(target.name).getProperty('frmFields');
    $(target.name).setProperty('isSubmited', 'true'); // Para evitar validaciones antes del submit.

    if (strFields !== '-') {
        var elems = strFields.split(','); // ojo, Split devuelve 1 registro de más en blanco al final        
        for (var i = 0; i < elems.length - 1; i++) {
            elem = target.elements[elems[i]];
            strMsg = ValidarForm(elem, elem.fieldType);

            if (elem.length > 1 && (elem[0].type == 'checkbox' || elem[0].type == 'radio')) { // CheckBox, Radio, etc.
                elem = elem[0];
            }

            if (strMsg !== '') {
                blnSubmit = false;
                if (blnFocus == false) {
                    try {
                        $(elem.name).focus();
                    } catch (e) {
                        try {
                            $('oEdit' + elem.name).focus();
                        } catch (e) {
                        }
                    }
                    blnFocus = true;
                }
            }
            IT_MarkField(elem, strMsg);
        }
    }

    if (blnSubmit == false) {
        event.stop();
    }

}

function PonCursor(oField, intPosicion) {
    try {
        if (oField.createTextRange) {   // IE
            var oRange = oField.createTextRange();
            oRange.moveStart("character", intPosicion);
            oRange.moveEnd("character", intPosicion - oField.value.length);
            oRange.select();
        } else if (oField.setSelectionRange) {  // FF
            oField.setSelectionRange(intPosicion, intPosicion);
        }
    } catch (err) {
    }
}

function ValidarForm(oField, fieldType) {
    // Los campos disabled no se chequean.
    if (oField.disabled) return '';
    if (oField.type == 'checkbox') {
        var oForm = $(oField.getProperty('frmName'))
        oField = oForm.elements[oField.name];
    }

    if (oField.length > 1 && (oField[0].type == 'checkbox' || oField[0].type == 'radio')) { // CheckBox, Radio, etc.
        for (var j = 0; j < oField.length; j++) {
            strMsg = ValidarField(oField[j], oField[j].fieldType);
            if (strMsg == '') { break; }
        }
        oField = oField[0];
    } else { // Resto
        strMsg = ValidarField(oField, fieldType);
    }
    return strMsg;
}

function ValidarField(oField, fieldType) {
    var nm, val, p, min, max, error;
    error = '';

    nm = oField.name;
    val = oField.value;

    if (val != "" && val != undefined) {
        var formatoFecha = itCultureName == 'en-US' ? 'mm/dd/yyyy' : 'dd/mm/yyyy';

        if (fieldType.indexOf('isEmail') != -1) {
            p = val.indexOf('@');
            if (p < 1 || p == (val.length - 1)) error = itTraduccion.GetMensaje('form.emailrequired');
        } else if (fieldType.indexOf('isDate') != -1) {
            if (!IT_EsFecha(val)) error = itTraduccion.GetMensaje('form.daterequired', formatoFecha);
        } else if (fieldType.indexOf('isRadio') != -1) {
            if (!oField.checked) error = itTraduccion.GetMensaje('form.radiorequired');
        } else if (fieldType.indexOf('isCheck') != -1) {
            if (!oField.checked) error = itTraduccion.GetMensaje('form.fieldrequired');
        } else if (fieldType.indexOf('isTxUCase') != -1) {
            if (!IT_EsTextoUCase(val)) error = itTraduccion.GetMensaje('form.txtucaseonly');
        } else if (fieldType.indexOf('isTxNum') != -1) {
            if (!IT_EsTextoNumero(val)) error = itTraduccion.GetMensaje('form.txtnumberonly');
        } else if ((p = fieldType.indexOf('isTxMin')) != -1) {
            min = fieldType.substring(p + 7);
            if (val.length < min) error = itTraduccion.GetMensaje('form.txtmin', min, val.length);
        } else if ((p = fieldType.indexOf('isTxMax')) != -1) {
            max = fieldType.substring(p + 7);
            if (val.length > max) error = itTraduccion.GetMensaje('form.txtmax', max, val.length);
        } else if ((p = fieldType.indexOf('isDigMin')) != -1) {
            min = fieldType.substring(p + 8);
            if (!IT_EsDigito(val)) error = itTraduccion.GetMensaje('form.numberonly');
            if (val.length < min) error = itTraduccion.GetMensaje('form.numbermin', min, val.length);
        } else if ((p = fieldType.indexOf('isEqual')) != -1) {
            if (val != oField.inputEqual.value) error = itTraduccion.GetMensaje('form.fieldsequal', oField.inputEqual.label);
        } else if ((p = fieldType.indexOf('isNumCuenta')) != -1) {
            if (!IT_EsOkCuentaBancaria(val)) error = itTraduccion.GetMensaje('form.numerocuentabancaria');
        } else if (fieldType != 'R') {
            if (!IT_EsNumero(val)) error = itTraduccion.GetMensaje('form.numberrequired');
            if (fieldType.indexOf('inRange') != -1) {
                p = fieldType.indexOf(':');
                min = fieldType.substring(8, p);
                max = fieldType.substring(p + 1);
                if (val < min || max < val) error = itTraduccion.GetMensaje('form.numberrange', min, max);
            }
        }
    }
    else if (fieldType.charAt(0) == 'R') {
        error = itTraduccion.GetMensaje('form.fieldrequired');
    }

    return error;
}

function IT_MarkField(field, strMsg) {
    if (strMsg !== '' && strMsg !== undefined) {
        IT_MarkError(field, strMsg);
    } else {
        IT_UnMarkError(field);
    }
}

function IT_MarkError(field, strMsg) {
    var oText = $(field.oText.id);
    var oErr = $(field.oErr.id);

    if (!oText.hasClass('error')) {
        oText.addClass('error');
    }

    oErr.set('html', strMsg);
}

function IT_UnMarkError(field) {
    var oText = $(field.oText.id);
    var oErr = $(field.oErr.id);

    if (oText.hasClass('error')) {
        oText.removeClass('error');
        oErr.set('html', '');
    }
}


/*************************** Reglas validación ****************************************/
/*******************************************************************/

function IT_EsCheckOk(valor, formato) {
    var expresion = new RegExp(formato);
    return expresion.test(valor);
}

function IT_EsFecha(valor) {
    if (itCultureName == 'en-US') {
        formato = '^([1-9]|0[1-9]|1[012])([\.,/,-])([1-9]|0[1-9]|[12][0-9]|3[01])([\.,/,-])(19[0-9][0-9]|20[0-9][0-9]|[0-9][0-9])$' //Date (mm.dd.yyyy, m/d/yyyy, m-d-yyyy)
    } else {
        formato = '^([1-9]|0[1-9]|[12][0-9]|3[01])([\.,/,-])([1-9]|0[1-9]|1[012])([\.,/,-])(19[0-9][0-9]|20[0-9][0-9]|[0-9][0-9])$' //Date (dd.mm.yyyy, d/m/yyyy, d-m-yyyy)
    }
    return IT_EsCheckOk(valor, formato);
}

function IT_EsTextoNumero(valor) {
    var formato = '^(\\w*)$';
    return IT_EsCheckOk(valor, formato);
}

function IT_EsTexto(valor) {
    var formato = '^([a-zA-Z]*)$';
    return IT_EsCheckOk(valor, formato);
}

function IT_EsTextoUCase(valor) {
    var formato = '^([A-Z]*)$';
    return IT_EsCheckOk(valor, formato);
}

function IT_EsNumero(valor) {
    var formato = '^-?([\\d,\.,\,])*$';
    return IT_EsCheckOk(valor, formato);
}

function IT_EsDigito(valor) {
    var formato = '^(\\d*)$';
    return IT_EsCheckOk(valor, formato);
}


function IT_EsOkCuentaBancaria(valor) {
    var intDesc = valor.length - 20;

    var strEntidad = valor.substring(0 + intDesc, 4 + intDesc);
    var strOficina = valor.substring(4 + intDesc, 8 + intDesc);
    var strControl = valor.substring(8 + intDesc, 10 + intDesc);
    var strNumCuenta = valor.substring(10 + intDesc);

    var chkEntidadOficina = DigitoControl('00' + String(strEntidad) + String(strOficina));
    var chkNumCuenta = DigitoControl(strNumCuenta);

    return (chkEntidadOficina + chkNumCuenta) == strControl;
}


function DigitoControl(valor) {
    var valores = new Array(1, 2, 4, 8, 5, 10, 9, 7, 3, 6);
    var control = 0;

    for (i = 0; i <= 9; i++) {
        control += parseInt(valor.charAt(i)) * valores[i];
    }
    control = 11 - (control % 11);
    if (control == 11) {
        control = 0;
    }
    else {
        if (control == 10) {
            control = 1;
        }
    }
    return String(control);
}


function SetSelectedComboOption(ComboID, setValue) {
    var MyComboObject = document.getElementById(ComboID);
    for (i = 0; i < MyComboObject.options.length; i += 1) {
        if (MyComboObject.options[i].value == setValue) {
            MyComboObject.selectedIndex = i;
            return;
        }
    }
}
