/**
 * Funções de utilidade generica para validações no cliente.
 * @autor Rogério Taques Martins <rogerio.taques@gmail.com>
 * @enterprise R&J Associated IT Solutions
 * @version 0.1, 30/09/2005
 */
 
 /**
  * Validação de campo numérico.
  * Use: <input type="text" ... onBlur="javascript:validaNumero(this, 'NomeDoCampo', true)">
  */
   function validaNumero(campo, nomecampo, indmsg) {
      if( indmsg == undefined ) indmsg = false;
      if( nomecampo == undefined ) nomecampo = '';
      if( campo.value == '' ) return true;
      
      var nros = '1234567890';
      var nro  = campo.value;
      var resp = true;

      for( i=0; i<nro.length; i++ ) {
         if( nros.indexOf(nro.substr(i, 1)) < 0 ) {
            resp = false;
            break;
         }
      }
      
      if( indmsg  && !resp ) {
         alert(mensagem(103, nomecampo));
         campo.focus();
      }
      
      return resp;
   }

 /**
  * Validação de e-mail. Retorna true/false
  * Use: <input type="text" ... onBlur="javascript:validaEmail(this, true);">
  */
   function validaEmail(campo, indmsg){
      if( campo.value == '' ) return true; //se nada for informado, ignora.
      if( indmsg == undefined ) indmsg = false;

      email = campo.value;
   	pos = email.indexOf("@");
   	tam = email.length;
   	ret = true;
   	
   	if ((pos == -1) || (pos == 0)) {
   		ret = false;
   	} else {
   		if (tam <= pos+1) {
   			ret = false;
   		} else {
   			pos2 = email.indexOf(".",pos);
   			if (pos2 == -1) {
   				ret = false;
   			} else {
   				if (tam <= pos2+1) {
   					ret = false;
               }
   			}
   		}
   	}

      // valida se o desenvolvedor requer mensagem
      if( !ret && indmsg ) {
         alert(mensagem(102, 'E-Mail'));
         campo.focus();
      }
      
   	return ret;
   }
   
   /**
    * Valida a quantidade de texto digitada em um TextArea
    * Use: <textarea ... onKeyPress="javascript:validaTextArea(this, 'NomeCampo', 1024, true);"> ou
    * if( !validaTextArea(document.form.campo, 'NomeCampo', 1024, false) ) {}
    */
   function validaTextArea(campo, nomeCampo, tamMax, indMsg) {
      var txt = campo.value;
      var tam = tamanhoString(txt, indMsg);

      if( tam >= parseInt(tamMax) ) {
         if( indMsg ) alert(mensagem(104, nomeCampo));
         campo.focus();
         return false;
      }
      
      return true;
   } // fim validaTextArea()
   
   /**
    * Tamanho da string passada.
    */
   function tamanhoString(texto, somaUm) {
      var tam = texto.length;
      if( somaUm ) tam + 1;
      return tam;
   } // fim tamanhoString()


   /**
    * Valida o texto digitado nos campos
    * Use: <input ... onBlur="javascript:arrumaCampo(this);">
    */
function arrumaCampo(Campo) {

	var Acentos = " áàãââÁÀÃÂéêÉÊíÍóõôÓÔÕúüÚÜçÇabcdefghijklmnopqrstuvxwyzABCDEFGHIJKLMNOPQRSTUVXYWZ1234567890";
	var Traducao =" AAAAAAAAAEEEEIIOOOOOOUUUUCCABCDEFGHIJKLMNOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXYWZ1234567890";
	var Posic, Carac;
	var TempLog = "";

	for (var i=0; i < Campo.value.length; i++) {
	    Carac = Campo.value.charAt(i);
	    Posic  = Acentos.indexOf(Carac);
	    if (Posic > -1) TempLog += Traducao.charAt(Posic);
	}
	Campo.value = TempLog;
}

   /**
    * Valida se o campo informado está no formato moeda
    * Use: <input ... onBlur="javascript:ehMoeda(this);">
    */
function ehMoeda(campo) {
 var valid    = "0123456789,.";
 var temp;

 for (var i=0; i < campo.value.length; i++) {
    temp = campo.value.charAt(i);

    if (valid.indexOf(temp) == -1)
      return false;
 }

 return true;
}

   /**
    * Valida o campo informado está no formato de telefone. (considerando apenas os caracteres não formato)
    * Use: <input ... onBlur="javascript:ehTelefone(this);">
    */
function ehTelefone(campo)
{
 var valid    = "0123456789-";
 var temp;
  for (var i=0; i < campo.length; i++) {
    temp = campo.substr(i, 1);
    if (valid.indexOf(temp) == -1)
      return false;
  }
return true;
}

function ehNumero(campo) {
  var valid    = "0123456789";
  var temp;
  for (var i=0; i < campo.length; i++) {
    temp = campo.substr(i, 1);
    if (valid.indexOf(temp) == -1)
      return false;
  }
return true;
}

/**
 * Valida o CPF informado.
 * Use: <input ... onBlur="if(!ValidaCPF(this.value)){ alert(mensagem(102,'CPF'));this.focus(); }" > ou
 *      if(!ValidaCPF(document.form.campo.value)){ alert(mensagem(102,'CPF')); document.form.campo.focus(); return false; }
 */
function ValidaCPF(nrodocto) {
  /* -- 
   * Função que valida o cpf através do dígito verificador
   * Retorna True/False
   * -- */  

  var cpf = nrodocto;
  var cpfCalc = cpf.substr(0,9);  
  var cpfSoma = 0;
  var cpfDigit = 0;
  var digit = "";      
  var aux;
  
/*VERIFICA SE TODOS OS NUMEROS NAO SAO IGUAIS */
  aux = cpf.charAt(0);
  for (i = 0; i < 11; i++)
  {
	    if (cpf.charAt(i) != aux){
		i = 11; //para sair do for
	}	
	if 	(i == 10){
		alert("CPF incorreto!");
		return(false);		
	}
  }
	      				    
  for (i = 0; i < 9; i++)
  {
    cpfSoma = cpfSoma + parseInt(cpfCalc.charAt(i)) * (10 - i)
  }
				  
  cpfDigit = 11 - cpfSoma%11;
				    
  if (cpfDigit > 9)
  {
    cpfCalc = cpfCalc + "0";
  }
  else
  {
    digit = digit + cpfDigit;
    cpfCalc = cpfCalc + digit.charAt(0);
  }
				  
  cpfSoma = 0;
				  
  for (i = 0; i < 10; i++) 
  {
    cpfSoma = cpfSoma + parseInt(cpfCalc.charAt(i)) * (11 - i)
  }
				  
  cpfDigit = 11 - cpfSoma%11;
				  
  if (cpfDigit > 9)
  {
    cpfCalc = cpfCalc + "0";
  }
  else
  {
    digit = "";
    digit = digit + cpfDigit;
    cpfCalc = cpfCalc + digit.charAt(0);
  }  
				   
  if (cpf != cpfCalc)
  {
    return(false);
  }
  else
  {
    return(true);
  }
}

/**
 * Valida o CNPJ informado.
 * Use: <input ... onBlur="if(!ValidaCnpj(this.value)){ alert(mensagem(102,'CNPJ'));this.focus(); }" > ou
 *      if(!ValidaCnpj(document.form.campo.value)){ alert(mensagem(102,'CPF')); document.form.campo.focus(); return false; }
 */
function ValidaCNPJ(nrodocto)
{
  /* --
   * Função que valida o cgc/cnpj através do dígito verificador
   * Retorna true/false
   * -- */

  var cnpj = nrodocto;
  var cnpjCalc = cnpj.substr(0,12);  
  var cnpjSoma = 0;
  var cnpjDigit = 0;  
  var digit = "";  
  var aux;
	
/*VERIFICA SE TODOS OS NUMEROS NAO SAO IGUAIS */
  aux = cnpj.charAt(0);
  for (i = 0; i < 14; i++)
  {
    if (cnpj.charAt(i) != aux){
		i = 14; //para sair do for
	}	
	if 	(i == 13){
		alert("CNPJ incorreto!");
		return(false);		
	}
  }    
				  
  for (i = 0;  i < 4;  i++)
  {
    cnpjSoma = cnpjSoma + parseInt(cnpjCalc.charAt(i)) * (5 - i);
  } 
					  
  for (i = 0;  i < 8;  i++)
  {
    cnpjSoma = cnpjSoma + parseInt(cnpjCalc.charAt(i+4)) * (9 - i);            
  }    
					 
  cnpjDigit = 11 - cnpjSoma%11;       

  if ((cnpjDigit == 10) || (cnpjDigit == 11))
  {     
    cnpjCalc = cnpjCalc + "0";        
  }
  else
  {     
    digit = digit + cnpjDigit; 
    cnpjCalc = cnpjCalc + (digit.charAt(0));
  }
					  
  cnpjSoma = 0;
					  
  for (i = 0;  i < 5;  i++)
  {
    cnpjSoma = cnpjSoma + parseInt(cnpjCalc.charAt(i)) * (6 - i);    
  }  
					  
  for (i = 0;  i < 8;  i++)
  {
    cnpjSoma = cnpjSoma + parseInt(cnpjCalc.charAt(i+5)) * (9 - i);    
  }

  cnpjDigit = 11 - cnpjSoma%11;         
					    
  if ((cnpjDigit == 10) || (cnpjDigit == 11))
  {    
    cnpjCalc = cnpjCalc + "0";    
  }
  else
  {     
    digit = "";
    digit = digit + cnpjDigit; 
    cnpjCalc = cnpjCalc + (digit.charAt(0))        
  }
					  
  if (cnpj != cnpjCalc) 
  {
    return(false);
  }
  else
  {
    return(true);
  }
}

   /**
    * Retorna um campo informado sem qquer formatação de separadores
    * Use: <input ... onBlur="javascript: this.value = ehNumero(this);"> ou
    *      var nro = ehNumero(campo.value);
    */
function soNumero(nro) {
	var valid    = "0123456789";
	var numerook = "";
	var temp;

	for (var i=0; i< nro.length; i++) {
    	temp = nro.substr(i, 1);
		if (valid.indexOf(temp) != "-1") 
			numerook = numerook + temp;
	} 
	return(numerook);
}

   /**
    * Aplica a máscara em um campo Telefone
    * Use: <input ... onBlur="javascript:MascaraFone(this, event);" onKeyPress="javascript:MascaraFone(this, event);">
    */
   function MascaraFone(campo, evento) {
	   var fone  = campo.value;
	   var size  = fone.length;
      var tecla = evento.keyCode;

 	   fone = soNumero(fone);

	   if( tecla == 8 ) {
         fone = '';
      } else if( tecla == 9 ) {
         size = size--;
      }

      if( tecla != 9 && ( size >= 3 && size < 8 ) ) {
         fone = fone.substring(0, 3) + '-' + fone.substring(3, size);
      } else if( tecla != 9 && ( size >= 8 ) ) {
         fone = fone.substring(0, 4) + '-' + fone.substring(4, size);
      }
      
   	campo.value = fone;
   } // fim mascaraFone()
   

