// JavaScript Document

function Tecla(e)
{
    if (document.all) // Internet Explorer
        var tecla = event.keyCode;
    else if(document.layers) // Nestcape
        var tecla = e.which;
    if (tecla > 47 && tecla < 58) // numeros de 0 a 9
        return true;
    else
        {
            if (tecla != 8) // backspace
                event.keyCode = 0;
            //return false;
            else
                return true;
        }
    }
    
    function mascara_data(data,campo){ 
        var mydata = ''; 
        mydata = mydata + data; 
        
        if (mydata.length == 2){ 
            mydata = mydata + '/'; 
            document.getElementById(campo).value = mydata; 
        } 
        if (mydata.length == 5){ 
            mydata = mydata + '/'; 
            document.getElementById(campo).value = mydata; 
        } 
    } 
    
    function mascara(cpf, campo) {
        var mycpf = ''; 
        mycpf = mycpf + cpf; 
        
        if (mycpf.length == 3){ 
            mycpf= mycpf + '.'; 
            document.getElementById(campo).value = mycpf; 
        } 
        
        if (mycpf.length == 7){ 
            mycpf = mycpf + '.'; 
            document.getElementById(campo).value = mycpf; 
        } 
        
        if (mycpf.length == 11){ 
            mycpf = mycpf + '-'; 
            document.getElementById(campo).value = mycpf; 
        } 
    }
    
    
    function limpa_string(S){
        // Deixa so' os digitos no numero
        var Digitos = "0123456789";
        var temp = "";
        var digito = "";
        
        for (var i=0; i<S.length; i++)	{
            digito = S.charAt(i);
            if (Digitos.indexOf(digito)>=0)	{
                temp=temp+digito	}
        } //for
        
        return temp
    }
    
    
    // Validar CPF/CNPJ
    var NUM_DIGITOS_CPF  = 11;
    var NUM_DIGITOS_CNPJ = 14;
    var NUM_DGT_CNPJ_BASE = 8;
    /**
    * Adiciona m�todo lpad() � classe String.
    * Preenche a String � esquerda com o caractere fornecido,
    * at� que ela atinja o tamanho especificado.
    */
    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.lpad
    
    
    /**
    * Adiciona m�todo trim() � classe String.
    * Elimina brancos no in�cio e fim da String.
    */
    String.prototype.trim = function()
    {
        return this.replace(/^\s*/, "").replace(/\s*$/, "");
    } //String.trim
    
    
    /**
    * Elimina caracteres de formata��o e zeros � esquerda da string
    * de n�mero fornecida.
    * @param String pNum
    *      String de n�mero fornecida para ser desformatada.
    * @return String de n�mero desformatada.
    */
    function unformatNumber(pNum)
    {
        return String(pNum).replace(/\D/g, "").replace(/^0+/, "");
    } //unformatNumber
    
    
    /**
    * Formata a string fornecida como CNPJ ou CPF, adicionando zeros
    * � esquerda se necess�rio e caracteres separadores, conforme solicitado.
    * @param String pCpfCnpj
    *      String fornecida para ser formatada.
    * @param boolean pUseSepar
    *      Indica se devem ser usados caracteres separadores (. - /).
    * @param boolean pIsCnpj
    *      Indica se a string fornecida � um CNPJ.
    *      Caso contr�rio, � CPF. Default = false (CPF).
    * @return String de CPF ou CNPJ devidamente formatada.
    */
    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;
            } //formatCpfCnpj
            
            
            /**
            * Calcula os 2 d�gitos verificadores para o n�mero-efetivo pEfetivo de
            * CNPJ (12 d�gitos) ou CPF (9 d�gitos) fornecido. pIsCnpj � booleano e
            * informa se o n�mero-efetivo fornecido � CNPJ (default = false).
            * @param String pEfetivo
            *      String do n�mero-efetivo (SEM d�gitos verificadores) de CNPJ ou CPF.
            * @param boolean pIsCnpj
            *      Indica se a string fornecida � de um CNPJ.
            *      Caso contr�rio, � CPF. Default = false (CPF).
            * @return String com os dois d�gitos verificadores.
            */
            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;
                    } //dvCpfCnpj
                    
                    /**
                    * Testa se a String pCpf fornecida � um CPF v�lido.
                    * Qualquer formata��o que n�o seja algarismos � desconsiderada.
                    * @param String pCpf
                    *      String fornecida para ser testada.
                    * @return <code>true</code> se a String fornecida for um CPF v�lido.
                    */
                    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;
                        
                        // Valida d�gitos verificadores
                        if (numero != base + digitos) return false;
                        
                        /* N�o ser�o considerados v�lidos os seguintes CPF:
                        * 000.000.000-00, 111.111.111-11, 222.222.222-22, 333.333.333-33, 444.444.444-44,
                        * 555.555.555-55, 666.666.666-66, 777.777.777-77, 888.888.888-88, 999.999.999-99.
                        */
                        algUnico = true;
                        for (i=1; i<NUM_DIGITOS_CPF; i++)
                            {
                                algUnico = algUnico && (numero.charAt(i-1) == numero.charAt(i));
                            }
                            
                            return (!algUnico);
                        } //isCpf
                        
                        /**
                        * Testa se a String pCnpj fornecida � um CNPJ v�lido.
                        * Qualquer formata��o que n�o seja algarismos � desconsiderada.
                        * @param String pCnpj
                        *      String fornecida para ser testada.
                        * @return <code>true</code> se a String fornecida for um CNPJ v�lido.
                        */
                        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;
                            
                            // Valida d�gitos verificadores
                            if (numero != base + ordem + digitos) return false;
                            
                            /* N�o ser�o considerados v�lidos os CNPJ com os seguintes n�meros B�SICOS:
                            * 11.111.111, 22.222.222, 33.333.333, 44.444.444, 55.555.555,
                            * 66.666.666, 77.777.777, 88.888.888, 99.999.999.
                            */
                            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;
                                
                                /* N�o ser� considerado v�lido CNPJ com n�mero de ORDEM igual a 0000.
                                * N�o ser� considerado v�lido CNPJ com n�mero de ORDEM maior do que 0300
                                * e com as tr�s primeiras posi��es do n�mero B�SICO com 000 (zeros).
                                * Esta cr�tica n�o ser� feita quando o no B�SICO do CNPJ for igual a 00.000.000.
                                */
                                if (ordem == "0000") return false;
                                return (base == "00000000"
                                    || parseInt(ordem, 10) <= 300 || base.substring(0, 3) != "000");
                                
                            } //isCnpj
                            
                            
                            /**
                            * Testa se a String pCpfCnpj fornecida � um CPF ou CNPJ v�lido.
                            * Se a String tiver uma quantidade de d�gitos igual ou inferior
                            * a 11, valida como CPF. Se for maior que 11, valida como CNPJ.
                            * Qualquer formata��o que n�o seja algarismos � desconsiderada.
                            * @param String pCpfCnpj
                            *      String fornecida para ser testada.
                            * @return <code>true</code> se a String fornecida for um CPF ou CNPJ v�lido.
                            */
                            function isCpfCnpj(pCpfCnpj)
                            {
                                var numero = pCpfCnpj.replace(/\D/g, "");
                                if (numero.length > NUM_DIGITOS_CPF)
                                    return isCnpj(pCpfCnpj)
                                else
                                    return isCpf(pCpfCnpj);
                            } //isCpfCnpj
                            
                            function verifica_data () { 
                                
                                dataExpedicao  = document.getElementById('dataExpedicao').value;	
                                dia = dataExpedicao.substring(0,2); 
                                mes = dataExpedicao.substring(3,5); 
                                ano = dataExpedicao.substring(6,10); 
                                
                                situacao = ""; 
                                // verifica o dia valido para cada mes 
                                if ((dia < 01)||(dia < 01 || dia > 30) && (  mes == 04 || mes == 06 || mes == 09 || mes == 11 ) || dia > 31) { 
                                    situacao = "falsa"; 
                                } 
                                
                                // verifica se o mes e valido 
                                if (mes < 01 || mes > 12 ) { 
                                    situacao = "falsa"; 
                                } 
                                
                                // verifica se e ano bissexto 
                                if (mes == 2 && ( dia < 01 || dia > 29 || ( dia > 28 && (parseInt(ano / 4) != ano / 4)))) { 
                                    situacao = "falsa"; 
                                } 
                                
                                if (dataExpedicao == "") { 
                                    situacao = "falsa"; 
                                } 
                                
                                if (situacao == "falsa") { 
                                    alert("A data da expedicao � invalida!");
                                    document.forms[0].dataExpedicao.focus();
                                    return false;
                                } 
                                
                                return true;
                            } 
                            
                            function checkForm(form) {
                                
                                var reDecimalPt = /^[+-]?((\d+|\d{1,3}(\.\d{3})+)(\,\d*)?|\,\d+)$/;
                                var reDecimal = reDecimalPt;
                                
                                razao			= document.getElementById('razao').value;
                                endereco		= document.getElementById('endereco').value;
                                numero	  		= document.getElementById('numero').value;	
                                bairro			= document.getElementById('bairro').value;
                                cep                     = document.getElementById('cep').value;
                                telefoneEmpresa		= document.getElementById('telefoneEmpresa').value;	
                                emailEmpresa		= document.getElementById('emailEmpresa').value;
                                tamanho_email   	= document.getElementById('emailEmpresa').value.length;	
                                area			= document.getElementById('area').value;	
                                cpf			= document.getElementById('cpf').value;			
                                nome			= document.getElementById('nome').value;				
                                rg			= document.getElementById('rg').value;					
                                orgaoExpedidor		= document.getElementById('orgaoExpedidor').value;						
                                dataExpedicao		= document.getElementById('dataExpedicao').value;
                                
                                if (razao == "") {
                                    alert("A Razao Social da empresa é obrigatorio!");
                                    document.forms[0].razao.focus();
                                    return false;
                                }
                                
                                if (endereco == "") {
                                    alert("O Endereco da empresa é obrigatorio!");
                                    document.forms[0].endereco.focus();
                                    return false;
                                }
                                
                                if (numero == "") {
                                    alert("O numero e obrigatorio!");
                                    document.forms[0].numero.focus();
                                    return false;
                                }
                                
                                if (bairro == "") {
                                    alert("O bairro e obrigatorio!");
                                    document.forms[0].bairro.focus();
                                    return false;
                                }
                                
                                if (cep == "") {
                                    alert("O cep e obrigatorio!");
                                    document.forms[0].cep.focus();
                                    return false;
                                }
                                
                                if (limpa_string(telefoneEmpresa) == "" || limpa_string(telefoneEmpresa) == 0) {
                                    alert("O telefone da empresa e obrigatorio!");
                                    document.forms[0].telefoneEmpresa.focus();
                                    return false;
                                }         
                                
                                if (tamanho_email <= 0) {
                                    alert("O campo e-mail deve ser conter um endereco eletronico valido!");
                                    document.forms[0].emailEmpresa.focus();		
                                    return false;
                                } else {
                                //validar email(verificao de endereco eletronico)
                                parte1 = emailEmpresa.indexOf("@");
                                parte2 = emailEmpresa.indexOf(".");
                                parte3 = tamanho_email;
                                if (!(parte1 >= 3 && parte2 >= 6 && parte3 >= 9)) {
                                    alert("O campo e-mail deve ser conter um endereco eletronico valido!");
                                    document.forms[0].emailEmpresa.focus();
                                    return false;
                                }
                            }
                            
                            
                            eval("reDecimal = reDecimalPt");
                            if (area == "") {
                                alert("A area da empresa e obrigatorio!");
                                document.forms[0].area.focus();
                                return false;
                            }
                            
                            if (!reDecimal.test(area)) {
                                alert("O valor total da area foi informado de forma errada!");
                                document.forms[0].area.focus();
                                return false;
                            }
                            
                            
                            if (cpf == "") {
                                alert("O Cpf e obrigatorio!");
                                document.forms[0].cpf.focus();
                                return false;
                            }
                            
                            
                            if (!isCpfCnpj(cpf)) {
                                alert("O Cpf e invalido!");
                                document.forms[0].cpf.focus();
                                return false;
                            }
                            
                            if (nome == "") {
                                alert("O Nome do Responsavel e obrigatorio!");
                                document.forms[0].nome.focus();
                                return false;
                            }
                            
                            if (limpa_string(rg) == "" || limpa_string(rg) == 0) {
                                alert("O Rg do Responsavel e obrigatorio!");
                                document.forms[0].rg.focus();
                                return false;
                            }         
                            
                            if (orgaoExpedidor == "") {
                                alert("O Orgao Expedidor e obrigatorio!");
                                document.forms[0].orgaoExpedidor.focus();		
                                return false;
                            }
                            
                            if (dataExpedicao == "") {
                                alert("A Data de Expedicao e obrigatorio!");
                                document.forms[0].dataExpedicao.focus();				
                                return false;
                            }
                            
                            if(!verifica_data())
                                return false;	
                            
                            document.getElementById('cpf').value 	= limpa_string(cpf);
                            document.getElementById('dataExpedicao').value	= dataExpedicao.substring(6,10) + dataExpedicao.substring(3,5) + dataExpedicao.substring(0,2);
                            
                            return true;
                        }
                        
                        
                        function textCounter(field, countfield, maxlimit) {
                            if (field.value.length > maxlimit) {
                                field.value = field.value.substring(0, maxlimit);
                            } else {
                            countfield.value = maxlimit - field.value.length;}
                    }
                    
                    
// Formata o campo valor
function formataValor(campo) {
	campo.value = limpa_string(campo.value);
	vr = campo.value;
	tam = vr.length;

	if ( tam <= 2 ){ 
 		campo.value = vr ; 
	}
	
 	if ( (tam > 2) && (tam <= 8) ){
 		campo.value = vr.substr( 0, tam - 2 ) + ',' + vr.substr( tam - 2, tam ) ; 
	}
 		
}                    

// Seta o ajuda do campo no campo <SPAN> 
function setaTextoAjuda(txt) {
	if(document.getElementById('textoAjuda')) document.getElementById('textoAjuda').innerHTML = txt + '&nbsp;' ;
}
