var valida = new Object();
valida = {
    regEmail: [],
    EmailErro: "E-mail em formato inválido",
    regTime: [],
    TimeErro: "Este não é um formato de Tempo válido",
    regData: [],
    DataErro: "Este não é um formato de Data válido",
    regMoeda: [],
    MoedaErro: "Formato de Moeda Invalido",
    regDigito: [],
    DigitoErro: "Este não é um formato de Digito Valido",
    regDecimal: [],
    DecimalErro: "É necessario um formado decimal, EX: 0.00 ",
    regNumero: [],
    NumeroErro: "Apenas é aceito numeros!",
    CpfErro: "CPF Invalido",
    CnpjErro: "CNPJ invalido",
    CepErro: "Formato CEP Errado"
}
valida.regEmail[1] = /^[\w!#$%&'*+\/=?^`{|}~-]+(\.[\w!#$%&'*+\/=?^`{|}~-]+)*@(([\w-]+\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/;
valida.regEmail[2] = /^[\w-]+(\.[\w-]+)*@(([\w-]{2,63}\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/;
valida.regEmail[3] = /^[\w-]+(\.[\w-]+)*@(([A-Za-z\d][A-Za-z\d-]{0,61}[A-Za-z\d]\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/;
valida.regTime[1] = /^\d{2}:\d{2}$/;
valida.regTime[2] = /^([0-1]\d|2[0-3]):[0-5]\d$/;
valida.regTime[3] = /^(0[1-9]|1[0-2]):[0-5]\d$/;
valida.regTime[4] = /^\d+:[0-5]\d:[0-5]\d$/;
valida.regTime[5] = /^\d+:[0-5]\d:[0-5]\.\d{3}\d$/;
valida.regData[1] = /^\d{1,2}\/\d{1,2}\/\d{1,4}$/;
valida.regData[2] = /^[0-3]?\d\/[01]?\d\/(\d{2}|\d{4})$/;
valida.regData[3] = /^(0?[1-9]|[12]\d|3[01])\/(0?[1-9]|1[0-2])\/(19|20)?\d{2}$/;
valida.regData[4] = /^((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}$/;
valida.regData[5] = /^((0[1-9]|[12]\d)\/(0[1-9]|1[0-2])|30\/(0[13-9]|1[0-2])|31\/(0[13578]|1[02]))\/\d{4}$/;
valida.regMoeda = /^\d{1,3}(\.\d{3})*\,\d{2}$/;
valida.regDigito = /^\d+$/;
valida.regDecimal['Pt'] = /^[+-]?((\d+|\d{1,3}(\.\d{3})+)(\,\d*)?|\,\d+)$/;
valida.regDecimal['En'] = /^[+-]?((\d+|\d{1,3}(\,\d{3})+)(\.\d*)?|\.\d+)$/;
valida.regNumero = /[~a-zA-Z_]/;
valida.regCep = /^[0-9]{5}-[0-9]{3}$/;
valida.Email = function (EmailString, Nivel) {
    return EmailString.trim().match(this.regEmail[Nivel]);
}
valida.Time = function (TimeString, Nivel) {
    return TimeString.trim().match(this.regTime[Nivel]);
}
valida.Data = function (DataString, Nivel) {
    return DataString.trim().match(this.regData[Nivel]);
}
valida.Decimal = function (DecimalString, Lingua) {
    return DecimalString.trim().match(this.regDecimal[Lingua]);
}
valida.Digito = function (DigitoString) {
    return DigitoString.trim().match(this.regDigito);
}
valida.Moeda = function (MoedaString) {
    return MoedaString.trim().match(this.regMoeda);
}
valida.Numero = function (NumeroString) {
    if (NumeroString == "") {
        return false;
    }
    return !NumeroString.trim().match(this.regNumero);
}
valida.CnpjCpf = function (Campo, tipo) {
    var val = Campo.value;
    var base = val.substring(0, val.length - 2);
    if (tipo == "CNPJ") {
        return isCnpj(val);
    } else {
        return isCpf(val);
    }
    return false;
}
valida.formatCpfCnpj = function (Campo, tipo) {
    if (tipo == "CPF") {
        Campo.value = formatCpfCnpj(Campo.value, true);
    } else {
        Campo.value = formatCpfCnpj(Campo.value, true, true);
    }
}
valida.CEP = function (CepString) {
    return CepString.match(valida.regCep);
}
valida.validaCpfServidor = function (CPF) {
    var temCpfNoServidor = chamadaRemota({
        url: "/script/ajax.php?cpf=" + CPF + "&action=CPF"
    }).replace(' ', '');
    if (temCpfNoServidor == 'true') {
        return false;
    } else {
        return true;
    }
}
valida.DataNascimento = function (DataNascimento) {
    reNasci = /(\d{2})(\d{2})(\d{4})$/;
    Data = unformatNumber(DataNascimento.value);
    DataNascimento.value = Data.lpad(8, '0').replace(reNasci, "$1/$2/$3");
}
valida.formatCEP = function (Campo) {
    Campo.value = Campo.value.replace(/(\d{5})$/, "$1-");
}
NUM_DIGITOS_CPF = 11;
NUM_DIGITOS_CNPJ = 14;
NUM_DGT_CNPJ_BASE = 8;
String.prototype.lpad = function (pSize, pCharPad) {
    var str = this;
    var dif = pSize - str.length;
    var ch = String(pCharPad).charAt(0);
    for (; dif > 0; dif--) str = ch + str;
    return (str);
}
String.prototype.trim = function () {
    return this.replace(/^\s*/, "").replace(/\s*$/, "");
}
function unformatNumber(pNum) {
    return String(pNum).replace(/\D/g, "").replace(/^0+/, "");
}
function formatCpfCnpj(pCpfCnpj, pUseSepar, pIsCnpj) {
    if (pIsCnpj == null) pIsCnpj = false;
    if (pUseSepar == null) pUseSepar = true;
    var maxDigitos = pIsCnpj ? NUM_DIGITOS_CNPJ : NUM_DIGITOS_CPF;
    var numero = unformatNumber(pCpfCnpj);
    numero = numero.lpad(maxDigitos, '0');
    if (!pUseSepar) return numero;
    if (pIsCnpj) {
        reCnpj = /(\d{2})(\d{3})(\d{3})(\d{4})(\d{2})$/;
        numero = numero.replace(reCnpj, "$1.$2.$3/$4-$5");
    }
    else {
        reCpf = /(\d{3})(\d{3})(\d{3})(\d{2})$/;
        numero = numero.replace(reCpf, "$1.$2.$3-$4");
    }
    return numero;
}
function dvCpfCnpj(pEfetivo, pIsCnpj) {
    if (pIsCnpj == null) pIsCnpj = false;
    var i, j, k, soma, dv;
    var cicloPeso = pIsCnpj ? NUM_DGT_CNPJ_BASE : NUM_DIGITOS_CPF;
    var maxDigitos = pIsCnpj ? NUM_DIGITOS_CNPJ : NUM_DIGITOS_CPF;
    var calculado = formatCpfCnpj(pEfetivo, false, pIsCnpj);
    calculado = calculado.substring(2, maxDigitos);
    var result = "";
    for (j = 1; j <= 2; j++) {
        k = 2;
        soma = 0;
        for (i = calculado.length - 1; i >= 0; i--) {
            soma += (calculado.charAt(i) - '0') * k;
            k = (k - 1) % cicloPeso + 2;
        }
        dv = 11 - soma % 11;
        if (dv > 9) dv = 0;
        calculado += dv;
        result += dv
    }
    return result;
}
function isCpf(pCpf) {
    var numero = formatCpfCnpj(pCpf, false, false);
    var base = numero.substring(0, numero.length - 2);
    var digitos = dvCpfCnpj(base, false);
    var algUnico, i;
    if (numero != base + digitos) return false;
    algUnico = true;
    for (i = 1; algUnico && i < NUM_DIGITOS_CPF; i++) {
        algUnico = (numero.charAt(i - 1) == numero.charAt(i));
    }
    return (!algUnico);
}
function isCnpj(pCnpj) {
    var numero = formatCpfCnpj(pCnpj, false, true);
    var base = numero.substring(0, NUM_DGT_CNPJ_BASE);
    var ordem = numero.substring(NUM_DGT_CNPJ_BASE, 12);
    var digitos = dvCpfCnpj(base + ordem, true);
    var algUnico;
    if (numero != base + ordem + digitos) return false;
    algUnico = numero.charAt(0) != '0';
    for (i = 1; algUnico && i < NUM_DGT_CNPJ_BASE; i++) {
        algUnico = (numero.charAt(i - 1) == numero.charAt(i));
    }
    if (algUnico) return false;
    if (ordem == "0000") return false;
    return (base == "00000000" || parseInt(ordem, 10) <= 300 || base.substring(0, 3) != "000");
}
function isCpfCnpj(pCpfCnpj) {
    var numero = pCpfCnpj.replace(/\D/g, "");
    if (numero.length > NUM_DIGITOS_CPF) return isCnpj(pCpfCnpj)
    else return isCpf(pCpfCnpj);
}
function apenas_numero(evento) {
    var keypress = evento.keyCode ? evento.keyCode : evento.which ? evento.which : evento.charCode;
    if (keypress == 8 || keypress == 37 || keypress == 39 || keypress == 46) {
        return true;
    }
    if ((keypress > 47 && keypress < 58)) {
        return true;
    }
    return false;
}
function oCep() {
    this.endereco_id = "#endereco";
    this.numero_id = "#numero";
    this.estado_id = "#estado";
    this.bairro_id = "#bairro";
    this.cidade_id = "#cidade";
    this.init = function (init) {
        this.endereco_id = init.endereco;
        this.numero_id = init.numero;
        this.estado_id = init.estado;
        this.bairro_id = init.bairro;
        this.cidade_id = init.cidade;
        return this;
    };
    this.get = function (ID) {
        return document.getElementById(ID);
    };
    this.getOEndereco = function (Cep) {
        Cep = Cep.replace("-", "");
        thisObject = this;
        oReturn = new Object();
        $.getJSON("/script/ajax.php", {
            action: "CEP",
            cep: Cep

        },
        function (req) {
            oReturn = req;
        });
        return oReturn;
    };
    this.getEndereco = function (Cep) {
        Cep = Cep.replace("-", "");
        thisObject = this;
        $.getJSON("/script/ajax.php", {
            action: "CEP",
            cep: Cep
        },
        function (req) {
            $(thisObject.endereco_id).val(req.endereco);
            $(thisObject.numero_id).val(req.numero);
			
			$(thisObject.estado_id).val(req.estado);			
			
            $(thisObject.bairro_id).val(req.bairro);
            $(thisObject.cidade_id).val(req.cidade);
			
        });
        return this;
    }
}
var erro = 0;
var inputFocus = null;
var atributo = "valida";
var bloqueiaValidacao = "not";
var x = 0;
var naoMsg = 0;
var rm;
rm = [];
function ErroCampo(Campo, Erro) {
    erro = 1;
    Campo.setAttribute('class', 'formulario_erro');
    Campo.setAttribute('className', 'formulario_erro');
    if ($x2 == 0) {
        inputFocus = Campo;
        $x2++;
    }
    if (Erro != "") {
        d = document.createElement('div');
        d.setAttribute('class', 'msg_erro_flutuante');
        d.setAttribute('className', 'msg_erro_flutuante');
        d.appendChild(document.createTextNode(Erro));
        Campo.parentNode.appendChild(d);
        rm.push([Campo, d]);
        setTimeout(function () {
            for (x in rm) {
                if (rm[x]) {
                    rm[x][0].parentNode.removeChild(rm[x][1]);
                    rm[x] = false;
                }
            }
        },
        8000);
    }
    return true;
}
function checkForm(Formulario) {
    var inputs = Formulario;
    $x = 0;
    $x2 = 0;
    while ($x < inputs.length) {
        if (inputs[$x].getAttribute(atributo) != null && inputs[$x].getAttribute(atributo) != "" && (inputs[$x].getAttribute(bloqueiaValidacao) != 'not' || inputs[$x].value != '')) {
            Campo = inputs[$x];
            sCampo = inputs[$x].getAttribute(atributo);
            sCampo = sCampo.split(",");
            Nivel = sCampo[1];
            sCampo = sCampo[0];
            if (inputs[$x].disabled == true) {
                $x++;
                continue;
            }
            switch (sCampo) {
            case "moeda":
                if (!valida.Moeda(Campo.value)) {
                    ErroCampo(Campo, valida.MoedaErro);
                }
                break;
            case "tempo":
                if (!valida.Time(Campo.value, Nivel)) {
                    ErroCampo(Campo, valida.TimeErro);
                }
                break;
            case "data":
                if (!valida.Data(Campo.value, Nivel)) {
                    ErroCampo(Campo, valida.DataErro);
                }
                break;
            case "email":
                if (!valida.Email(Campo.value, Nivel)) {
                    ErroCampo(Campo, valida.EmailErro);
                }
                break;
            case "digito":
                if (!valida.Digito(Campo.value)) {
                    ErroCampo(Campo, valida.DigitoErro);
                }
                break;
            case "numero":
                if (!valida.Numero(Campo.value)) {
                    ErroCampo(Campo, valida.NumeroErro);
                }
                break;
            case "texto":
                if (Campo.value == "") {
                    ErroCampo(Campo, 'Campo obrigatório!');
                }
                break;
            case "cpf":
                if (!valida.CnpjCpf(Campo, "CPF")) {
                    ErroCampo(Campo, valida.CpfErro);
                }
                break;
            case "cnpj":
                if (!valida.CnpjCpf(Campo, "CNPJ")) {
                    ErroCampo(Campo, valida.CnpjErro);
                }
                break;
            case "cep":
                if (!valida.CEP(Campo.value)) {
                    ErroCampo(Campo, valida.CepErro);
                }
                break;
            }
        }
        $x++;
    }
    return;
}
function validaFormulario(Formulario) {
    checkForm(Formulario);
    if (erro == 1) {
        inputFocus.focus();
        erro = 0;
        return false;
    }
    return valida.onSubmit(Formulario);
}
function IniciaValidacao(Formulario) {
    var InputsForm = Formulario;
    $x = 0;
    $x2 = 0;
    while ($x < InputsForm.length) {
        if (InputsForm[$x].getAttribute(atributo) != null && InputsForm[$x].getAttribute(atributo) != "") {
            Campo = InputsForm[$x];
            sCampo = InputsForm[$x].getAttribute(atributo);
            sCampo = sCampo.split(",");
            Nivel = sCampo[1];
            sCampo = sCampo[0];
            if (InputsForm[$x].disabled == true) {
                $x++;
                continue;
            }
            switch (sCampo) {
            case 'cpf':
                Campo.onkeyup = function () {}
                break;
            case 'cnpj':
                Campo.onkeyup = function () {
                    valida.formatCpfCnpj(this, "CNPJ")
                }
                break;
            case 'data':
                Campo.onkeyup = function () {
                    valida.DataNascimento(this)
                }
                break;
            case 'numero':
                Campo.onkeyup = function () {
                    apenas_numero(this)
                }
                break;
            case 'moeda':
                Campo.onkeydown = function (e) {
                    campo = this;
                    tammax = 20;
                    decimal = 2;
                    var tecla = window.event ? event.keyCode : e.which;
                    vr = Limpar(campo.value, "0123456789");
                    tam = vr.length;
                    dec = decimal
                    if (tam < tammax && tecla != 8) {
                        tam = vr.length + 1;
                    }
                    if (tecla == 8) {
                        tam = tam - 1;
                    }
                    if (tecla == 8 || tecla >= 48 && tecla <= 57 || tecla >= 96 && tecla <= 105) {
                        if (tam <= dec) {
                            campo.value = vr;
                        }
                        if ((tam > dec) && (tam <= 5)) {
                            campo.value = vr.substr(0, tam - 2) + "," + vr.substr(tam - dec, tam);
                        }
                        if ((tam >= 6) && (tam <= 8)) {
                            campo.value = vr.substr(0, tam - 5) + "." + vr.substr(tam - 5, 3) + "," + vr.substr(tam - dec, tam);
                        }
                        if ((tam >= 9) && (tam <= 11)) {
                            campo.value = vr.substr(0, tam - 8) + "." + vr.substr(tam - 8, 3) + "." + vr.substr(tam - 5, 3) + "," + vr.substr(tam - dec, tam);
                        }
                        if ((tam >= 12) && (tam <= 14)) {
                            campo.value = vr.substr(0, tam - 11) + "." + vr.substr(tam - 11, 3) + "." + vr.substr(tam - 8, 3) + "." + vr.substr(tam - 5, 3) + "," + vr.substr(tam - dec, tam);
                        }
                        if ((tam >= 15) && (tam <= 17)) {
                            campo.value = vr.substr(0, tam - 14) + "." + vr.substr(tam - 14, 3) + "." + vr.substr(tam - 11, 3) + "." + vr.substr(tam - 8, 3) + "." + vr.substr(tam - 5, 3) + "," + vr.substr(tam - 2, tam);
                        }
                    }
                }
                break;
            }
        }
        $x++;
    }
}
function Limpar(valor, validos) {
    var result = "";
    var aux;
    for (var i = 0; i < valor.length; i++) {
        aux = validos.indexOf(valor.substring(i, i + 1));
        if (aux >= 0) {
            result += aux;
        }
    }
    return result;
}
valida.onSubmit = function (p) {
    return true;
}
var Onload = new Object();
Onload = {
    f: [],
    add: function (f) {
        this.f.push(f)
    }
}