/**
 * jQuery Validation Plugin 1.8.0
 *
 * http://bassistance.de/jquery-plugins/jquery-plugin-validation/
 * http://docs.jquery.com/Plugins/Validation
 *
 * Copyright (c) 2006 - 2011 JÃ¶rn Zaefferer
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 */
(function(){
    function a(b){
        return b.replace(/<.[^<>]*?>/g," ").replace(/&nbsp;|&#160;/gi," ").replace(/[0-9.(),;:!?%#$'"_+=\/-]*/g,"")
    }
    jQuery.validator.addMethod("maxWords",function(b,c,d){
        return this.optional(c)||a(b).match(/\b\w+\b/g).length<d
    },jQuery.validator.format("Por favor, insira {0} palavras ou menos."));
    jQuery.validator.addMethod("minWords",function(b,c,d){
        return this.optional(c)||a(b).match(/\b\w+\b/g).length>=d
    },jQuery.validator.format("Por favor, insira pelo menos {0} palavras."));
    jQuery.validator.addMethod("rangeWords",
        function(b,c,d){
            return this.optional(c)||a(b).match(/\b\w+\b/g).length>=d[0]&&b.match(/bw+b/g).length<d[1]
        },jQuery.validator.format("Por favor, insira entre {0} e {1} palavras."))
})();
jQuery.validator.addMethod("letterswithbasicpunc",function(a,b){
    return this.optional(b)||/^[a-z-.,()'\"\s]+$/i.test(a)},"Letras ou apenas a pontuação por favor.");
        jQuery.validator.addMethod("alphanumeric",function(a,b){return this.optional(b)||/^\w+$/i.test(a)},"Letras, números, espaços e sublinhados só por favor.");
    jQuery.validator.addMethod("lettersonly",function(a,b){
        return this.optional(b)||/^[a-z]+$/i.test(a)
    },"Somente letras por favor.");
    jQuery.validator.addMethod("nowhitespace",function(a,b){
        return this.optional(b)||/^\S+$/i.test(a)
    },"Nenhum espaço em branco por favor.");
    jQuery.validator.addMethod("ziprange",function(a,b){
        return this.optional(b)||/^90[2-5]\d\{2}-\d{4}$/.test(a)
    },"Seu código postal deve ser na faixa de xxxx 902xx para 905-xx-xxxx.");
    jQuery.validator.addMethod("integer",function(a,b){
        return this.optional(b)||/^-?\d+$/.test(a)
    },"Um número positivo ou negativo não-decimais, por favor.");
    jQuery.validator.addMethod("vinUS",function(a){
        if(a.length!=17)return false;
        var b,c,d,f,e,g=["A","B","C","D","E","F","G","H","J","K","L","M","N","P","R","S","T","U","V","W","X","Y","Z"],i=[1,2,3,4,5,6,7,8,1,2,3,4,5,7,9,2,3,4,5,6,7,8,9],j=[8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2],h=0;
        for(b=0;b<17;b++){
            f=j[b];
            d=a.slice(b,b+1);
            if(b==8)e=d;
            if(isNaN(d))for(c=0;c<g.length;c++){
                if(d.toUpperCase()===g[c]){
                    d=i[c];
                    d*=f;
                    if(isNaN(e)&&c==8)e=g[c];
                    break
                }
            }else d*=f;
            h+=d
        }
        a=h%11;
        if(a==10)a="X";
        if(a==e)return true;
        return false
    },
    "O número de identificação especificada do veículo (VIN) é inválido.");
    jQuery.validator.addMethod("dateITA",function(a,b){
        var c=false;
        if(/^\d{1,2}\/\d{1,2}\/\d{4}$/.test(a)){
            var d=a.split("/");
            c=parseInt(d[0],10);
            var f=parseInt(d[1],10);
            d=parseInt(d[2],10);
            var e=new Date(d,f-1,c);
            c=e.getFullYear()==d&&e.getMonth()==f-1&&e.getDate()==c?true:false
        }else c=false;
        return this.optional(b)||c
    },"Por favor insira uma data válida.");
    jQuery.validator.addMethod("dateNL",function(a,b){
        return this.optional(b)||/^\d\d?[\.\/-]\d\d?[\.\/-]\d\d\d?\d?$/.test(a)
    },"Vul hier een geldige datum in.");
    jQuery.validator.addMethod("time",function(a,b){
        return this.optional(b)||/^([01][0-9])|(2[0123]):([0-5])([0-9])$/.test(a)
    },"Por favor, informe um horário válido. (00:00-23:59)");
    jQuery.validator.addMethod("phoneUS",function(a,b){
        a=a.replace(/\s+/g,"");
        return this.optional(b)||a.length>9&&a.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/)
    },"Por favor, especifique um número de telefone válido.");
    jQuery.validator.addMethod("phoneUK",function(a,b){
        return this.optional(b)||a.length>9&&a.match(/^(\(?(0|\+44)[1-9]{1}\d{1,4}?\)?\s?\d{3,4}\s?\d{3,4})$/)
    },"Por favor, especifique um número de telefone válido.");
    jQuery.validator.addMethod("mobileUK",function(a,b){
        return this.optional(b)||a.length>9&&a.match(/^((0|\+44)7(5|6|7|8|9){1}\d{2}\s?\d{6})$/)
    },"Por favor especifique um número de celular válido.");
    jQuery.validator.addMethod("strippedminlength",function(a,b,c){
        return jQuery(a).text().length>=c
    },jQuery.validator.format("Por favor, insira pelo menos {0} caracteres."));
    jQuery.validator.addMethod("email2",function(a,b){
        return this.optional(b)||/^((([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(a)
    },jQuery.validator.messages.email);
    jQuery.validator.addMethod("url2",function(a,b){
        return this.optional(b)||/^(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(a)},
    jQuery.validator.messages.url);
    jQuery.validator.addMethod("creditcardtypes",function(a,b,c){
        if(/[^0-9-]+/.test(a))return false;
        a=a.replace(/\D/g,"");
        b=0;
        if(c.mastercard)b|=1;
        if(c.visa)b|=2;
        if(c.amex)b|=4;
        if(c.dinersclub)b|=8;
        if(c.enroute)b|=16;
        if(c.discover)b|=32;
        if(c.jcb)b|=64;
        if(c.unknown)b|=128;
        if(c.all)b=255;
        if(b&1&&/^(51|52|53|54|55)/.test(a))return a.length==16;
        if(b&2&&/^(4)/.test(a))return a.length==16;
        if(b&4&&/^(34|37)/.test(a))return a.length==15;
        if(b&8&&/^(300|301|302|303|304|305|36|38)/.test(a))return a.length==14;
        if(b&
            16&&/^(2014|2149)/.test(a))return a.length==15;
        if(b&32&&/^(6011)/.test(a))return a.length==16;
        if(b&64&&/^(3)/.test(a))return a.length==16;
        if(b&64&&/^(2131|1800)/.test(a))return a.length==15;
        if(b&128)return true;
        return false
    },"Por favor insira um número válido de cartão de crédito.");
    jQuery.validator.addMethod("ipv4",function(a,b){
        return this.optional(b)||/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/i.test(a)
    },"Por favor insira um IP válido.");
    jQuery.validator.addMethod("ipv6",function(a,b){
        return this.optional(b)||/^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test(a)
    },"Por favor insira um IP válido.");
    jQuery.validator.addMethod("dateBR", function(value, element) {
        if(value.length!=10) return false;
        var data 		= value;
        var dia 		= data.substr(0,2);
        var barra1		= data.substr(2,1);
        var mes 		= data.substr(3,2);
        var barra2		= data.substr(5,1);
        var ano 		= data.substr(6,4);
        if(data.length!=10||barra1!="/"||barra2!="/"||isNaN(dia)||isNaN(mes)||isNaN(ano)||dia>31||mes>12)return false;
        if((mes==4||mes==6||mes==9||mes==11)&&dia==31)return false;
        if(mes==2 && (dia>29||(dia==29&&ano%4!=0)))return false;
        if(ano < 1900)return false;
        return true;
    }, "Por favor insira uma data válida.");
    jQuery.validator.addMethod("dateTimeBR", function(value, element) {
        if(value.length!=16) return false;
        if(value.substr(10,1)!=' ') return false;
        var arrOpcoes = value.split(' ');
        if(arrOpcoes.length!=2) return false;
        var data 		= arrOpcoes[0];
        var dia 		= data.substr(0,2);
        var barra1		= data.substr(2,1);
        var mes 		= data.substr(3,2);
        var barra2		= data.substr(5,1);
        var ano 		= data.substr(6,4);
        if(data.length!=10||barra1!="/"||barra2!="/"||isNaN(dia)||isNaN(mes)||isNaN(ano)||dia>31||mes>12)return false;
        if ((mes==4||mes==6||mes==9||mes==11)&&dia==31)return false;
        if (mes==2 && (dia>29||(dia==29&&ano%4!=0)))return false;
        var horario 	= arrOpcoes[1];
        var	hora 		= horario.substr(0,2);
        var doispontos 	= horario.substr(2,1);
        var minuto 		= horario.substr(3,2);
        if(horario.length!=5||isNaN(hora)||isNaN(minuto)||hora>23||minuto>59||doispontos!=":")return false;
        return true;
    }, "Por favor insira uma data-horario válido.");
    jQuery.validator.addMethod("CPF", function(value, element) {
        value = value.replace('.','');
        value = value.replace('.','');
        cpf = value.replace('-','');
        while(cpf.length < 11) cpf = "0"+ cpf;
        var expReg = /^0+$|^1+$|^2+$|^3+$|^4+$|^5+$|^6+$|^7+$|^8+$|^9+$/;
        var a = [];
        var b = new Number;
        var c = 11;
        for (i=0; i<11; i++){
            a[i] = cpf.charAt(i);
            if (i < 9) b += (a[i] * --c);
        }
        if ((x = b % 11) < 2) {
            a[9] = 0
        } else {
            a[9] = 11-x
        }
        b = 0;
        c = 11;
        for (y=0; y<10; y++) b += (a[y] * c--);
        if ((x = b % 11) < 2) {
            a[10] = 0;
        } else {
            a[10] = 11-x;
        }
        if ((cpf.charAt(9) != a[9]) || (cpf.charAt(10) != a[10]) || cpf.match(expReg)) return false;
        return true;
    }, "Por favor insira um CPF válido."); 
    jQuery.validator.addMethod("maiorigualque", function(value, element,target) {
        return parseInt(jQuery(target).val()) <= parseInt(value);
    }, "Por favor insira um número maior.");
    jQuery.validator.addMethod("datamaiorigualque", function(value, element,target) {
        var re = /^\d{1,2}\/\d{1,2}\/\d{4}$/;
        var anotherValue = jQuery(target).val();
        if( re.test(value) && re.test(anotherValue) ){
            var adata = value.split('/');
            var gg = parseInt(adata[0],10);
            var mm = parseInt(adata[1],10);
            var aaaa = parseInt(adata[2],10);
            var xdata = new Date(aaaa,mm-1,gg);

            var adata = anotherValue.split('/');
            var gg = parseInt(adata[0],10);
            var mm = parseInt(adata[1],10);
            var aaaa = parseInt(adata[2],10);
            var ydata = new Date(aaaa,mm-1,gg);

            if ( ydata <= xdata )
                check = true;
            else
                check = false;
        } else
            check = false;
        return this.optional(element) || check;
    }, "Por favor insira uma data maior.");
    jQuery.validator.addMethod("CNPJ", function(value, element) {
        cnpj = value.replace(/\D/g,"");
        while(cnpj.length < 14) cnpj = "0"+ cnpj;
        var expReg = /^0+$|^1+$|^2+$|^3+$|^4+$|^5+$|^6+$|^7+$|^8+$|^9+$/;
        var a = [];
        var b = new Number;
        var c = [6,5,4,3,2,9,8,7,6,5,4,3,2];

        for (i=0; i<12; i++){
            a[i] = cnpj.charAt(i);
            b += a[i] * c[i+1];
        }

        if ((x = b % 11) < 2) {
            a[12] = 0
        } else {
            a[12] = 11-x
        }
        b = 0;
        for (y=0; y<13; y++) {
            b += (a[y] * c[y]);
        }

        if ((x = b % 11) < 2) {
            a[13] = 0;
        } else {
            a[13] = 11-x;
        }
        if ((cnpj.charAt(12) != a[12]) || (cnpj.charAt(13) != a[13]) || cnpj.match(expReg) ) return false;
        return true;
    }, "Por favor insira um CNPJ válido."); // Mensagem padrÃ£o
    jQuery.validator.addMethod("defaultvalue", function(value, element) {
        if(value == element.getAttribute("defaultvalue") || value == "")
            return false;
        else
            return true;
    }, "EstÃ© campo Ã© obrigatÃ³rio.");


