﻿//El presente script controla todas las validaciones por lado del cliente
var error_required_msg = "Dato Obligatorio";
var error_email_msg = "email ingresado no válido";
var error_dv_msg = "dígito verificador no válido";
var error_rut_msg = "rut ingresado no válido";
var error_minlength_msg = "el campo requiere min. {0} caracteres";
var error_minlength_rut_msg = "el rut requiere min. 6 dígitos";
var error_equalTo_password_msg = "password no concuerda";
var error_min_msg = "el valor no puede ser menor que {0}";
var error_max_msg = "el valor no puede ser mayor que {0}";
var error_patente_msg = "número de patente no válido";
var error_patente_no_valida = "número de patente no válido";

var password_minLength = 3;

var jformAjaxClassID = ".jformAjax"; //para el helper Ajax.BeginJForm
var jformHtmlClassID = ".jformHtml"; //para el helper Html.BeginJForm
var jSubmitID = ".jAjaxSubmit"; // para caso especiales que no se compatibiliza con ajax de microsoft
var jformValidator; //variable global para manejar validaciones
$(document).ready(function() {
    $(jSubmitID).live("click", function() {
        if (!$(jformAjaxClassID).valid()) {
            return false;
        }
    })
})


function executeJqueryFormPlugins() {
    executeMeioMasking();
    executeAlphanumeric();
    executeValidation();
}

function initMeioMask() {
    $.mask.rules = {
        'K': /[0-9kK]/,
        'z': /[a-zA-Z]/,
        'y': /[1-2]/,
        '*': /[0-9a-zA-Z]/
    };

    //Inserte las reglas de masking aqui
    $.mask.masks = $.extend($.mask.masks, {
        rut: { mask: '9999999999' },
        patente: { mask: 'zz**99' },
        anio: { mask: 'y999' },
        dv: { mask: 'K' }

    });
}



function executeMeioMasking() {
    //hay que ejecutar esta linea de codigo para levantar los efectos de masking
    $(".maskedInput").setMask({ selectCharsOnFocus: true, autoTab: false, textAlign: true });
}

function executeAlphanumeric() {
    $(".alphanumericInput[alt~=nameString]").alpha({ allow: " ." });
    $(".alphanumericInput[alt~=email]").alphanumeric({ allow: ".-_@" });
    $(".alphanumericInput[alt~=numeric]").numeric();
    $(".alphanumericInput[alt~=alphanumeric]").alphanumeric();
    $(".alphanumericInput[alt~=alphanumericSpace]").alphanumeric({ allow: " " });
    $(".alphanumericInput[alt~=street]").alphanumeric({ allow: ". " });
    // Validación especial para la Creación de Propuesta.
    var AnioInput = $("input[alt~='Anio']");
    var NumeroPatenteInput = $("input[alt~='patente']");
    var NombreInput = $("input[alt~='Nombre']");
    var ApellidoPaternoInput = $("input[alt~='ApellidoPaterno']");
    var ApellidoMaternoInput = $("input[alt~='ApellidoMaterno']");
    $(".HabilitarEmision").blur(function() {
        if (AnioInput.val() != '' && NumeroPatenteInput.val() != '' && NombreInput.val() != '' && ApellidoPaternoInput.val() != '' && ApellidoMaternoInput.val() != '') {

            $('#boton').removeAttr('disabled');
            $('#guarda').attr('disabled', 'disabled');
            
        }
        else {
            $('#boton').attr('disabled', 'disabled');
            $('#guarda').removeAttr('disabled');
        }
    });
}

function initDefaultValidationOptions(classID) {
    jformValidator = $(classID).validate({
        ignore: ".ignore",
        onclick: false,
        errorPlacement: function(error, element) {
            error.appendTo(element.parents("tr").find(".status"));
        }
    });
}

function executeValidation() {
    //lo siguiente sirve para inicializar el jform, se puede hacer override de la inicializacion, sobreescribiendo la funcion initCustomAjaxValidationOptions()
    if ($(jformAjaxClassID).html() == null && $(jformHtmlClassID).html() == null) return;

    if ($(jformAjaxClassID).html() != null) {
        if (typeof initCustomAjaxValidationOptions == "function") {
            initCustomAjaxValidationOptions();
        } else {
            initDefaultValidationOptions(jformAjaxClassID);
        }
    }

    if ($(jformHtmlClassID).html() != null) {
        if (typeof initCustomHtmlValidationOptions == "function") {
            initCustomHtmlValidationOptions();
        } else {
            initDefaultValidationOptions(jformHtmlClassID);
        }
    }

    var rutInput = $("input[alt~='rut']");
    var dvInput = $("input[alt=dv]");
    var emailInput = $("input[alt=email]");
    var requiredInput = $("[alt~='required']");
    var passwordInput = $("input[alt='password']");
    var passwordAgainInput = $("input[alt='passwordAgain']");
    var anioInput = $("input[alt='anio']");
    var patenteInput = $("input[alt='patente']");
    var pinInput = $("input[alt='pin']");
    var claveInput = $("input[alt='clave']");
    addCustomValidationMethods();

    //Aqui es donde se define las reglas
    //alert(rutInput.val());
    if (pinInput.val() != undefined) {
        pinInput.rules("add", {
            required: true,
            messages: {
                required: error_required_msg
            }
        });
    }

    if (claveInput.val() != undefined) {
        claveInput.rules("add", {
            required: true,
            messages: {
                required: error_required_msg
            }
        });
    }

    if (rutInput.val() != undefined) {
        rutInput.rules("add", {
            minlength: 6,
            required: true,
            messages: {
                minlength: error_minlength_rut_msg,
                required: error_required_msg
            }
        });
    }

    if (dvInput.val() != undefined) {
        dvInput.rules("add", {
            dv: true,
            required: true,
            messages: {
                dv: error_dv_msg,
                required: error_dv_msg
            }
        });
    }

    if (emailInput.val() != undefined) {
        emailInput.rules("add", {
            email: true,
            messages: {
                email: error_email_msg
            }
        });
    }

    if (requiredInput.val() != undefined) {
        requiredInput.each(function(index) {

            $(this).rules("add", {
                required: true,
                messages: {
                    required: error_required_msg
                }
            });
        })
    }

    if (passwordInput.val() != undefined) {
        passwordInput.rules("add", {
            required: true,
            minlength: password_minLength,
            messages: {
                minlength: jQuery.validator.format(error_minlength_msg, password_minLength),
                required: error_required_msg
            }
        });
    }

    if (passwordAgainInput.val() != undefined) {
        passwordAgainInput.rules("add", {
            equalTo: passwordInput,
            messages: {
                equalTo: error_equalTo_password_msg
            }
        });
    }

    if (anioInput.val() != undefined) {
        var anioActualMasDos = new Date().getFullYear() + 2;
        anioInput.rules("add", {
            required: true,
            min: 1900,
            max: anioActualMasDos,
            messages: {
                required: error_required_msg,
                min: jQuery.validator.format(error_min_msg, 1900),
                max: jQuery.validator.format(error_max_msg, anioActualMasDos)
            }
        });
    }

    if (patenteInput.val() != undefined) {
        patenteInput.rules("add", {
            regex: "[a-zA-Z]{2}[0-9]{4}|[bcdfghjklprstvwxyzBCDFGHJKLPRSTVWXYZ]{4}[0-9]{2}|[a-zA-Z]{3}[0-9]{3}|[a-zA-Z]{2}0[0-9]{3}",
            required: false,
            messages: {
                regex: error_patente_msg,
                required: error_required_msg
            }
        })
    }
    // se puede agregar nuevas reglas customizadas en otros archivos de .js, ver ejemplo en ventaOnlineValidationDirectoScript.js
    if (typeof validationRulesExtension == "function") {
        validationRulesExtension();
    }

    //AGREGAR NUEVAS REGLAS JUSTO ARRIBA  
}
// las siguientes funciones son reglas customizadas
function addCustomValidationMethods() {
    $.validator.addMethod("dv", function(value, element) {
        return this.optional(element) || validarRut(value);
    }, error_dv_msg);

    $.validator.addMethod(
        "regex",
        function(value, element, regexp) {
            return this.optional(element) || new RegExp(regexp).test(value);
        },
        ""
    );

    function validarRut(value) {
        if ($("input[alt~='rut']").val() != undefined) {
            return digitoVerificadorValido($("input[alt~='rut']").val(), value);
        }
    }
}

function digitoVerificadorValido(rut, dv) {
    return dv.toString().toUpperCase() == $.Rut.getDigito(rut).toString().toUpperCase();
}
// esta funcion sirve para mantener las validaciones en el popup cuando existe validaciones en el servidor
function check_popup_client_side_validation() {
    return $(jformAjaxClassID).valid();
}





