﻿﻿/*
RICARDO JOSÉ ALVES DA ROCHA
rocha.ricardo@hotmail.com
2009
*/

(function($) {

    $.fn.Validacao = function(TipoDado) {
        var f = false;
        var RE_LetrasENumeros = new Array(2)
        RE_LetrasENumeros[0] = /[0-9 a-zA-ZçÇáÁéÉêÊíÍóÓÔôúÚõÕãÃÂâ]/g;
        RE_LetrasENumeros[1] = /[0-9 a-zA-ZçÇáÁéÉêÊíÍóÓÔôúÚõÕãÃÂâ]/g;

        var RE_TextoMultilinha = new Array(2)
        RE_TextoMultilinha[0] = /[0-9 a-zçáéêíóÔúõãâ.,;:!?´`“”’¨"'*\-+@#$%&*|(){}<>\[\]\\\/]/gi;
        RE_TextoMultilinha[1] = /[0-9 a-zçáéêíóÔúõãâ.,;:!?´`“”’¨"'*\-+@#$%&*|(){}<>\[\]\\\/]/gi;

        var RE_NumeroTelefone = new Array(2)
        RE_NumeroTelefone[0] = /((^\d*)$)|((^\d*)-(\d*)$)/;
        RE_NumeroTelefone[1] = /[0-9\-]/g;

        var RE_Currency = new Array(2)
        RE_Currency[0] = /^-?(((\d){0,15}$)|((\d){1,15}(,(\d){1,2}$)))/;
        RE_Currency[1] = /[0-9,-]/g;

        var RE_CurrencyPos = new Array(2)
        RE_CurrencyPos[0] = /^((\d){0,15}$)|((\d){1,15}(,(\d){1,2}$))/;
        RE_CurrencyPos[1] = /[0-9,]/g;

        var RE_CurrencyPos0000 = new Array(2)
        RE_CurrencyPos0000[0] = /^((\d){0,15}$)|((\d){1,15}(,(\d){1,4}$))/;
        RE_CurrencyPos0000[1] = /[0-9,]/g;

        var RE_EMail = new Array(2)
        RE_EMail[0] = /^(([^<>;()[\]\\.,;:@"]+(\.[^<>()[\]\\.,;:@"]+)*)|(".+"))@((([a-z]([-a-z0-9]*[a-z0-9])?)|(#[0-9]+)|(\[((([01]?[0-9]{0,2})|(2(([0-4][0-9])|(5[0-5]))))\.){3}(([01]?[0-9]{0,2})|(2(([0-4][0-9])|(5[0-5]))))\]))\.)*(([a-z]([-a-z0-9]*[a-z0-9])?)|(#[0-9]+)|(\[((([01]?[0-9]{0,2})|(2(([0-4][0-9])|(5[0-5]))))\.){3}(([01]?[0-9]{0,2})|(2(([0-4][0-9])|(5[0-5]))))\]))$/ //conforme RFC 821;
        RE_EMail[1] = /[0-9a-zA-Z_\-\@\.]/g;

        var RE_Data = new Array(2)
        RE_Data[0] = /\b(0?[1-9]|[12][0-9]|3[01])[\/](1[0-2]|0?[1-9])[\/]((20)[0-9]{2}|(19)[0-9]{2})/;
        RE_Data[1] = /([0-9])|(\/)/;

        var RE_Hora = new Array(2)
        RE_Hora[0] = /\b([0-1][0-9]|2[0-3])[\:]([0-5][0-9])/;
        RE_Hora[1] = /([0-9])|(\:)/;

        var RE_DataHora = new Array(2)
        RE_DataHora[0] = /\b(0?[1-9]|[12][0-9]|3[01])[\/](1[0-2]|0?[1-9])[\/]((20)[0-9]{2}|(19)[0-9]{2}) ([0-1][0-9]|2[0-3])[\:]([0-5][0-9])/;
        RE_DataHora[1] = /([0-9])|(\/) :/;

        var RE_LetrasEEspeciais = new Array(2)
        RE_LetrasEEspeciais[0] = /[0-9 a-zA-ZçÇáÁéÉêÊíÍóÓÔôúÚõÕãÃÂâ\,\'\/\-\#\&\?\=\+]/g;
        RE_LetrasEEspeciais[1] = /[0-9 a-zA-ZçÇáÁéÉêÊíÍóÓÔôúÚõÕãÃÂâ\,\'\/\-\#\&\?\=\+]/g;

        var RE_Nomes = new Array(2)
        RE_Nomes[0] = /[0-9 a-zA-ZçÇáÁéÉêÊíÍóÓÔôúÚõÕãÃÂâ\'\&\,\-]/g;
        RE_Nomes[1] = /[0-9 a-zA-ZçÇáÁéÉêÊíÍóÓÔôúÚõÕãÃÂâ\'\&\,\-]/g;

        var RE_Letras = new Array(2)
        RE_Letras[0] = /[a-zA-ZçÇáÁéÉêÊíÍóÓÔôúÚõÕãÃÂâ]/g;
        RE_Letras[1] = /[a-zA-ZçÇáÁéÉêÊíÍóÓÔôúÚõÕãÃÂâ]/g;

        var RE_Apelido = new Array(2)
        RE_Apelido[0] = /[0-9a-z_\-\@\.]/g;
        RE_Apelido[1] = /[0-9a-z_\-\@\.]/g;

        var RE_Numeros = new Array(2)
        RE_Numeros[0] = /((^\d*)$)/;
        RE_Numeros[1] = /[0-9]/g
        
        var RE_NumerosPos = new Array(2)
        RE_NumerosPos[0] = /((^\d*,-)$)/;
        RE_NumerosPos[1] = /[0-9.,-]/g

        switch (TipoDado) {
            case 'Numero':
                break;
            case 'NumeroPos':
                break;
            case 'Texto':
                break;
            case 'Data':
                this.attr("maxlength", 10);
                break;
            case 'DataHora':
                this.attr("maxlength", 16);
                this.attr("readonly", "readonly");
                this.attr("disabled", "disabled");
                break;
            case 'Email':
                break;
            case 'Apelido':
                this.attr("maxlength", 15);
                break;
            case 'Moeda':
                break;
            case 'Moeda0000':
                break;
        }

        this.keypress(function(e) {
            var conteudo = String.fromCharCode(getKeyCode(e));
            var re;

            if (!TeclaValida(getKeyCode(e))) {
                return false;
            }

            switch (TipoDado) {
                case 'Numero':
                    re = RE_Numeros[1];
                    break;
                case 'NumeroPos':
                    re = RE_NumerosPos[1];
                    break;
                case 'Texto':
                    re = RE_Letras[1];
                    break;
                case 'Data':
                    re = RE_Data[1];
                    break;
                case 'DataHora':
                    re = RE_DataHora[1];
                    break;
                case 'Email':
                    re = RE_EMail[1];
                    break;
                case 'Apelido':
                    re = RE_Apelido[1];
                    break;
                case 'Moeda':
                    re = RE_CurrencyPos[1];
                    break;
                case 'Moeda0000':
                    re = RE_CurrencyPos0000[1];
                    break;
            }

            if (conteudo.match(re) === null) {
                return false;
            }
        });



        this.blur(function(e) {
            var conteudo = this.value;
            var re;

            if (conteudo === null || conteudo === "" || typeof (conteudo) === 'undefined') {
                return false;
            }

            switch (TipoDado) {
                case 'Numero':
                    re = RE_Numeros[0];
                    break;
                case 'NumeroPos':
                    re = RE_NumerosPos[0];
                    break;
                case 'Texto':
                    re = RE_Letras[0];
                    break;
                case 'Data':
                    re = RE_Data[0];
                    break;
                case 'DataHora':
                    re = RE_DataHora[0];
                    break;
                case 'Email':
                    re = RE_EMail[0];
                    break;
                case 'Apelido':
                    re = RE_Apelido[0];
                    break;
                case 'Moeda':
                    re = RE_CurrencyPos[0];
                    break;
                case 'Moeda00':
                    re = RE_CurrencyPos0000[0];
                    break;
            }

            if (conteudo.match(re) === null) {
                RH.Modal.Aviso("Formato inválido.");

                return false;
            }
        });
    }
})(jQuery);



function getKeyCode(evt) {
    var code;
    if (typeof (evt.keyCode) == 'number')
        code = evt.keyCode;
    else if (typeof (evt.which) == 'number')
        code = evt.which;
    else if (typeof (evt.charCode) == 'number')
        code = evt.charCode;
    else
        return 0;

    return code;
};

function TeclaValida(tecla) {
    var teclas = "8,9,16,27,35,36,37,38,39,40,45,46,";
    if (teclas.indexOf(tecla.toString()) === -1) {
        return true;
    }
    else {
        return false;
    }

    /*
    tecla == 8 //backspace
    tecla == 9 //TAB
    tecla == 16 //Shif TAB
    tecla == 27 //ESC
    tecla == 35 //home
    tecla == 36 //end
    tecla == 37 //esquerda
    tecla == 38 //cima
    tecla == 39 //direita
    tecla == 40)//baixo
    tecla == 45 //insert
    tecla == 46 //delete
    */
};
