/*
Criado por Luis Carlos
Zyrion Técnologia da Informação Ltda.
zyrion@ig.com.br

O arquivo FUNCOES_GERAIS.JS contém as validações padrão mais comuns para dados e também
algumas outras funções que são úteis mas não há disponível no PHP ou no JavaScript

FUNÇÕES DISPONÍVEIS:
        * eh_data()
        * eh_hora()
        * corrige_string()
        * url_self()
        * eh_numero()
        * eh_zero()
        * eh_negativo()
        * tamanho_string()
        * validaCPF()
        * validaDigitoCPF()
        * validaDigitoCNPJ()
        * validaCNPJ()
        * eh_mesano()
        * MascaraData()
        * MascaraAno()
        * RemoveVirgula()
        * eh_dia_semana()
*/

//=============================================================================
/* Retorna o nome da página que deve ser recarregada */
function url_self() {
        mlocation = "\"" + window.self.location + "\"";

        if (mlocation.indexOf("?") < 0) {
                mlocation = mlocation.substring(1, mlocation.length - 1);
        } else {
                mlocation = mlocation.substring(1, mlocation.indexOf("?"));
        }

        mlocation = mlocation.substring(mlocation.lastIndexOf("/") + 1, mlocation.length);

        return mlocation;
}

// Função para verificação de data no padrão dd/mm/aaaa
function eh_data (mvar) {
        // Verificando separadores da data e tamanho da string
        if (mvar.substr(2,1) != "/" || mvar.substr(5,1) != "/" || mvar.length != 10) {
                return false;
        }

        mdia = Number(mvar.substr(0,2));
        mmes = Number(mvar.substr(3,2));
        mano = Number(mvar.substr(6,4));

        // Verificando se o dia, mês e ano são numéricos
        if (isNaN(mdia) || isNaN(mmes) || isNaN(mano)) {
                return false;
        }

        // Verificando características óbvias de dia, mês e ano
        if (mdia<1 || mdia>31 || mmes<1 || mmes>12 || mano<1970) {
                return false;
        }

        // Verificando características específicas de dia e mês
        if ((mmes==4 || mmes==6 || mmes==9 || mmes==11) && mdia>30) {
                return false;
        }

        if (mmes==2 && ((mdia>28 && mano%4 != 0) || (mdia>29 && mano%4 == 0))) {
                return false;
        }

        // Se a função chegar até aqui, a data é válida
        return true;
}

//=============================================================================
// Função para verificação de hora no padrão hh:mm
function eh_hora (mvar) {
        // Verificando separadores da data e tamanho da string
        if (mvar.substr(2,1) != ":" || mvar.length != 5) {
                return false;
        }

        mhor = Number(mvar.substr(0,2));
        mmin = Number(mvar.substr(3,2));

        // Verificando se as horas e minutos são numéricos
        if (isNaN(mhor) || isNaN(mmin)) {
                return false;
        }

        // Verificando características gerais das horas e minutos
        if (mhor<0 || mhor>23 || mmin<0 || mmin>59) {
                return false;
        }

        // Se a função chegar até aqui, a hora é válida
        return true;
}

//=============================================================================
// Função para retirar caracteres causam erros no HTML, no JavaScript e/ou no SQL
function corrige_string (mvar) {
        while (mvar.indexOf("'") >= 0) {
                mvar = mvar.replace("'","`");
        }

        while (mvar.indexOf('"') >= 0) {
                mvar = mvar.replace('"','`');
        }

        while (mvar.indexOf("\\") >= 0) {
                mvar = mvar.replace("\\","/");
        }

        while (mvar.indexOf("&") >= 0) {
                mvar = mvar.replace("&","E");
        }

        while (mvar.indexOf("|") >= 0) {
                mvar = mvar.replace("|","I");
        }

        while (mvar.indexOf("#") >= 0) {
                mvar = mvar.replace("#","H");
        }

        return mvar;
}


//=============================================================================
// Função para verificar se o campo é numérico //
function eh_numero(mnumero)        {

        while (mnumero.indexOf(".") >= 0) {
                mnumero = mnumero.replace(".","");
        }

        while (mnumero.indexOf(",") >= 0) {
                mnumero = mnumero.replace(",","");
        }

        if (isNaN(mnumero))        {
                return false;
        }
        else {
                return true;
        }
}

//=============================================================================
// Função para verificar se o campo é zero //
function eh_zero(mnumero)        {

        while (mnumero.indexOf(".") >= 0) {
                mnumero = mnumero.replace(".","");
        }

        while (mnumero.indexOf(",") >= 0) {
                mnumero = mnumero.replace(",","");
        }

        if (mnumero == 0)        {
                return false;
        }
        else        {
                return true;
        }
}

//=============================================================================
// Função para verificar se o campo é negativo //
function eh_negativo(mnumero)        {

        while (mnumero.indexOf(".") >= 0) {
                mnumero = mnumero.replace(".","");
        }

        while (mnumero.indexOf(",") >= 0) {
                mnumero = mnumero.replace(",","");
        }

        if (mnumero < 0)        {
                return false;
        }
        else        {
                return true;
        }
}

//=============================================================================
// Função para verificar o tamanho da string //
// Pstring  ==> String à ser Verificada
// Ptamanho ==> Tamanho máximo da string
// Ptipo    ==> Numero ou letra
function tamanho_string(pstring, ptamanho, ptipo)        {

        if (ptipo == "numero" )        {
                while (pstring.indexOf(".") >= 0) {
                        pstring = pstring.replace(".","");
                }

                while (pstring.indexOf(",") >= 0) {
                        pstring = pstring.replace(",","");
                }

        }

        pstring = trim(pstring);

        if (pstring.length < ptamanho)        {
                return false;
        }
        else        {
                return true;
        }
}

//=============================================================================
// Valida os dígitos do cpf, calcula os valores através da expressões matemáticas
// correspondente e depois compara com os valores digitados no formulário.
// cpf ==> Valor do cpf digitado pelo usuário
function validaDigitoCPF(cpf) {

        digito_form = cpf[12]+cpf[13];

        soma = (cpf[0]*10)+(cpf[1]*9)+(cpf[2]*8)+(cpf[4]*7)+(cpf[5]*6)+(cpf[6]*5)+(cpf[8]*4)+(cpf[9]*3)+(cpf[10]*2);
        divisao = soma / 11;
        resto = recuperaDecimal(divisao)*11;
        resto = Math.round(resto);
        resultado = 11 - recuperaInteiro(resto);

        if (resto == 0 || resto == 1) {
                digito_1 = 0;
        }
        else {
                digito_1 = resultado;
        }

        soma = (cpf[0]*11)+(cpf[1]*10)+(cpf[2]*9)+(cpf[4]*8)+(cpf[5]*7)+(cpf[6]*6)+(cpf[8]*5)+(cpf[9]*4)+(cpf[10]*3)+(digito_1*2);
        divisao = soma / 11;
        resto = recuperaDecimal(divisao)*11;
        resto = Math.round(resto);
        resultado = 11 - recuperaInteiro(resto);

        if (resto == 0 || resto == 1) {
                digito_2 = 0;
        }
        else {
                digito_2 = resultado;
        }

        digito_1 = digito_1.toString(10);
        digito_2 = digito_2.toString(10);
        digito_valido = digito_1+digito_2;

        if (digito_form == digito_valido) {
                return true;
        }
        else {
                return false;
        }
}

//=============================================================================
// Valida os campos do tipo cpf, primeiro verifica se o valor é compatível com a
// expressão regular que define o formato, depois verifica se os dígitos
// do cpf estão corretos.
// cpf ==> Valor do cpf digitado pelo usuário
function validaCPF(cpf) {
        var ereg_cpf = /^(\d{3})(\.)(\d{3})(\.)(\d{3})(\-)(\d{2})$/;

        if(!cpf.match(ereg_cpf)) {
                return false;
        }
        else {
                if (!validaDigitoCPF(cpf)) {
                        return false;
                }
                else {
                        return true;
                }
        }
}

//=============================================================================
// Valida os dígitos do cnpj, calcula os valores através da expressão matemática
// correspondente e depois compara com os valores digitados no formulário.
// cnpj ==> Valor do cnpj digitado pelo usuário
function validaDigitoCNPJ(cnpj) {

digito_form = cnpj[16]+cnpj[17];

        soma = (cnpj[0]*5)+(cnpj[1]*4)+(cnpj[3]*3)+(cnpj[4]*2)+(cnpj[5]*9)+(cnpj[7]*8)+(cnpj[8]*7)+(cnpj[9]*6)+(cnpj[11]*5)+(cnpj[12]*4)+(cnpj[13]*3)+(cnpj[14]*2);
        divisao = soma / 11;
        calculo = recuperaInteiro(divisao)*11;
        resto = soma - calculo;
        resultado = 11 - resto;

        if (resto == 0 || resto == 1) {
                digito_1 = 0;
        }
        else {
                digito_1 = resultado;
        }

        soma = (cnpj[0]*6)+(cnpj[1]*5)+(cnpj[3]*4)+(cnpj[4]*3)+(cnpj[5]*2)+(cnpj[7]*9)+(cnpj[8]*8)+(cnpj[9]*7)+(cnpj[11]*6)+(cnpj[12]*5)+(cnpj[13]*4)+(cnpj[14]*3)+(digito_1*2);
        divisao = soma / 11;
        calculo = recuperaInteiro(divisao)*11;
        resto = soma - calculo;
        resultado = 11 - resto;

        if (resto == 0 || resto == 1) {
                digito_2 = 0;
        }
        else {
                digito_2 = resultado;
        }

        digito_1 = digito_1.toString(10);
        digito_2 = digito_2.toString(10);
        digito_valido = digito_1+digito_2;

        if (digito_form == digito_valido) {
                return true;
        }
        else {
                return false;
        }
}

//=============================================================================
// Valida os campos do tipo cnpj, primeiro verifica se o valor é compatível com a
// expressão regular que define o formato, depois verifica se os dígitos
// do cnpj estÃ£o corretos.
// cnpj ==> Valor do cnpj digitado pelo usuário
function validaCNPJ(cnpj) {

        var ereg_cnpj = /^(\d{2})(\.)(\d{3})(\.)(\d{3})(\/)(\d{4})(\-)(\d{2})$/;

        if(!cnpj.match(ereg_cnpj)) {
                return false;
        }
        else {
                if (!validaDigitoCNPJ(cnpj)) {
                        return false;
                }
                else {
                        return true;
                }
        }
}

//=============================================================================
// Máscara para o cpf, completa com pontos e hifen
function MascaraCPF(valor) {
        if (valor.length == 3){valor = valor + '.';}
           if (valor.length == 7){valor = valor + '.';}
           if (valor.length == 11){valor = valor + '-';}

           return valor;
}

//=============================================================================
// Máscara para o cnpj, completa com pontos, barra e hifen
function MascaraCNPJ(valor) {
        if (valor.length == 2){valor = valor + '.';}
        if (valor.length == 6){valor = valor + '.';}
        if (valor.length == 10){valor = valor + '/';}
        if (valor.length == 15){valor = valor + '-';}

        return valor;
}



/*fim da FUNCAO*/
// Função para verificação de data no padrão mm/aaaa
function eh_mesano (mvar) {
        // Verificando separadores da data e tamanho da string
        if (mvar.substr(2,1) != "/" || mvar.length != 7) {
                return false;
        }

        mmes = Number(mvar.substr(0,2));
        mano = Number(mvar.substr(3,4));

        // Verificando se o dia, mês e ano são numéricos
        if (isNaN(mmes) || isNaN(mano)) {
                return false;
        }

        // Verificando características óbvias de dia, mês e ano
        if (mmes<1 || mmes>12 || mano<1970) {
                return false;
        }

        // Se a função chegar até aqui, a data é válida
        return true;
}

/*
Máscara a Data no Formato  - 99/99/9999
99   ==> Parte 1 - Deverá ser composto por 2 números (0-9)
/    ==> Parte 2
99   ==> Parte 3 - Deverá ser composto por 2 números (0-9).
/    ==> Parte 4
9999 ==> Parte 5 - Deverá ser composto por 4 números (0-9).
*/
function mascara_data(pvalor) {
        if (pvalor.search(/^\d{2}$/) >= 0 || pvalor.search(/^\d{2}\/\d{2}$/) >= 0 || pvalor.search(/^\d{2}\/\d{2}\/\d{4}$/) >= 0) {
                pvalor = pvalor + "/";
        }
        else {

                if (pvalor.search(/^\d{2}\/$/) >= 0 || pvalor.search(/^\d{2}\/\d{2}\/$/) >= 0 || pvalor.search(/^\d{2}\/\d{2}\/\d{2}\/$/) >= 0) {
                        pvalor = pvalor.substr(0, pvalor.length - 1);
                }
        }

        return pvalor;
}

/*
Máscara o Mes/Ano no Formato  - 99/9999
99          ==> Parte 1 - Deverá ser composto por 2 números (0-9)
/    ==> Parte 2
9999 ==> Parte 3 - Deverá ser composto por 4 números (0-9).
*/
function mascara_ano(pvalor) {
        if (pvalor.search(/^\d{2}$/) >= 0 || pvalor.search(/^\d{2}\/\d{4}$/) >= 0) {
                pvalor = pvalor + "/";
        }
        else {

                if (pvalor.search(/^\d{2}\/$/) >= 0 || pvalor.search(/^\d{2}\/\d{4}\/$/) >= 0) {
                        pvalor = pvalor.substr(0, pvalor.length - 1);
                }
        }

        return pvalor;
}

// Máscara para o ano, completa com hifen

// remove a virgula de valor, para evitar erro ao salvar um numero na bd
function remove_virgula(valor) {
        valor = valor.replace(',','');

        return valor;
}

/* Recebe como parâmetros o ano, mes e dia da data, e retorna true caso a data
seja dia útil, false caso contrário, o javascript considera mes='0' como
janeiro e assim sucessivamente*/
function eh_dia_semana(ano, mes, dia) {
        mes = mes -1;
        data = new Date(ano, mes, dia);
        dia_semana = data.getDay();

        if (dia_semana=='0' || dia_semana=='6') {
                return false;
        }
        else {
                return true;
        }
}


function Apagar(funcao, id, page)  {
  if (window.confirm("Deseja realmente excluir esse Registro ?"))  {
    window.location = 'index.php?page=' + page + '&id=' + id + '&act=' + funcao;
  }
}

function validarPergunta()  {
  if (document.forms[0].nome.value == '' || document.forms[0].pergunta.value == '' || document.forms[0].email.value == '')  {
    alert("Os campos Nome, Email e Pergunta devem ser Preenchidos !!");
  }  else  {
    document.forms[0].submit();
  }
}

function visualizar(div){
  if(document.getElementById(div).style.display == 'none'){
    document.getElementById(div).style.display = 'block';
  } else {
    document.getElementById(div).style.display = 'none';
  }
}

function validarTrabalheConosco()  {
  var val = 0;
  if (document.forms[0].ctl0$Site$txtNome.value == '')  {
    document.getElementById('ctl0_Site_ctl3').style.display = 'inline';
    val = 1;
  }
  if (document.forms[0].ctl0$Site$txtEmail.value == '')  {
    document.getElementById('ctl0_Site_ctl5').style.display = 'inline';
    val = 1;
  }
  if (val == 0)  {
    document.forms[0].enctype="multipart/form-data";
    document.forms[0].method="POST";
    document.forms[0].action="../ose/index.php?page=site.TrabalheConosco&act=2";
    document.forms[0].submit();
  }
}

function confirmaTrabalheConosco()  {
  document.getElementById('ctl0_Site_Resposta').style.display = 'inline';
}


function validaAssinatura() {
  var val = 0;
  if (document.forms[0].ctl0$Site$txtNome.value == '')  {
    document.getElementById('ctl0_Site_ctl3').style.display = 'inline';
    val = 1;
  }
  if (document.forms[0].ctl0$Site$txtEmpresa.value == '')  {
    document.getElementById('ctl0_Site_ctl6').style.display = 'inline';
    val = 1;
  }
  if (document.forms[0].ctl0$Site$txtEmpresa.value == '')  {
    document.getElementById('ctl0_Site_ctl6').style.display = 'inline';
    val = 1;
  }
  if (document.forms[0].ctl0$Site$txtCPF.value == '')  {
    document.getElementById('ctl0_Site_ctl9').style.display = 'inline';
    val = 1;
  }
  if (document.forms[0].ctl0$Site$txtEmpresa.value == '')  {
    document.getElementById('ctl0_Site_ctl12').style.display = 'inline';
    val = 1;
  }
  if (document.forms[0].ctl0$Site$txtEndereco.value == '')  {
    document.getElementById('ctl0_Site_ctl6').style.display = 'inline';
    val = 1;
  }
  if (document.forms[0].ctl0$Site$txtBairro.value == '')  {
    document.getElementById('ctl0_Site_ctl15').style.display = 'inline';
    val = 1;
  }
  if (document.forms[0].ctl0$Site$txtCidade.value == '')  {
    document.getElementById('ctl0_Site_ctl22').style.display = 'inline';
    val = 1;
  }
  if (document.forms[0].ctl0$Site$txtUF.value == '')  {
    document.getElementById('ctl0_Site_ctl25').style.display = 'inline';
    val = 1;
  }
  if (document.forms[0].ctl0$Site$txtCEP.value == '')  {
    document.getElementById('ctl0_Site_ctl28').style.display = 'inline';
    val = 1;
  }
  if (document.forms[0].ctl0$Site$txtEmail.value == '')  {
    document.getElementById('ctl0_Site_ctl35').style.display = 'inline';
    val = 1;
  }
  if (val == 0)  {
    document.forms[0].method="POST";
    document.forms[0].action="../ose/index.php?page=site.Assinatura&act=2";
    document.forms[0].submit();
  }
}

