/**
*
* @package Rotinas de Formatação de valores
*/

/**
* Filtra as teclas permitidas como entrada.
* Função usada nas funções de formatação de dados
* @param tecla integer código ASCII da tecla
* @return void
*/

function teclaPermitida(tecla)
{
   switch ( tecla )
   {
      case 9: //tab
      case 35: //home
      case 36: //end
      case 37: //seta esquerda
      case 38: //seta para cima
      case 39: //seta para direita
      case 40: //seta para baixo
      case 46: //delete
        return true;
      default:
        return false;
   }
}

/**
* Formata o valor do campo ao digitar, eliminando os caracteres indesejados.
* O resultado final será uma string com o valor formatado 00.000-00.
* Para funcionar deve ser associado a um evento onkeyup ou onkeydown do objeto.
* @param campo objectTextField Campo tipo text do formulario
* @param prox string Nome do objeto que receberá o proximo foco
* @param evento event Objeto que captura os eventos do teclado do componente.
* @return void
*/

function formataCEP(evento)
{
  if ( !evento ){ evento = window.event; }

  var campo = (evento.target) ? evento.target : evento.srcElement;
  
  var tecla = evento.keyCode;
  var re = /[^0-9]/gi;
 
  if ( teclaPermitida(tecla) ) return false;
 
  valor = campo.value.replace(re,"");
  tam = valor.length;

  if ( tam <= 2 )
  {
     campo.value = valor.substring(0,2);
  }
  else if( tam > 2 && tam <= 5 )
  {
  	  campo.value = valor.substring(0,2) + "." + valor.substring(2,tam);
  }
  else if ( tam > 5 )
  {
     campo.value = valor.substring(0,2) + "." + valor.substring(2,5) + "-" + valor.substring(5,tam);
  }

  if ( campo.value.length >= 10 )
  {
    var prox = campo.getAttribute("next");
    campo.value = campo.value.substring(0,10);
    if ( prox != null ) campo.form[prox].focus();
  }

}

/**
* Formata o valor do campo ao digitar, eliminando os caracteres indesejados.
* O resultado final será uma string com o valor formatado 000.000.000-00
* Para funcionar deve ser associado a um evento onkeyup ou onkeydown do objeto.
* @param campo objectTextField Campo tipo text do formulario
* @param prox string Nome do objeto que receberá o proximo foco
* @param evento event Objeto que captura os eventos do teclado do componente.
* @return void
*/

function formataCPF(evento){

  if (!evento) var evento = window.event;
  var campo = (evento.target) ? evento.target : evento.srcElement;
   
  var tecla = evento.keyCode;
  if ( teclaPermitida(tecla) ) return false;

  var re = /[^0-9]/gi;
  valor = campo.value;
  valor = valor.replace(re,"");
  tam = valor.length;

  if ( tam <= 3 ){
    campo.value = valor.substring(0,tam);
  }else if ( ( tam > 3 ) && ( tam <= 6 ) ){
    campo.value = valor.substring(0,3)+"."+valor.substring(3,tam);
  }else if ( ( tam > 6 ) && ( tam < 9 ) ){
    campo.value = valor.substring(0,3)+"."+valor.substring(3,6)+"."+valor.substring(6,tam);
  }else if ( tam >= 9 ){
    campo.value = valor.substring(0,3)+"."+valor.substring(3,6)+"."+valor.substring(6,9)+"-"+valor.substring(9,tam);
  }

  if ( campo.value.length >= 14 ){
      var prox = campo.getAttribute("next");
      campo.value = campo.value.substring(0,14);
      if ( prox != null ) campo.form[prox].focus();
  }
}

/**
* Formata o valor do campo ao digitar, eliminando os caracteres indesejados.
* O resultado final será uma string com o valor formatado 000.000.000/0000-00.
* Para funcionar deve ser associado a um evento onkeyup ou onkeydown do objeto.
* @param campo objectTextField Campo tipo text do formulario
* @param prox string Nome do objeto que receberá o proximo foco
* @param evento event Objeto que captura os eventos do teclado do componente.
* @return void
*/

function formataCNPJ(evento){
   
  if (!evento) var evento = window.event;
  var campo = (evento.target) ? evento.target : evento.srcElement;

  var tecla = evento.keyCode;
  if ( teclaPermitida(tecla) ) return false;

  var re = /[^0-9]/gi;
  valor = campo.value;
  valor = valor.replace(re,"");
  tam = valor.length;

  if ( tam <= 2 ){
    campo.value = valor.substring(0,tam);
  }else if ( ( tam > 2 ) && ( tam <= 5 ) ) {
    campo.value = valor.substring(0,2) + "." + valor.substring(2,tam);
  }else if ( ( tam > 5 ) && ( tam <= 8 ) ) {
    campo.value = valor.substring(0,2) + "." + valor.substring(2,5) + "." + valor.substring(5,tam);
  }else if ( ( tam > 8 ) && ( tam < 12 ) ){
    campo.value = valor.substring(0,2) + "." + valor.substring(2,5) + "." + valor.substring(5,8) + "/" + valor.substring(8,tam);
  }else if ( tam >= 12 ){
    campo.value = valor.substring(0,2) + "." + valor.substring(2,5) + "." + valor.substring(5,8) + "/" + valor.substring(8,12) + "-" +valor.substring(12,tam);
  }

  if ( campo.value.length >= 18 ){
    var prox = campo.getAttribute("next");
    campo.value = campo.value.substring(0,18);
    if ( prox != null ) campo.form[prox].focus();
  }

}

/**
* Formata o valor do campo ao digitar, eliminando os caracteres indesejados.
* O resultado final será uma string com o valor formatado (MM/YYYY).
* Para funcionar deve ser associado a um evento onkeyup ou onkeydown do objeto.
* @param campo objectTextField Campo tipo text do formulario
* @param prox string Nome do objeto que receberá o proximo foco
* @param tammax integer Tamanho maximo do texto
* @return void
*/

function formataMemo(evento){
   
  if (!evento) var evento = window.event;
  var campo = (evento.target) ? evento.target : evento.srcElement;
  
  var prox = campo.getAttribute("next");
  var tammax = campo.getAttribute("maxlength");
  if ( tammax == null ) return false;

  if ( campo.value.length >= tammax ){
    campo.value = campo.value.substring(0,tammax);
    if ( prox != null ) campo.form[prox].focus();
  }

}

/**
* Formata o valor do campo ao digitar, eliminando os caracteres indesejados.
* O resultado final será uma string com o valor formatado (MM/YYYY).
* Para funcionar deve ser associado a um evento onkeyup ou onkeydown do objeto.
* @param campo objectTextField Campo tipo text do formulario
* @param prox string Nome do objeto que receberá o proximo foco
* @param evento event Objeto event
* @return void
*/

function formataMesAno(evento)
{
  if (!evento) var evento = window.event;
  var campo = (evento.target) ? evento.target : evento.srcElement;
   
  /* formato MM/YYYY */
  var tecla = evento.keyCode;
  if ( teclaPermitida(tecla) ) return false;

  var re = /[^0-9]/gi;
  valor = campo.value;
  valor = valor.replace(re,"");
  tam   = valor.length;

  if ( tam <= 2 )
  {
    campo.value = valor.substring(0,tam);
  }
  else if ( tam > 2 )
  {
    campo.value = valor.substring(0,2)+"/"+valor.substring(2,tam);
  }

  if ( campo.value.length >= 7 )
  {
    var prox = campo.getAttribute("next");
    campo.value = campo.value.substring(0,7);
    if ( prox != null ) campo.form[prox].focus();
  }

}

/**
* Formata o valor do campo ao digitar, eliminando os caracteres indesejados.
* O resultado final será uma string com o valor formatado (DD/MM/YYYY).
* Para funcionar deve ser associado a um evento onkeyup ou onkeydown do objeto.
* @param campo objectTextField Campo tipo text do formulario
* @param prox string Nome do objeto que receberá o proximo foco
* @param evento event Objeto event
* @return void
*/

function formataData(evento)
{
  if (!evento) var evento = window.event;
  var campo = (evento.target) ? evento.target : evento.srcElement;
   
  var tecla = evento.keyCode;
  if ( teclaPermitida(tecla) ) return false;

  var re = /[^0-9]/gi;
  valor = campo.value;
  valor = valor.replace(re,"");
  tam   = valor.length;

  if ( tam <= 2 ){
    campo.value = valor.substring(0,tam);
  }else if ( ( tam > 2 ) && ( tam <= 4 ) ){
    campo.value = valor.substring(0,2)+"/"+valor.substring(2,tam);
  }else if ( tam >=5 ){
    campo.value = valor.substring(0,2)+"/"+valor.substring(2,4)+"/"+valor.substring(4,tam);
  }

  if ( campo.value.length >= 10 ){
    campo.value = campo.value.substring(0,10);
    var prox = campo.getAttribute("next");    
    if ( prox != null ) campo.form[prox].focus();
  }
}

/**
* Formata o valor do campo ao digitar, eliminando os caracteres indesejados.
* O resultado final será uma string com o valor formatado,com separador de
* decimal e milhar.Deve ser chamada com o evento onkeyup ou onkeydown do objeto.
* Para funcionar deve ser associado a um evento onkeyup ou onkeydown do objeto.
* @param campo objectTextField Campo tipo text do formulario
* @param evento event Objeto event
* @return void
*/

function formataValor(evento){

  if (!evento) var evento = window.event;
  var campo = (evento.target) ? evento.target : evento.srcElement;
   
  var tecla = evento.keyCode;
  if ( teclaPermitida(tecla) ) return false;

  var re = /[^0-9]/gi;
  valor = campo.value;
  valor = valor.replace(re,"");
  tam   = valor.length;

  if ( tam <= 2 )
  {
     campo.value = valor.substring(0,tam);
  }
  else
  {
     var nCasas = tam - 2;
     if ( nCasas > 3 )
     {
       nInicio = nCasas % 3;
       sParteInteira = valor.substring(0,nInicio);

       for(var i = nInicio;i < nCasas;i+=3)
       {
         if ( sParteInteira != "" ) sParteInteira+= '.';
         sParteInteira+= valor.substring(i,i+3);
       }
       campo.value = sParteInteira + "," + valor.substring(tam-2,tam);
     }
     else
     {
       campo.value = valor.substring(0,tam-2) + "," + valor.substring(tam-2,tam);
     }
  }

}

/**
* Formata o valor do campo ao digitar, eliminando os caracteres indesejados.
* Pode-se tambem limitar o comprimento da cadeia e indicar para o próximo campo.
* A funcão deve ser associada ao evento onkeyup ou onkeydown.
* @param campo objectTextField Campo tipo text do formulario
* @param evento event Objeto event
* @param tammax integer Tamanho máximo permitido do valor do campo, antes de mudar o foco.
* @param prox string Nome do objeto por onde será tranferido o foco.
* @return void
*/

function formataNumero(evento){

  if (!evento) var evento = window.event;
  var campo = (evento.target) ? evento.target : evento.srcElement;
   
  var tecla = evento.keyCode;
  if ( teclaPermitida(tecla) ) return false;

  var re = /[^0-9]/gi;
  valor = campo.value;
  valor = valor.replace(re,"");
  tam   = valor.length;

  campo.value = valor.substring(0,tam);

  var prox = campo.getAttribute("next");
  var tammax = campo.getAttribute("maxlength");
  if ( tammax == null ) return;
  
  if ( campo.value.length == tammax )
  {
     if ( prox != null ) campo.form[prox].focus();
  }

}

/**
* Formata o valor do campo ao digitar, eliminando os caracteres indesejados.
* A funcão deve ser associada ao evento onkeyup ou onkeydown.
* @param campo objectTextField Campo tipo text do formulario
* @param prox string Nome do objeto por onde será tranferido o foco.
* @param evento event Objeto event
* @return void
*/

function formataHora(evento){

  if (!evento) var evento = window.event;
  var campo = (evento.target) ? evento.target : evento.srcElement;
   
  var tecla = evento.keyCode;
  if ( teclaPermitida(tecla) ) return false;

  var re = /[^0-9]/gi;
  valor = campo.value;
  valor = valor.replace(re,"");
  tam   = valor.length;

  if ( tam <= 2 ){
    campo.value = valor.substring(0,tam);
  }else if ( tam > 2 ){
    campo.value = valor.substring(0,2)+":"+valor.substring(2,tam);
  }

  if ( campo.value.length >= 5 ){
    campo.value = campo.value.substring(0,5);
    var prox = campo.getAttribute("next");    
    if ( prox != null ) campo.form[prox].focus();
  }

}

function tratarEntidadesHTML(sValor)
{
   // Caracteres especiais 
   /*sValor = sValor.replace(/&/gi,"&amp;");
   sValor = sValor.replace(/\"/gi,"&quot;");
   sValor = sValor.replace(/ª/gi,"&ordf;");
   sValor = sValor.replace(/º/gi,"&ordm;");
   sValor = sValor.replace(/º/gi,"&ordm;");
   sValor = sValor.replace(/°/gi,"&deg;");
   sValor = sValor.replace(/²/gi,"&sup2;");
   sValor = sValor.replace(/³/gi,"&sup3;");
   sValor = sValor.replace(/§/gi,"&sect");
   
   // Acento agudo 
   sValor = sValor.replace(/á/gi,"&aacute;");
   sValor = sValor.replace(/é/gi,"&eacute;");
   sValor = sValor.replace(/í/gi,"&iacute;");
   sValor = sValor.replace(/ó/gi,"&oacute;");
   sValor = sValor.replace(/ú/gi,"&uacute;");
   
   sValor = sValor.replace(/Á/gi,"&Aacute;");
   sValor = sValor.replace(/É/gi,"&Eacute;");
   sValor = sValor.replace(/Í/gi,"&Iacute;");
   sValor = sValor.replace(/Ó/gi,"&Oacute;");
   sValor = sValor.replace(/Ú/gi,"&Uacute;");
   
   // Crase
   sValor = sValor.replace(/à/gi,"&agrave;");
   sValor = sValor.replace(/è/gi,"&egrave;");
   sValor = sValor.replace(/ì/gi,"&igrave;");
   sValor = sValor.replace(/ò/gi,"&ograve;");
   sValor = sValor.replace(/ù/gi,"&ugrave;");
   
   sValor = sValor.replace(/À/gi,"&Agrave;");
   sValor = sValor.replace(/È/gi,"&Egrave;");
   sValor = sValor.replace(/Ì/gi,"&Igrave;");
   sValor = sValor.replace(/Ò/gi,"&Ograve;");
   sValor = sValor.replace(/Ù/gi,"&Ugrave;");
   
   // Til 
   sValor = sValor.replace(/â/gi,"&acirc;");
   sValor = sValor.replace(/ê/gi,"&ecirc;");
   sValor = sValor.replace(/î/gi,"&icirc;");
   sValor = sValor.replace(/ô/gi,"&ocirc;");
   sValor = sValor.replace(/û/gi,"&ucirc;");
   
   sValor = sValor.replace(/Â/gi,"&Acirc;");
   sValor = sValor.replace(/Ê/gi,"&Ecirc;");
   sValor = sValor.replace(/Î/gi,"&Icirc;");
   sValor = sValor.replace(/Ô/gi,"&Ocirc;");
   sValor = sValor.replace(/Û/gi,"&Ucirc;");
   
   // Trema
   sValor = sValor.replace(/ä/gi,"&atrema;");
   sValor = sValor.replace(/ë/gi,"&etrema;");
   sValor = sValor.replace(/ï/gi,"&itrema;");
   sValor = sValor.replace(/ö/gi,"&otrema;");
   sValor = sValor.replace(/ü/gi,"&utrema;");
   
   sValor = sValor.replace(/Ä/gi,"&Atrema;");
   sValor = sValor.replace(/Ë/gi,"&Etrema;");
   sValor = sValor.replace(/Ï/gi,"&Itrema;");
   sValor = sValor.replace(/Ö/gi,"&Otrema;");
   sValor = sValor.replace(/Ü/gi,"&Utrema;");
   
   // Acento circunflexo 
   sValor = sValor.replace(/ã/gi,"&atilde;");
   sValor = sValor.replace(/õ/gi,"&otilde;");
   
   sValor = sValor.replace(/Ã/gi,"&Atilde;");
   sValor = sValor.replace(/Õ/gi,"&Otilde;");*/
   
   sValor = sValor.replace(/&/g,"&#38;");
   sValor = sValor.replace(/\"/g,"&#34;");
   sValor = sValor.replace(/ª/g,"&#170;");
   sValor = sValor.replace(/º/g,"&#186;");
   sValor = sValor.replace(/º/g,"&#186;");
   sValor = sValor.replace(/°/g,"&#176;");
   sValor = sValor.replace(/²/g,"&#178;");
   sValor = sValor.replace(/³/g,"&#179;");
   sValor = sValor.replace(/§/g,"&#167;");
   
   /* Acento agudo */
   sValor = sValor.replace(/á/g,"&#225;");
   sValor = sValor.replace(/é/g,"&#233;");
   sValor = sValor.replace(/í/g,"&#237;");
   sValor = sValor.replace(/ó/g,"&#243;");
   sValor = sValor.replace(/ú/g,"&#250;");
   
   sValor = sValor.replace(/Á/g,"&#193;");
   sValor = sValor.replace(/É/g,"&#201;");
   sValor = sValor.replace(/Í/g,"&#205;");
   sValor = sValor.replace(/Ó/g,"&#211;");
   sValor = sValor.replace(/Ú/g,"&#218;");
   
   /* Crase */
   sValor = sValor.replace(/à/g,"&#224;");
   sValor = sValor.replace(/è/g,"&#232;");
   sValor = sValor.replace(/ì/g,"&#236;");
   sValor = sValor.replace(/ò/g,"&#242;");
   sValor = sValor.replace(/ù/g,"&#249;");
   
   sValor = sValor.replace(/À/g,"&#192;");
   sValor = sValor.replace(/È/g,"&#200;");
   sValor = sValor.replace(/Ì/g,"&#204;");
   sValor = sValor.replace(/Ò/g,"&#210;");
   sValor = sValor.replace(/Ù/g,"&#217;");
   
   /* Til */
   sValor = sValor.replace(/â/g,"&#226;");
   sValor = sValor.replace(/ê/g,"&#234;");
   sValor = sValor.replace(/î/g,"&#238;");
   sValor = sValor.replace(/ô/g,"&#244;");
   sValor = sValor.replace(/û/g,"&#251;");
   
   sValor = sValor.replace(/Â/g,"&#194;");
   sValor = sValor.replace(/Ê/g,"&#202;");
   sValor = sValor.replace(/Î/g,"&#206;");
   sValor = sValor.replace(/Ô/g,"&#212;");
   sValor = sValor.replace(/Û/g,"&#219;");
   
   /* Trema */
   sValor = sValor.replace(/ä/g,"&#228;");
   sValor = sValor.replace(/ë/g,"&#235;");
   sValor = sValor.replace(/ï/g,"&#239;");
   sValor = sValor.replace(/ö/g,"&#246;");
   sValor = sValor.replace(/ü/g,"&#252;");
   
   sValor = sValor.replace(/Ä/g,"&#196;");
   sValor = sValor.replace(/Ë/g,"&#203;");
   sValor = sValor.replace(/Ï/g,"&#207;");
   sValor = sValor.replace(/Ö/g,"&#214;");
   sValor = sValor.replace(/Ü/g,"&#220;");
   
   /* Acento circunflexo */
   sValor = sValor.replace(/ã/g,"&#227;");
   sValor = sValor.replace(/õ/g,"&#245;");
   
   sValor = sValor.replace(/Ã/g,"&#195;");
   sValor = sValor.replace(/Õ/g,"&#213;");
   
   /* Cedilha */
   sValor = sValor.replace(/Ç/g,"&#199;");
   sValor = sValor.replace(/ç/g,"&#231;");
   
   return sValor;
}