﻿//Padrões
$.validator.setDefaults({
    onfocusout: false,
    onkeyup: false,
    showErrors: function (errorMap, errorList) {

        if (errorList.length > 0) {

            var s = '';
            for (i = 0; i < errorList.length; i++) {
                if (s.indexOf(errorList[i].message) == -1) {
                    s += errorList[i].message + '<br />';
                }
            }

            $('#divMsg').html('<div class="error">' + s + '</div>');

            $('html').animate({ scrollTop: 200 }, 'slow');
        }
    }
});

//Mensagens
jQuery.extend(jQuery.validator.messages, { 
    required: "0001 - Os campos marcados com asterisco ( * ) são obrigatórios e devem ser preenchidos.",
    email: "0006 - E-mail inválido.",
    url: "0011 - URL inválida."
}); 

//Requerido
jQuery.validator.addMethod('requerido', function (value) {
    return value.trim() != "";
}, '0001 - Os campos marcados com asterisco ( * ) são obrigatórios e devem ser preenchidos.');

//Data
jQuery.validator.addMethod('data', function (value) {
    var reDate = /^((0?[1-9]|[12]\d)\/(0?[1-9]|1[0-2])|30\/(0?[13-9]|1[0-2])|31\/(0?[13578]|1[02]))\/(19|20)?\d{2}$/;
    if (reDate.test(value)) {
        var dia = value.substr(0, 2);
        var mes = value.substr(3, 2);
        var ano = value.substr(6, 4);
        if (mes == 2 && dia == 29 && ano % 4 != 0) return false;
        return true;
    }
    return false;
}, '0002 - Data inválida.');

//Hora
jQuery.validator.addMethod('hora', function (value) {
    var reHora = /^([0-1]\d|2[0-3]):[0-5]\d$/;
    return reHora.test(value);
}, '0003 - Hora inválida.');

//Número inteiro
jQuery.validator.addMethod('inteiro', function (value) {
    var reDigits = /^\d+$/;
    return reDigits.test(value);
}, '0004 - Número inteiro inválido.');

//Número decimal
jQuery.validator.addMethod('decimal', function (value) {
    var reDecimal = /^[+-]?((\d+|\d{1,3}(\.\d{3})+)(\,\d*)?|\,\d+)$/;
    return reDecimal.test(value);
}, '0005 - Número decimal inválido.');

//Email
jQuery.validator.addMethod('e_mail', function (value) {
    var reEmail = /^[\w!#$%&'*+\/=?^`{|}~-]+(\.[\w!#$%&'*+\/=?^`{|}~-]+)*@(([\w-]+\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/;
    return reEmail.test(value);
}, '0006 - E-mail inválido.');

//Telefone
jQuery.validator.addMethod('fone', function (value) {
    var reTelefone = /^\(\d{2}\)\ \d{4}\-\d{4}$/;

    if (value.trim() != "")
        return reTelefone.test(value);
    else
        return true;

}, '0007 - Telefone inválido.');

//CPF
jQuery.validator.addMethod("cpf", function (value) {
    var s = value;
    s = s.replaceAll(".", "");
    s = s.replaceAll("-", "");

    if (s.length != 11 || s == "00000000000" || s == "11111111111" || s == "22222222222" || s == "33333333333" || s == "44444444444" || s == "55555555555" || s == "66666666666" || s == "77777777777" || s == "88888888888" || s == "99999999999") return false;

    var i;
    var c = s.substr(0, 9);
    var dv = s.substr(9, 2);
    var d1 = 0;

    for (i = 0; i < 9; i++) {
        d1 += c.charAt(i) * (10 - i);
    }

    if (d1 == 0) return false;
    d1 = 11 - (d1 % 11);
    if (d1 > 9) d1 = 0;
    if (dv.charAt(0) != d1) return false;
    d1 *= 2;

    for (i = 0; i < 9; i++) {
        d1 += c.charAt(i) * (11 - i);
    }

    d1 = 11 - (d1 % 11);
    if (d1 > 9) d1 = 0;
    if (dv.charAt(1) != d1) return false;
    return true;
}, '0010 - CPF inválido.');

//CNPJ
jQuery.validator.addMethod("cnpj", function (cnpj, element) {
    var numeros, digitos, soma, i, resultado, pos, tamanho, digitos_iguais;
    
    cnpj = cnpj.replaceAll(".", "");
    cnpj = cnpj.replaceAll("/", "");
    cnpj = cnpj.replaceAll("-", "");    
    digitos_iguais = 1;
    if (cnpj.length < 14 && cnpj.length < 15) {
        return false;
    }

    for (i = 0; i < cnpj.length - 1; i++) {
        if (cnpj.charAt(i) != cnpj.charAt(i + 1)) {
            digitos_iguais = 0;
            break;
        }
    }

    if (!digitos_iguais) {
        tamanho = cnpj.length - 2
        numeros = cnpj.substring(0, tamanho);
        digitos = cnpj.substring(tamanho);
        soma = 0;
        pos = tamanho - 7;

        for (i = tamanho; i >= 1; i--) {
            soma += numeros.charAt(tamanho - i) * pos--;
            if (pos < 2) {
                pos = 9;
            }
        }
        resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
        if (resultado != digitos.charAt(0)) {
            return false;
        }
        tamanho = tamanho + 1;
        numeros = cnpj.substring(0, tamanho);
        soma = 0;
        pos = tamanho - 7;
        for (i = tamanho; i >= 1; i--) {
            soma += numeros.charAt(tamanho - i) * pos--;
            if (pos < 2) {
                pos = 9;
            }
        }
        resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
        if (resultado != digitos.charAt(1)) {
            return false;
        }
        return true;
    } else {
        return false;
    }
}, "0009 - CNPJ inválido.");
