﻿/*
-----------------------------------------------------------------------------
Nome da Função: somenteNumeros(eventoTecla)
Objetivo: Permitir apenas caracteres numéricos.
Parâmetros:
eventoTecla -> evento que representa a tecla digitada (event).
Chamada: onKeyPress="return somenteNumeros(event)"
-----------------------------------------------------------------------------
*/

function somenteNumeros(eventoTecla) {
    // codigo ASCII da tecla pressionada
    switch (buscaNavegador()) {
        case 'IE':
            codTecla = eventoTecla.keyCode;
            break;
        case 'FIREFOX':
            codTecla = eventoTecla.which;
            break;
    }

    if (!(((codTecla >= 48) && (codTecla <= 57)) || (codTecla == 8) || (codTecla == 9) || (codTecla == 13) || (codTecla == 0)))
        return false;
}

/*
-----------------------------------------------------------------------------
Nome da Função: buscaNavegador()
Objetivo: Busca o navegador utilizado pelo usuário
Parâmetros: Nenhum
Chamada: return buscaNavegador()
-----------------------------------------------------------------------------
*/
function buscaNavegador() {
    agent = navigator.userAgent;
    IE = (agent.indexOf("MSIE") > -1) ? true : false;
    FIREFOX = (agent.indexOf("Firefox") > -1) ? true : false;

    if (IE)
        return "IE";
    else
        if (FIREFOX)
        return "FIREFOX";
}

/*
-----------------------------------------------------------------------------
Função: mascara(campo, tipo)
Objetivo: Aplica Máscara a um campo. 
Parâmetros:
campo -> campo a ser aplicado a máscara.
mascara -> máscara a a ser aplicada(data, telefone, cpf..)
Chamada: onKeyUp="mascara(this,'tipodemascara')"
-----------------------------------------------------------------------------
*/
function mascara(campo, mascara) {
    var valorAtual = campo.value;
    var valorNumerico = '';
    var nIndexModelo = 0;
    var nIndexString = 0;
    var valorFinal = '';
    var adicionarValor = true;

    switch (mascara) {
        case 'telefone':
            Modelo = '(##)####-####'
            break;
        case 'telefoneSimples':
            Modelo = '####-####'
            break;
        case 'data':
            Modelo = '##/##/####'
            break;
        case 'dataHora':
            Modelo = '##/##/#### ##:##'
            break;
        case 'hora':
            Modelo = '##:##'
            break;
        case 'referencia':
            Modelo = '##/####'
            break;
        case 'CPF':
            Modelo = '###.###.###-##'
            break;
        case 'CNPJ':
            Modelo = '###.###.##/####-##'
            break;
        case 'CEP':
            Modelo = '#####-###'
            break;
        case 'placa':
            Modelo = '###-####'
            break;
        case 'cartaoCredito':
            Modelo = '####-####-####-####'
            break;
    }

    // limpa a string valor atual para verificar se todos os caracteres são números
    for (i = 0; i < Modelo.length; i++) {
        if (Modelo.substr(i, 1) != '#') {
            valorAtual = valorAtual.replace(Modelo.substr(i, 1), '');
        }
    }
    valorAtual = valorAtual.toUpperCase();

    // aplica a máscara ao campo informado usando o modelo de máscara informado
    for (i = 0; i < Modelo.length; i++) {
        if (Modelo.substr(i, 1) == '#') {
            if (valorAtual.substr(nIndexModelo, 1) != '') {
                valorFinal = valorFinal + valorAtual.substr(nIndexModelo, 1);
                nIndexModelo++; nIndexString++;
            }
            else
                adicionarValor = false;
        }
        else {
            if (adicionarValor && valorAtual.substr(nIndexModelo, 1) != '') {
                valorFinal = valorFinal + Modelo.substr(nIndexString, 1)
                nIndexString++;
            }
        }
    }
    campo.value = valorFinal
}

/*
-----------------------------------------------------------------------------
Função: verificaData(campo)
Objetivo: Faz a validação da data digitada.
Parâmetros:
campo -> campo a ser validado.
Chamada: onBlur="verificaData(this)"
-----------------------------------------------------------------------------
*/
function verificaData(campo, valor) {
    msg = ''
    bissexto = false
    if (valor) {
        data = campo;
    }
    else {
        data = campo.value;
    }
    tam = data.length;
    if (tam == 0)
        return false;
    if ((tam < 10) && (tam > 0))
        msg = 'Data Inválida! O ano deve ter 4 dígitos!';
    if (tam == 10) {
        partes = data.split("/");
        dia = partes[0];
        mes = partes[1];
        ano = partes[2];
        if (!((dia >= '01') && (dia <= '31')))
            msg = 'Dia Inválido!';
        else {
            if (!((mes >= '01') && (mes <= '12')))
                msg = 'Mês Inválido!';
            else {
                if (((ano % 4 == 0) && (ano % 100 != 0)) || (ano % 400 == 0))
                    bissexto = true;
                if (mes == '02') {
                    if ((dia > '28') && (!bissexto))
                        msg = 'O mês correspondente possui no máximo 28 dias!';
                    if ((dia > '29') && (bissexto))
                        msg = 'O mês correspondente possui no máximo 29 dias!';
                }
                if (!((mes == '01') || (mes == '03') || (mes == '05') || (mes == '07') || (mes == '08') || (mes == '10') || (mes == '12')) && (dia == '31'))
                    msg = 'O mês correspondente possui apenas 30 dias!';
            }
        }
    }
    if (msg != '') {
        if (valor) {
            return false
        }
        else {
            alert(msg);
            campo.value = '';
            campo.focus();
        }
    }
    else
        return true;
}

/*
-----------------------------------------------------------------------------
Função: verificaHora(campo)
Objetivo: Faz a validação da hora digitada.
Parâmetros:
campo -> campo a ser validado.
Chamada: OnBlur="verificaHora(this)"
-----------------------------------------------------------------------------
*/

function verificaHora(campo, valor) {
    msg = ''
    if (valor) {
        data = campo;
    }
    else {
        data = campo.value;
    }
    tam = data.length;
    if (tam == 0)
        return false;
    if ((tam < 5) && (tam > 0))
        msg = 'Hora Inválida!';
    if (tam == 5) {
        partes = data.split(":");
        hora = partes[0];
        minuto = partes[1];

        if (!((hora >= 00) && (hora <= 23)))
            msg = 'Hora Inválida!';
        else {
            if (!((minuto >= 00) && (minuto <= 59)))
                msg = 'Minuto Inválido!';
        }
    }
    
    if (msg != '') {
        if (valor) {
            return false
        }
        else {
            alert(msg);
            campo.value = '';
            campo.focus();
        }
    }
    else
        return true;
}

/*
-----------------------------------------------------------------------------
Função: verificaHora(campo)
Objetivo: Faz a validação da hora digitada.
Parâmetros:
campo -> campo a ser validado.
Chamada: OnBlur="verificaHora(this)"
-----------------------------------------------------------------------------
*/

function verificaDataHora(campo) {
    msg = ''
    
    data = campo.value.substr(0, 11);
    hora = campo.value.substr(11, 17);
    
    if (verificaData(data, true) && verificaHora(hora, true)) {
        resultData = true;
    }
    else{
        msg = 'Data/Hora inválida!';
    }

    if (msg != '') {
        alert(msg);
        campo.value = '';
        campo.focus();
    }
    else {
        return true;
    }
}

/*
-----------------------------------------------------------------------------
Nome da Função: formataValorDecimal
Parâmetros:
campo -> campo no formulario
teclapress -> Evento pressionar da tecla (event)
casasDecimais -> Quantidade de casas decimais
Objetivo: Formatar e validar campos com 4 decimais
Validacoes:
1 - nao deixa digitar numero negativo;
Chamada:
onKeyUp="formataValorDecimal(this,event,2)"
-----------------------------------------------------------------------------
*/
function formataValorDecimal(campo, teclapres, casasDecimais) {
    var codtecla = teclapres.keyCode;
    vr = campo.value;
    vr = vr.replace("/", "");
    vr = vr.replace("/", "");
    vr = vr.replace(",", "");
    vr = vr.replace(".", "");
    vr = vr.replace(".", "");
    vr = vr.replace(".", "");
    vr = vr.replace(".", "");
    vr = vr.replace("-", "");
    tam = vr.length;
    if (codtecla == 8 || codtecla >= 48 && codtecla <= 57 || codtecla >= 96 && codtecla <= 105) {
        if (tam < 2) {
            campo.value = vr;
        }
        if (tam == 2) {
            campo.value = vr.substr(0, 1) + ',' + vr.substr(1, 2);
        }
        if ((tam > casasDecimais + 1) && (tam <= casasDecimais + 3)) {
            campo.value = vr.substr(0, tam - casasDecimais) + ',' + vr.substr(tam - casasDecimais, tam);
        }
        if ((tam > casasDecimais + 3) && (tam <= casasDecimais + 6)) {
            campo.value = vr.substr(0, tam - (casasDecimais + 3)) + '.' + vr.substr(tam - (casasDecimais + 3), 3) + ',' + vr.substr(tam - casasDecimais, tam);
        }
        if ((tam > casasDecimais + 6) && (tam <= casasDecimais + 9)) {
            campo.value = vr.substr(0, tam - (casasDecimais + 6)) + '.' + vr.substr(tam - (casasDecimais + 6), 3) + '.' + vr.substr(tam - (casasDecimais + 3), 3) + ',' + vr.substr(tam - casasDecimais, tam);
        }
        if ((tam > casasDecimais + 9) && (tam <= casasDecimais + 12)) {
            campo.value = vr.substr(0, tam - (casasDecimais + 9)) + '.' + vr.substr(tam - (casasDecimais + 9), 3) + '.' + vr.substr(tam - (casasDecimais + 6), 3) + '.' + vr.substr(tam - (casasDecimais + 3), 3) + ',' + vr.substr(tam - casasDecimais, tam);
        }
    }
}

/*
-----------------------------------------------------------------------------
Nome da Função: validaEmail(campo)
Objetivo: Validar o e-mail digitado.
Parâmetros:
campo -> campo a ser validado
Chamada: onBlur="validaEmail(this);"		
-----------------------------------------------------------------------------
*/

function validaEmail(campo) {
    emailValido = true;
    if (campo.value != "") {
        prim = campo.value.indexOf("@")
        if (prim < 2) { emailValido = false; }
        if (campo.value.indexOf("@", prim + 1) != -1) { emailValido = false; }
        if (campo.value.indexOf(".") < 1) { emailValido = false; }
        if (campo.value.indexOf(" ") != -1) { emailValido = false; }
        if (campo.value.indexOf("meil") > 0) { emailValido = false; }
        if (campo.value.indexOf(".@") > 0) { emailValido = false; }
        if (campo.value.indexOf("@.") > 0) { emailValido = false; }
        if (campo.value.indexOf(".com.br.") > 0) { emailValido = false; }
        if (campo.value.indexOf("/") > 0) { emailValido = false; }
        if (campo.value.indexOf("[") > 0) { emailValido = false; }
        if (campo.value.indexOf("]") > 0) { emailValido = false; }
        if (campo.value.indexOf("(") > 0) { emailValido = false; }
        if (campo.value.indexOf(")") > 0) { emailValido = false; }
        if (campo.value.indexOf("..") > 0) { emailValido = false; }
    }

    if (emailValido)
        return true;
    else {
        alert('O e-mail informado não é válido!');
        campo.value = "";
        campo.focus();
        campo.select();
        return false;
    }
}

/*
-----------------------------------------------------------------------------
Nome da Função: validaMinimoCaracteres(campo, qtdMinima)
Objetivo: Utilizada para validar uma quantidade mínimo de caracteres digitados.
Parâmetros:
campo -> campo a ser validado
qtdMinima -> quantidade mínima de caracteres
-----------------------------------------------------------------------------
*/

function validaMinimoCaracteres(campo, qtdMinima) {
    if ((campo.value.length < qtdMinima) && (campo.value != '')) {
        alert("O campo " + campo.title + ' tem que ter no mínimo ' + qtdMinima + ' caracteres.');
        campo.value = "";
        campo.focus();
    }
}