// #############################################################################################
//  LOCAL VERIFICA #############################################################################
// #############################################################################################
// funcoes para verificacao online dos campos de um formulario

//Inicio da função que valida e-mail
	function vemail(txtcampo)
	{
		if (txtcampo.search('@')=='-1' || txtcampo.search('.')=='-1'){
		window.alert('@= ' + txtcampo.search('@') + '.com= ' + txtcampo.search('.com'));
		return false;
		}
		else
		{
		return true;
		}
	}
 //Fim da função que valida Email

function Verifica_CGCCPF(pNumero)
{
		//var bCGC, bCPF;
		
		//verifica CGC
		if ((pNumero.length == 14) || (pNumero.length == 16) || (pNumero.length == 18))
		{
			bCGC = Verifica_CGC(pNumero);
		}else{
			bCGC = false;
		}
		
		//Verifica CPF
		if ((pNumero.length == 11) || (pNumero.length == 12) || (pNumero.length == 14))
		{
			bCPF = Verifica_CPF(pNumero);
		}else{
			bCPF = false;
		}
		
		if ((bCGC == true) || (bCPF == true))
		{
			return true;
		}else{
			return false;
		}
	}

    function isDigit(pchar) {
    //verifica se o caracter passado e um dos permitidos
        return ("0123456789.".indexOf(pchar)>=0);
    }

    function isDigitCGCCPF(pchar) {
        return ("0123456789./-".indexOf(pchar)>=0);
    }

    function isDigitCGCCPFNum(pchar) {
        return ("0123456789".indexOf(pchar)>=0);
    }

	function Limpa_CGCCPF(pNumero)
	{
		//Retira formatação do campo		
		pNumero_Limpo = '';
		lValido = true;

        for (i=0; i < pNumero.length; i++) {
            if (!isDigitCGCCPF(pNumero.charAt(i))) {
                lValido = false;
                break;
            } else {
                if (isDigitCGCCPFNum(pNumero.charAt(i)))
                {
					pNumero_Limpo = pNumero_Limpo + pNumero.charAt(i);
                }
            }
        }
		if (lValido == true)
		{
			return pNumero_Limpo;
		}
		else
		{
			return false;
		}
	}
	

	function Verifica_CGC(pCgc)
	{
		lValido = true;

		//fica com o CGC pronto para o calculo
		pCgc = Limpa_CGCCPF(pCgc);		
		
		if (pCgc == false)
		{
			return false;
		}

       //Calculo e verificação do dígito 1
		nSoma = 0;
		
		nSoma = (5 * pCgc.charAt(0)) + (4 * pCgc.charAt(1)) + (3 * pCgc.charAt(2)) + (2 * pCgc.charAt(3)) + (9 * pCgc.charAt(4)) + (8 * pCgc.charAt(5)) + (7 * pCgc.charAt(6)) + (6 * pCgc.charAt(7)) + (5 * pCgc.charAt(8)) + (4 * pCgc.charAt(9)) + (3 * pCgc.charAt(10)) + (2 * pCgc.charAt(11));
		
		nResto= nSoma % 11;
		
		nDigito_Calculado = 11 - nResto;
		
		if (nDigito_Calculado > 9) 
		{
			nDigito_Calculado = 0;
		}
		
		if (nDigito_Calculado != pCgc.charAt(12))
		{
			lValido = false;
		}
		else
		{
			//Calculo e verificação do dígito 2
		    nSoma = 0
		    
		    nSoma = (6 * pCgc.charAt(0)) + (5 * pCgc.charAt(1)) + (4 * pCgc.charAt(2)) + (3 * pCgc.charAt(3)) + (2 * pCgc.charAt(4)) + ( 9* pCgc.charAt(5)) + (8 * pCgc.charAt(6)) + (7 * pCgc.charAt(7)) + (6 * pCgc.charAt(8)) + (5 * pCgc.charAt(9)) + (4 * pCgc.charAt(10)) + (3 * pCgc.charAt(11)) + (2 * pCgc.charAt(12));
		    
		    nResto = nSoma % 11;

		    nDigito_Calculado = 11 - nResto;
		    
		    if (nDigito_Calculado > 9)
		    {
				nDigito_Calculado = 0;
			}
		    
		    if (nDigito_Calculado != pCgc.charAt(13))
		    {
				lValido = false;
			}
		}     
		
		return lValido;
	}
	
	function Verifica_CPF(pCpf)
	{
	
		lValido = true
	
		//fica com o CPF pronto para o calculo
		pCpf = Limpa_CGCCPF(pCpf);

		if (pCpf == false)
		{
			return false;
		}

		//Calculo e verificação do dígito 1
		nSoma = 0;
		
        for (i=0; i < 9; i++) {
			nSoma = nSoma + (pCpf.charAt(i)* (i + 1));
        }
		
		nResto = nSoma % 11;
				
		if (nResto > 9)
		{
		    nDigito_Calculado = nResto - 10;
		}
		else
		{
			nDigito_Calculado = nResto;
		}
		
		nDigito_Cpf = pCpf.charAt(9)     
				       
		 if (nDigito_Calculado != nDigito_Cpf)
		 {
		      lValido = false;
		 }     
		 else
		 {
			//Calculo e verificação do dígito 2
		    nSoma = 0;
		    
		    for (i=0; i < 8; i++) 
		    {
				nSoma = nSoma + (pCpf.charAt(i + 1) * (i + 1));
			}
		    
		    nSoma = nSoma + (nDigito_Calculado * 9);
		    nResto = nSoma % 11;
		    
		    if (nResto > 9)
		    {
				nDigito_Calculado = nResto - 10;
		    }
		    else
		    {
				nDigito_Calculado = nResto;
		    }
		    
		    nDigito_Cpf = pCpf.charAt(10)     
		    
		    if (nDigito_Calculado != nDigito_Cpf) {
		             lValido = false;
		    }
		 }
	 	 return lValido;
	}

	function isEMail(campo, bRequerido)
	{
		//Consiste e-mails buscando o caracter "@" na string passada
		var bmail = false
		
		if(campo.value.search(/@/i) >= 0)
		{
			bmail = true;			
		}				

		return bmail;
	}
        
    function isPhoneNumber(pchar) {
    //verifica se o caracter passado e um dos permitidos para um telefone
        return (" 0123456789.-".indexOf(pchar)>=0);
    }

    function isPhone(ptexto) {
    //verifica se a string passada é um numero de telefone valido
        var numeric = true;
        for (i=0; i < ptexto.length; i++) {
            if (!isPhoneNumber(ptexto.charAt(i)) ) {
                numeric = false;
                break;
            } else {
                if (ptexto.charAt(i) == ".") {
                    numeric = false;
                    break;
                }
            }
        }
        return numeric;
    }
    
    function isValor(ptexto) {
        var numeric = true;
        for (i=0; i < ptexto.length; i++) {
            if (!isDigit(ptexto.charAt(i)) ) {
                numeric = false;
                break;
            }
        }
        return numeric;
    }

    function isInteger(ptexto) {
    //verifica se ptexto e um numero do tipo inteiro
        var numeric = true;
			
        for (i=0; i < ptexto.length; i++) {
            if (!isDigit(ptexto.charAt(i)) ) {
                numeric = false;
                break;
            } else {
                if (ptexto.charAt(i) == ".") {
                    numeric = false;
                    break;
                }
            }
        }
        return numeric;
    }

    function ltrim(ptexto) { //retira espacos em branco a esquerda da string
        var i = 0;
        while (( i < ptexto.length ) && (ptexto.charAt(i)== " ")) {
            i++;
        }
        return (ptexto.substring(i,ptexto.length));
    }
    
    function rtrim(ptexto) { //retira os espacos em branco a direita da string
        var i = ptexto.length-1;
        while ( (i>0) && (ptexto.charAt(i) == " ") ) {
            i--;
        }
        return (ptexto.substring(0,i+1));
    }
    
    function trim(ptexto) {//retira espacos em branco a esquerda e a direita da string
        return ltrim(rtrim(ptexto));
    }
    
    function isNumber(ptexto) { //verifica se ptexto é um tipo numerico
        ptexto = ltrim (ptexto);
        if (ptexto.charAt(0)=='-') {
            ptexto = ptexto.substring(1,ptexto.length);
        }
        return (isPosNumber(ptexto));
    }    

    function isDate(ptexto) { //verifica se ptexto e uma data valida
        ptexto = trim (ptexto);
        if (ptexto.length !=10) {
            return false;
        }
        dia = ptexto.substring(0,2);
        mes = ptexto.substring(3,5);
        ano = ptexto.substring(6,10);
        
        if (!isInteger(dia) || !isInteger(mes) || !isInteger(ano)) return false;
        
        if (mes<1 || mes >12) return false;
        
        if (ptexto.substring(2,3) != "/") return false;
        if (dia<1 || dia > 31) return false;
        if (ptexto.substring(5,6) != "/") return false;
        if (ano<1753) return false;
        if (mes==4 || mes==6 || mes==9 || mes==11) {
            if (dia==31) return false;
        }
        if (mes==2) {
        var g = parseInt(ano/4);
            if (isNaN(g)) {
                return false;
            }
            if (dia>29) return false;
            if (dia==29 && ((ano/4)!=parseInt(ano/4))) return false;
        }
        return true;
    }
    
	function verificaCampo (objSource, bPredicado, bRequerido, strMensagem)
	{
	
	//verifica (caso o campo seja requerido) se o campo foi preenchido e,
	//caso ocorra algum erro no processo de verificacao dos dados, ele alerta 
	//o erro com a mensagem desejada e coloca o foco no campo que apresentou 
	//algum problema
	
		var bResult;
		var texto;
		texto =  objSource.value;
			
		if ((bRequerido == false) && (texto.length == 0))
		{
			bPredicado = true
		}
		
		if (bPredicado)
		{ 
			bResult = true;
		}
		else
		{ 
			alert(strMensagem);
			objSource.focus()
			bResult = false;
		}
		
		return bResult;
	}


	function verificaValorCampo (objSource, varValor, bRequerido, strMensagem)
	{
	
	//Consiste os campos desejados
	
	//De acordo com cada tipo de dado ele chama a funcao responsavel pelo
	//tratamento especifico
	
		/* Verifica se a função é diferente do valor indesejado (indesejado, mesmo) */
		var bPredicado;
		
		switch (varValor)
		{
			case "": bPredicado = trim(objSource.value) != varValor; break;
			case "@.com": bPredicado = vemail(objSource.value); break;
			case "isDate": bPredicado = isDate(objSource.value); break;
			case "isOnlyDate":bPredicado = isDate(objSource.value)&& objSource.value!=""; break;
			case "isInteger": bPredicado = isInteger(objSource.value) || objSource.value==""; break;
			case "isPhone": bPredicado = isPhone(objSource.value) || objSource.value==""; break;
			case "isOnlyInteger": bPredicado = isInteger(objSource.value) && objSource.value!=""; break;
			case "isEMail": bPredicado = isEMail(objSource); break;
			case "isCGC-CPF": bPredicado = Verifica_CGCCPF(objSource.value); break;
			case "isCGC": bPredicado = Verifica_CGC(objSource.value); break;
			case "isCPF": bPredicado = Verifica_CPF(objSource.value); break;			
			case "isValor": bPredicado = isValor(objSource.value) || objSource.value==""; break;
			default: bPredicado = objSource.value != varValor; break;
		}
		return verificaCampo (objSource, bPredicado, bRequerido, strMensagem);
	}
	
/////////////////////////////////////////////////////////////////
// PRESS NUMERIC
// considera apenas os digitos
/////////////////////////////////////////////////////////////////
function PressNumeric(sValor)
{
	var nKey;	
	nKey = window.event.keyCode;	
		
	if ( !(nKey > 47 && nKey < 58) ) // nao e' numerico
	{
		return false;
	}
			
	// svalor = numero			
	return true;
}


function PressValor(sValor)
	{
		var nKey;	
		nKey = window.event.keyCode;	
		
		if (nKey == 44 ) //virgula
			{
				if ( sValor.indexOf(",") != -1)
				{
					return false;
				}
				
			}
	    else
			{ 
				if ( !(nKey > 47 && nKey < 58) ) // nao e' numerico
					return false;
				else
				{
					if ( sValor.indexOf(",") != -1)
					{
						var decimal = sValor.substr(sValor.indexOf(","))
						if (decimal.length > 2)
							return false;
				    }
				}
				
			}
			
		return true;
	}

