/* ----------------------------------------------------------------------------
  sub-Rotina: validarFormulario
  objetivo  : fazer uma validação de todos os campos obrigatórios de um formulários
  parâmetros: strFormulario = nome do formulário que possui os campos a serem validados (se o formulário não possuir um nome deve-se passar "forms[0]"
              strCampos     = string contendo os nomes dos campos obrigatórios separados por vírgula
              strDescricao  = título ou descrição de cada um dos campos as quais serão utilizadas em mensagens para o usuário
              strTipos      = string contendo respectivamente os tipos predefinidos para cada um dos campos. Se um dos campos for obrigatório basta colocar o caracter "*" antes da descricao do tipo.

                ONLYNUMBER - Apenas caracteres de 0 a 9. Nem mesmo virgulas ou pontos são permitidos
                NUMBER     - Caracteres de 0 a 9. Virgulas, pontos, hífens e barras são permitidos
                ONLYTEXT   - Apenas texto. Nenhum tipo de caracter numérico é permitido, mas vírgula a ponto são permitidos.
                TEXT       - Texto. Quaisquer caracteres são permitidos
                DATE       - Apenas numeros e barras "/" são permitidos
                EMAIL      - É o mesmo que o TEXT mas com a validação de "@" e "."
                CHECKBOX   - verifica se tem algum item checkbox marcado
                RADIO      - verifica se tem algum item radio marcado

  retorno   : true  = se todos os campos estiverem corretamente preenchidos
              false = se algum campos não estiver corretamente preenchido
  autor(a)  : Lauriberto Máximo Alves
  data      : 27/02/2002
  situação  : falta validar campos numericos, date, checkbox e radio

  exemplo   : if(validarFormulario('forms[0]','txtNome,txtEmail','TEXT,MAIL','nome,e-mail') )
              {
                document.forms[0].submit();
              }
----------------------------------------------------------------------------*/
function validarFormulario(strFormulario,strCampos,strTipos,strDescricao)
{
  var NUMBER         = "0123456789.,";
  var ONLYNUMBER     = "0123456789";
  var DATE           = "0123456789/";
  var CGC            = "0123456789-/.";
  var CPF            = "0123456789-.";
  
  var MSG_EMAIL      = '\nNão pode conter espaços.\nDeve conter obrigatoriamente arroba "@" e ponto "."';
  var MSG_NUMBER     = '\nApenas pode conter números, virgula ou ponto!';
  var MSG_ONLYNUMBER = '\nApenas pode conter números.\nVírgula ou ponto não são aceitos!';
  var MSG_DATE       = '\nApenas pode conter números e barras!';
  var MSG_ONLYTEXT   = '\nApenas pode conter caracteres não numéricos.';
  var MSG_CGC        = '\nApenas pode conter caracteres numéricos pontos, barras e hífens.\nA quantidade de números pode estar errada ou os dígitos verificadores não conferem.';
  var MSG_CPF        = '\nApenas pode conter caracteres numéricos pontos e hífens.\nA quantidade de números pode estar errada ou os dígitos verificadores não conferem.';
  var MSG_REQUIRED   = 'preenchimento obrigatório!.\n Favor preencher.';

  var i,j;
  var obj;
  var valor;
  var ehObrigatorio;
  var flag     = true;
  var temErro  = false;

  strCampos    = strCampos.split(",");
  strTipos     = strTipos.split(",");
  strDescricao = strDescricao.split(",");

  temErro = temErro || (strCampos.length != strTipos.length);
  temErro = temErro || (strCampos.length != strDescricao.length);
  temErro = temErro || (strTipos .length != strDescricao.length);

  if(temErro)
  {
    return false;
  }

  for(i = 0; i < strCampos.length; i++)
  {
    obj           = eval('document.' + strFormulario + "." + strCampos[i]);
    valor         = obj.value;
    strTipos[i]   = strTipos[i].toUpperCase();
    ehObrigatorio = (strTipos[i].charAt(0) == '*');
    
    //--->>> VALIDAÇÃO DE CAMPOS OBRIGATORIOS <<<------------------------------
    if(ehObrigatorio)
    {
      valor = trim(valor);
      if (valor.length == 0)
      {
        alert('O campo "' + strDescricao[i] + '" possui ' + MSG_REQUIRED);
        flag = false;
        break;
      }
    }

    //--->>> VALIDAÇÃO DE CAMPOS NUMBER <<<------------------------------------
    if(strTipos[i].indexOf('NUMBER') >= 0)
    {
      for(j=0; j < valor.length; j++)
      {
        if (NUMBER.indexOf(valor.charAt(j)) < 0)
        {
          temErro = true;
          break;
        }
      }
      if(temErro)
      {
        alert('O campo "' + strDescricao[i] + '" está preenchido incorretamente!' + MSG_NUMBER);
        flag = false;
        break;
      }
    }

    //--->>> VALIDAÇÃO DE CAMPOS ONLYNUMBER <<<--------------------------------
    if(strTipos[i].indexOf('ONLYNUMBER') >= 0)
    {
      for(j=0; j < valor.length; j++)
      {
        if (ONLYNUMBER.indexOf(valor.charAt(j)) < 0)
        {
          temErro = true;
          break;
        }
      }
      if(temErro)
      {
        alert('O campo "' + strDescricao[i] + '" está preenchido incorretamente!' + MSG_ONLYNUMBER);
        flag = false;
        break;
      }
    }

    //--->>> VALIDAÇÃO DE CAMPOS DATE <<<--------------------------------
    if(strTipos[i].indexOf('DATE') >= 0)
    {
      temErro = temErro || (valor.indexOf('/') != 2);
      temErro = temErro || (valor.lastIndexOf('/') != 5);
      temErro = temErro || (valor.substitui("/","").length != 8);
      for(j=0; j < valor.length; j++)
      {
        if (DATE.indexOf(valor.charAt(j)) < 0)
        {
          temErro = true;
          break;
        }
      }
      if(temErro)
      {
        alert('O campo "' + strDescricao[i] + '" está preenchido incorretamente!' + MSG_DATE);
        flag = false;
        break;
      }
    }

    //--->>> VALIDAÇÃO DE EMAIL <<<--------------------------------------------
    if(strTipos[i].indexOf('EMAIL') >= 0)
    {
      temErro = temErro || (valor.indexOf('@') < 1);
      temErro = temErro || (valor.lastIndexOf('.') < 3);
      temErro = temErro || (valor.indexOf('@') > valor.lastIndexOf('.'));

      if(temErro)
      {
        alert('O campo "' + strDescricao[i] + '" está preenchido incorretamente!' + MSG_EMAIL);
        flag = false;
        break;
      }
    }

    //--->>> VALIDAÇÃO DE CAMPOS ONLYTEXT <<<----------------------------------
    if(strTipos[i].indexOf('ONLYTEXT') >= 0)
    {
      for(j=0; j < valor.length; j++)
      {
        if (ONLYNUMBER.indexOf(valor.charAt(j)) >= 0)
        {
          temErro = true;
          break;
        }
      }
      if(temErro)
      {
        alert('O campo "' + strDescricao[i] + '" está preenchido incorretamente!' + MSG_ONLYTEXT);
        flag = false;
        break;
      }
    }

    //--->>> VALIDAÇÃO DE CAMPOS CPF/CGC <<<----------------------------------
    if(strTipos[i].toUpperCase().indexOf('CGC') >= 0 || strTipos[i].toUpperCase().indexOf('CPF') >= 0)
    {
      valor = valor.substitui(".","");
      valor = valor.substitui("/","");
      valor = valor.substitui("-","");
      if (valor.length == 14)
      {
        temErro = false;   
        //--->>> VALIDAÇÃO DE CAMPOS CGC <<<----------------------------------
        if(strTipos[i].indexOf('CGC') >= 0)
        {
          for(j=0; j < valor.length; j++)
          {
            if (CGC.indexOf(valor.charAt(j)) < 0)
            {
              temErro = true;
              break;
            }
          }

          if(!temErro)
          {
            temErro = !validarCGC(valor);
          }

          if(temErro)
          {
            alert('O campo "' + strDescricao[i] + '" está preenchido incorretamente!' + MSG_CGC);
            flag = false;
            break;
          }
        }
      }
      else
      {
        //--->>> VALIDAÇÃO DE CAMPOS CPF <<<----------------------------------
        temErro = false;   
        if(strTipos[i].indexOf('CPF') >= 0)
        {
          for(j=0; j < valor.length; j++)
          {
            if (CPF.indexOf(valor.charAt(j)) < 0)
            {
              temErro = true;
              break;
            }
          }

          if(!temErro)
          {
            temErro = !validarCPF(valor);
          }

          if(temErro)
          {
            alert('O campo "' + strDescricao[i] + '" está preenchido incorretamente!' + MSG_CPF);
            flag = false;
            break;
          }
        }
      }
    }
  }

  if(!flag)
  {
    try
    {
      obj.focus();
    }
    catch(e)
    {
    }
  }
  return flag;
}

/* ----------------------------------------------------------------------------
  sub-Rotina: 
  objetivo  : 
  parâmetros: 
  retorno   : 
  autor(a)  : Lauriberto Máximo Alves
  data      : 16/07/2002
  situação  : concluída
----------------------------------------------------------------------------*/
  function naoBloquearCaracteres(strValidos)
  {
    var tecla = String.fromCharCode(window.event.keyCode);        //pegando o caracter digitado
    if(strValidos.indexOf(tecla) < 0)                             //se o caracter nao for valido
    {
      window.event.keyCode = 0;                                   //cancelando a tecla pressionada, a responsabilidade de colocar o caracter pressionado dentro do controle será dessa função
    }
  }



/* ----------------------------------------------------------------------------
  sub-Rotina: trim
  objetivo  : remover todos os espacos em branco antes do primeiro caracter e após o ultimo caracter. Substituir a ocorrência de dois em branco consecutivos por apenas um.
  parâmetros: strQualquer = uma string qualquer
  retorno   : a string já transformada
  autor(a)  : Lauriberto Máximo Alves
  data      : 27/02/2002
  situação  : concluída
----------------------------------------------------------------------------*/
function trim(strTexto)
{
  strTexto = new String(strTexto);
  if(strTexto.indexOf('undefined') >= 0)
  {
    strTexto = '';
  }

  while(strTexto.indexOf("  ")>=0)
  {
    //substituindo dois espaços em branco por um
    strTexto.replace(new RegExp("  ","gi")," ");       
  }

  //se o primeiro caracter for um espaço em branco
  if(strTexto.indexOf(" ") == 0)                       
  {
    //então remove o primeiro caracter
    strTexto= strTexto.substring(1,strTexto.length);
  }
  if(strTexto.indexOf(" ") == strTexto.length - 1)  //removendo o ultimo caracter se este for um espaço em branco
  {
    strTexto = strTexto.substring(0,strTexto.length-1);
  }
  return strTexto;
}

/* ----------------------------------------------------------------------------
  sub-Rotina: recuperarArrayParametrosURL
  objetivo  : transformar todos os parâmetros passados pela URL e seus respectivos valores em um array unidimensional no qual os índices dos elementos serão os próprios nomes dos parâmetros e os elementos serão os valores de cada parâmetro.
  parâmetros: nenhum
  retorno   : 
  autor(a)  : Lauriberto Máximo Alves
  data      : 28/02/2002
  situação  : concluída
----------------------------------------------------------------------------*/
function recuperarArrayParametrosURL()
{
  var strQueryString = location.search;
  var arrQueryString = strQueryString.split("&");
  var resultado      = new Array();
  var strParametro;
  var strNomeParametro;
  var strValorParametro;
  var i;

  for(i=0; i < arrQueryString.length; i++)
  {
    strParametro                = arrQueryString[i];
    strNomeParametro            = strParametro.substring(strParametro.indexOf("?")+1,strParametro.indexOf("="));
    strValorParametro           = strParametro.substring(strParametro.indexOf("=")+1,strParametro.length);
    resultado[strNomeParametro] = strValorParametro;
  }
  return resultado;
}

/* ----------------------------------------------------------------------------
  sub-Rotina: abrirJanelaPopup
  objetivo  : Abrir uma nova janela do browser sem exibir barras de menus, ferramentas e status. É possível especificar seu comprimento e sua altura em pixels. A janela sempre será exibida centralizada na tela.
  parâmetros: 
              strUrl         = string contendo o endereço do arquivo a ser aberto.
              intComprimento = numero inteiro que corresponderá ao comprimento em pixels da nova janela.
              intAltura      = numero inteiro que corresponderá à altura em pixels da nova janela
              
  retorno   : nenhum
  autor(a)  : Lauriberto Máximo Alves
  data      : 04/03/2002
  situação  : concluída
----------------------------------------------------------------------------*/
function abrirJanelaPopup(strUrl,intComprimento,intAltura)
{
  var w = window.screen.width;
  var h = window.screen.height;
  var left;
  var top;
  var features = "status=no,resizable=yes,menu=no";

  intComprimento = (new String(intComprimento) == 'undefined')?(Math.round(w/2)):(intComprimento);
  intAltura      = (new String(intAltura)      == 'undefined')?(Math.round(h/2)):(intAltura);
  left           = Math.round((w - parseInt(intComprimento))/2);
  top            = Math.round((h - parseInt(intAltura))/2);
  features      += ',left=' + left + ',top=' + top + ',height=' + intAltura + ',width=' + intComprimento;
 
  window.open(strUrl,"popup",features);
}

/* ----------------------------------------------------------------------------
  sub-Rotina: substitui
  objetivo  : Encontrar todas as ocorrências de uma determinada string chamada de "strIsso" dentro de uma variável objeto String e substituir tais ocorrências por uma nova string "strAquilo"
  parâmetros: strIsso   = string a ser substituída 
              strAquilo = string substituta que pode ser um caracter vazio

  retorno   : String já alterada
  autor(a)  : Lauriberto Máximo Alves
  data      : 04/03/2002
  situação  : concluída
  
  observação: Esta função foi criada porque até a versão 1.3 do JavaScript o método replace do objeto String não funciona corretamente quando se deseja substituir o carcter ponto "." por um caracter vazio "".

  exemplo   : var s = 'abc@#abc@#dd';
              var s = s.substitui('@#,'');
              alert(s);  ... será exibido a string "abcabcdd"
----------------------------------------------------------------------------*/
function substitui(strIsso,strAquilo)
{
  var strOriginal = this.toString();
  var resultado = ""
  var intInicio, intFim;

  while(strOriginal.indexOf(strIsso) >= 0)
  {
    intInicio   = 0;
    intFim      = strOriginal.indexOf(strIsso);
    resultado  += strOriginal.substring(intInicio,intFim) + strAquilo;
    intInicio   = parseInt(intFim) + parseInt(strIsso.length);
    strOriginal = strOriginal.substring(intInicio,strOriginal.length);
  }
  resultado += strOriginal;
  return resultado;
}

String.prototype.substitui = substitui;

/* ----------------------------------------------------------------------------
  sub-Rotina: validarCGC
  objetivo  : dado um numero de CGC contendo pontos "." e barras "/" na forma de string, avaliar se os digitos verificadores estão corretos
  parâmetros: strCGC = uma string contedno todos os digitos de um CGC

  retorno   : true  = se os digitos estiverem correto
              false = se os digitos estiverem errados
  
  autor(a)  : Lauriberto Máximo Alves
  data      : 04/03/2002
  situação  : concluída
----------------------------------------------------------------------------*/
function validarCGC(strCGC)
{
  var d1,d4,d2,Conta,fator,sobra,digito1,digito2;
  var check;

  strCGC = strCGC.substitui(".","");
  strCGC = strCGC.substitui("/","");
  strCGC = strCGC.substitui("-","");

  if (strCGC.length != 14)
  {
    return false;
  }

  d1 = 0;  //valor padrao
  d4 = 0;  //valor padrao
  d2 = 1;  //valor padrao
  for(conta= 0; conta <=strCGC.length -3; conta++)
  {
//    if(strInvalidos.indexOf(strCGC.substr(conta,1)) < 0)
//    {
      if (d2 < 5)
      {
        fator = 6 - d2
      }
      else
      {
        fator = 14 - d2;
      }

      d1 = d1 + strCGC.substr(conta,1)* fator;
      if (d2 < 6)
      {
        fator = 7 - d2;
      }
      else
      {
        fator = 15 - d2;
      }
      d4 = d4 + strCGC.substr(conta,1) * fator;
      d2 = d2 + 1;
//    }
  }
  sobra = (d1 % 11);
  if(sobra < 2)
  {
    digito1 = 0;
  }
  else
  {
    digito1 = 11 - sobra;
  }
  d4 = d4 + (2 * digito1);
  sobra = (d4 % 11);

  if (sobra < 2)
  {
    digito2 = 0;
  }
  else
  {
    digito2 = 11 - sobra;
  }
  check  = new String(digito1) + new String(digito2);
  return (check == strCGC.substr(strCGC.length-2,2));
}

/* ----------------------------------------------------------------------------
  sub-Rotina: validarCPF
  objetivo  : dado um numero de cpf completo contendo pontos "." e hifens "-" avaliar se digitos verificadores estão corretos

  parâmetros: strCPF = uma string contedo todos os dígitos de um numero de cpf
  retorno   : true  = se o numero do cpf estiver correto
              false = se o numero do cpf estiver errado

  autor(a)  : Lauriberto Máximo Alves
  data      : 04/03/2002
  situação  : concluída
----------------------------------------------------------------------------*/
function validarCPF(strCPF)
{
  var strInvalidos = '11111111111 22222222222 33333333333 44444444444 55555555555 66666666666 77777777777 88888888888 99999999999 00000000000';
  var contador, num1, num2, posicao,fator;
  var cpf,digitos;

  strCPF = strCPF.substitui('.','');
  strCPF = strCPF.substitui('-','');

  if (strCPF.length != 11 || strInvalidos.indexOf(strCPF) >= 0)
  {
    return false;
  }
  else
  {
    digitos = strCPF.substr(9,2);
    cpf     = strCPF.substr(0,9);
    fator   = 0;
    for(contador = 1; contador <= cpf.length; contador++)
    {
      fator = fator + contador * cpf.charAt(contador-1);
    }
    num1  = fator % 11;
    if(num1 == 10)
    {
      num1 = 0;
    }

    cpf     = strCPF.substr(0,9) + parseInt(num1);
    fator   = 0;
    posicao = 0;

    for(contador = cpf.length; contador >= 1; contador--)
    {
      fator   = fator + (contador + 1) * cpf.charAt(posicao);
      posicao = posicao + 1;
    }

    num2 = (fator * 10) % 11;
    if (num2 == 10)
    {
      num2 = 0;
    }

    return (new String(num1) + new String(num2) == digitos);
  }
}


/* ----------------------------------------------------------------------------
  sub-Rotina: isDigit
  objetivo  : verificar se um determinado caracter é ou não um dígito
  parâmetros: c
  retorno   : true ou false
  autor(a)  : Giovanni L. Gaio
  data      : 24/09/2002
  situação  : concluída
----------------------------------------------------------------------------*/
function isDigit (c) {
   // o caractere e um numero
   return ((c >= "0") && (c <= "9"))
}



/* ----------------------------------------------------------------------------
  sub-Rotina: isInteger
  objetivo  : verificar se uma determinada string é composta apenas de dígitos
  parâmetros: s
  retorno   : true ou false
  autor(a)  : Giovanni L. Gaio
  data      : 24/09/2002
  situação  : concluída
----------------------------------------------------------------------------*/
function isInteger (s) {
   // todos os carcarteres sao numeros   
   var i;
   for (i = 0; i < s.length; i++){   
      var c = s.charAt(i);
      if (!isDigit(c)) return false;
   }
   return true;
}


/* ----------------------------------------------------------------------------
  sub-Rotina: terminaComDVModulo11
  objetivo  : verificar se o caractere final é o digito verificador módulo 11 correto
  parâmetros: pNum
  retorno   : true ou false
  autor(a)  : Giovanni L. Gaio
  data      : 24/09/2002
  situação  : concluída
----------------------------------------------------------------------------*/
function terminaComDVModulo11 (pNum) {

   if (pNum=="") return false;
   var argc = pNum.length;
   if (argc<=1) return false;

   var nIni= pNum.substring (0, argc -1);
   var nDig= pNum.charAt (argc -1);

   var nRes= calculaDVModulo11( nIni)

   if (nRes<0) return false;
   if (nRes==nDig) return true;
   return false;
}


/* ----------------------------------------------------------------------------
  sub-Rotina: calculaDVModulo11
  objetivo  : calcular dígito Verificador Modulo 11
  parâmetros: pNum
  retorno   : negativo => erro;
  retorno   : positivo => digito verificador
  autor(a)  : Giovanni L. Gaio
  data      : 24/09/2002
  situação  : concluída
----------------------------------------------------------------------------*/
function calculaDVModulo11( pNum) {
// verificar conteudo do parametro pNum
// retorna -1 => parametro vazio
// retorna -2 => tamanho do parametro igual a 0
// retorna -3 => tamanho do parametro ultrapassa 12
// retorna -4 => parametro nao é numérico
if (pNum=="") return -1;
var argc = pNum.length;
if (argc<=0) return -2;
if (argc>12) return -3;
if (!isInteger(pNum)) return -4;

// calculo do digito
var tot=0, j=2;

for (var i = argc -1; i >=0; i--) {
   tot = tot + parseInt(pNum.charAt(i) * j);
   j++;
   if (j>9) j=2;
}

var resto;
resto=tot % 11;
resto=11 - resto;

if (resto == 11)
   digito = "0";
else 
if (resto == 10)
   digito = "X";
else
   digito = resto;

return digito;
}





/* ----------------------------------------------------------------------------
  sub-Rotina: caracteresValidos
  objetivo  : ser chamada a partir do evento keyPress do teclado para permitir 
  a digitação apenas dos caracteres informados como parâmetro
  parâmetros: validos (relacao dos caracteres válidos)
  retorno   : nenhum
  autor(a)  : José Alcione A. Miranda
  data      : 25/09/2002
  situação  : concluída
----------------------------------------------------------------------------*/

function caracteresValidos(validos)
{
  var codTecla = window.event.keyCode;
  var tecla    = String.fromCharCode(codTecla);
  if (validos.indexOf(tecla) < 0)
  {
    window.event.keyCode = 0;
  }
}



/* ----------------------------------------------------------------------------
  sub-Rotina: caracteresValidos
  objetivo  : ser chamada a partir do evento keyPress do teclado para permitir 
  a digitação apenas dos caracteres informados como parâmetro
  parâmetros: validos (relacao dos caracteres válidos)
  retorno   : nenhum
  autor(a)  : José Alcione A. Miranda
  data      : 25/09/2002
  situação  : concluída
----------------------------------------------------------------------------*/

function caracteresInvalidos(invalidos)
{
  var codTecla = window.event.keyCode;
  var tecla    = String.fromCharCode(codTecla);
  if (invalidos.indexOf(tecla) > 0)
  {
    window.event.keyCode = 0;
  }
}






/* ----------------------------------------------------------------------------
  sub-Rotina: 
  objetivo  : 
  parâmetros: 
  retorno   : 
  autor(a)  : Lauriberto Máximo Alves
  data      : 
  situação  : concluída
----------------------------------------------------------------------------*/
function excetoNumeros()
{
  var validos  = "0123456789"
  var codTecla = window.event.keyCode;
  var tecla    = String.fromCharCode(codTecla);
  if (validos.indexOf(tecla) >= 0)
  {
    window.event.keyCode = 0;
  }
}

/* ----------------------------------------------------------------------------
  sub-Rotina: 
  objetivo  : 
  parâmetros: 
  retorno   : 
  autor(a)  : Lauriberto Máximo Alves
  data      : 
  situação  : concluída
----------------------------------------------------------------------------*/
function somenteNumeros()
{
  var validos  = "0123456789"
  var codTecla = window.event.keyCode;
  var tecla    = String.fromCharCode(codTecla);
  if (validos.indexOf(tecla) < 0)
  {
    window.event.keyCode = 0;
  }
}

/* ----------------------------------------------------------------------------
  sub-Rotina: 
  objetivo  : 
  parâmetros: 
  retorno   : 
  autor(a)  : Lauriberto Máximo Alves
  data      : 
  situação  : concluída
----------------------------------------------------------------------------*/
function autoCompletarData(obj)
{
  naoBloquearCaracteres('0123456789');
  if(window.event.keyCode != 8)
  {
    if(obj.value.length == 2 || obj.value.length == 5)
    {
      obj.value += '/';
    }
  }
}

/* ----------------------------------------------------------------------------
  sub-Rotina: 
  objetivo  : 
  parâmetros: 
  retorno   : 
  autor(a)  : Sílvio Costa
  data      : 
  situação  : concluída
----------------------------------------------------------------------------*/
function Upcase(opc) {
  if (document.all) {
    var c = event.keyCode;
    var C = null;
  	if (opc == "U") 
  		C = String.fromCharCode(c).toUpperCase().charCodeAt(); 
  	else 
  	if (opc == "L") 
  		C = String.fromCharCode(c).toLowerCase().charCodeAt(); 
  	if (C != null) event.keyCode = C;
    return true;
  }
  else 
    return true;
}


/* ----------------------------------------------------------------------------
  sub-Rotina: 
  objetivo  : 
  parâmetros: 
  retorno   : 
  autor(a)  : Sílvio Costa
  data      : 
  situação  : concluída
----------------------------------------------------------------------------*/
function limpaValor(s) {
	var result;
	result = s;
	result = result.substitui(".","");
	result = result.substitui(",","");
	
	tam = result.length;
	result = result.substr( 0, tam - 2 ) + ',' + result.substr( tam - 2, tam );
	return result;
}


/* ----------------------------------------------------------------------------
  sub-Rotina: 
  objetivo  : 
  parâmetros: 
  retorno   : 
  autor(a)  : Sílvio Costa
  data      : 
  situação  : concluída
----------------------------------------------------------------------------*/
function formataMoeda(obj) {

	somenteNumeros();
	
 var tecla = window.event.keyCode;
 var tammax = 20;
  
 vr = obj.value;
 vr = vr.substitui( ",", "" );
 vr = vr.substitui( ".", "" );
 tam = vr.length;

 if (tam < tammax && tecla != 8 && tecla != 0){ tam = vr.length + 1 ; }

 if (tecla == 8 ){ tam = tam - 1 ; }
  
 if ( tecla == 0 || tecla == 8 || (tecla >= 48 && tecla <= 57) || (tecla >= 96 && tecla <= 105) ){
   if ( tam <= 2 ){ 
    obj.value = vr ; }
   if ( (tam > 2) && (tam <= 5) ){
    obj.value = vr.substr( 0, tam - 2 ) + ',' + vr.substr( tam - 2, tam ) ; }
   if ( (tam >= 6) && (tam <= 8) ){
    obj.value = vr.substr( 0, tam - 5 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ) ; }
   if ( (tam >= 9) && (tam <= 11) ){
    obj.value = vr.substr( 0, tam - 8 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ) ; }
   if ( (tam >= 12) && (tam <= 14) ){
    obj.value = vr.substr( 0, tam - 11 ) + '.' + vr.substr( tam - 11, 3 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ) ; }
   if ( (tam >= 15) && (tam <= 17) ){
    obj.value = vr.substr( 0, tam - 14 ) + '.' + vr.substr( tam - 14, 3 ) + '.' + vr.substr( tam - 11, 3 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ) ;}
   if ( (tam >= 18) && (tam <= 20) ){
    obj.value = vr.substr( 0, tam - 17 ) + '.' + vr.substr( tam - 17, 3 ) + '.' + vr.substr( tam - 14, 3 ) + '.' + vr.substr( tam - 11, 3 ) + '.' + vr.substr( tam - 8, 3 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ) ;}
 }
 
	return true;
}

/* ----------------------------------------------------------------------------
  sub-Rotina: 
  objetivo  : 
  parâmetros: 
  retorno   : 
  autor(a)  : Sílvio Costa
  data      : 
  situação  : concluída
----------------------------------------------------------------------------*/

function formataCpf(tammax, obj) {

	somenteNumeros();

 var tecla = window.event.keyCode;
  
 var vr = obj.value;
 vr = vr.substitui('.','');
 vr = vr.substitui('-','');
 tam = vr.length;

 if (tam < tammax && tecla != 8 && tecla != 0){ tam = vr.length + 1 ; }

 if (tecla == 8 ){ tam = tam - 1 ; }
  
 if ( tecla == 0 || tecla == 8 || tecla == 13 || (tecla >= 48 && tecla <= 57) || (tecla >= 96 && tecla <= 105) ){
   if ( tam <= 3 ){
    obj.value = vr ; }
   if ( (tam > 3) && (tam <= 7) ){
    obj.value = vr.substr( 0, 3 ) + '.' + vr.substr( 3, 3 ) ; }
   if ( (tam >= 7) && (tam <= 10) ){
    obj.value = vr.substr( 0, 3 ) + '.' + vr.substr( 3, 3 ) + '.' + vr.substr( 6, 3 ) ; }
   if ( (tam >= 10) && (tam <= 11) ){
    obj.value = vr.substr( 0, 3 ) + '.' + vr.substr( 3, 3 ) + '.' + vr.substr( 6, 3 ) + '-' + vr.substr( 9, 2 ) ; }
 }
 
 return true;

}


/* ----------------------------------------------------------------------------
  sub-Rotina: 
  objetivo  : 
  parâmetros: 
  retorno   : 
  autor(a)  : Sílvio Costa
  data      : 
  situação  : concluída
----------------------------------------------------------------------------*/
function formataCnpj(tammax, obj) {

	somenteNumeros();

	var tecla = window.event.keyCode;
  
	var vr = obj.value;
	vr = vr.substitui(".","");
	vr = vr.substitui("/","");
	vr = vr.substitui("-","");
	tam = vr.length;

	if (tam < tammax && tecla != 8 && tecla != 0){ tam = vr.length + 1 ; }
	if (tecla == 8 ){ tam = tam - 1 ; }
 
	if ( tecla == 0 || tecla == 8 || tecla == 13 ||(tecla >= 48 && tecla <= 57) || (tecla >= 96 && tecla <= 105) ){
		if ( tam <= 2 ){ 
			obj.value = vr ; }
		if ( (tam > 2) && (tam <= 5) ){
			obj.value = vr.substr( 0, 2) + '.' + vr.substr( 2, 3 ) ; }
		if ( (tam >= 6) && (tam <= 8) ){
			obj.value = vr.substr( 0, 2) + '.' + vr.substr( 2, 3 ) + '.' + vr.substr( 5, 3 ) ; }
		if ( (tam >= 9) && (tam <= 12) ){
			obj.value = vr.substr( 0, 2) + '.' + vr.substr( 2, 3 ) + '.' + vr.substr( 5, 3 ) + '/' + vr.substr( 8, 4 ) ; }
		if ( (tam >= 13) && (tam <= 13) ){
			obj.value = vr.substr( 0, 2) + '.' + vr.substr( 2, 3 ) + '.' + vr.substr( 5, 3 ) + '/' + vr.substr( 8, 4 ) + '-' + vr.substr( 12, 2 ) ; }
	}  
	return true;
}

/* ----------------------------------------------------------------------------
  sub-Rotina: 
  objetivo  : 
  parâmetros: 
  retorno   : 
  autor(a)  : Sílvio Costa
  data      : 
  situação  : concluída
----------------------------------------------------------------------------*/

function formataMatricula(tammax, obj) {

 caracteresValidos("0123456789Xx");

 var tecla = window.event.keyCode;
  
 var vr = obj.value;
 vr = vr.substitui('.','');
 vr = vr.substitui('-','');
 tam = vr.length;
 
 if (tam < tammax-1){
 	caracteresValidos("0123456789");
 }
 
 if (tam == (tammax-1)){
 	caracteresValidos("0123456789Xx");
 }

 if (tam < tammax && tecla != 8 && tecla != 0){ tam = vr.length + 1 ; }

 if (tecla == 8 ){ tam = tam - 1 ; }
  
 if ( tecla == 0 || tecla == 8 || (tecla >= 48 && tecla <= 57) || (tecla >= 96 && tecla <= 105) ){
  /* if ( tam <= 3 ){ 
    obj.value = vr ; } */
    
   if ((tam > 1) && (tam <= 3)) {
    obj.value = vr.substr( 0, 1 ) + '.' + vr.substr( 1, 2 ) ; }
   if ( (tam > 4) && (tam <= 7) ){
    obj.value = vr.substr( 0, 1 ) + '.' + vr.substr( 1, 3 ) + '.' + vr.substr( 4, 3 ) ; }
   if (tam == 8) {
    obj.value = vr.substr( 0, 1 ) + '.' + vr.substr( 1, 3 ) + '.' + vr.substr( 4, 3 ) + '-' + vr.substr( 7, 1 ); }
 }
 return true;
}


/* ----------------------------------------------------------------------------
  sub-Rotina: 
  objetivo  : 
  parâmetros: 
  retorno   : 
  autor(a)  : Sílvio Costa
  data      : 
  situação  : concluída
----------------------------------------------------------------------------*/
function formataPercentual(obj) {
 somenteNumeros();
	
 var tecla = window.event.keyCode;
 var tammax = 5;
  
 vr = obj.value;
 vr = vr.substitui( "%", "" );
 vr = vr.substitui( " ", "" );
 vr = vr.substitui( ",", "" );
 vr = vr.substitui( ".", "" );
 
 tam = vr.length;

if (tam < tammax) {

	var t = String.fromCharCode(tecla);
	vr = vr + t; 
	tam = vr.length;
	
	if (tam <= tammax && vr <= 10000){
		if (tam <= tammax && tecla != 8 && tecla != 0){ tam = vr.length + 1 ; }
		if (tecla == 8 ){ tam = tam - 1 ; }
		if ( tecla == 0 || tecla == 8 || (tecla >= 48 && tecla <= 57) || (tecla >= 96 && tecla <= 105) ){
			if (tam < 4) {
    			obj.value = vr + "%"; }
			if ((tam >= 4) && (tam <= 5)) {
	    		obj.value = vr.substr( 0, 2 ) + ',' + vr.substr( 2, 2 ) + "%" ; }
			if (tam > 5) {
			    obj.value = vr.substr( 0, 3 ) + ',' + vr.substr( 3, 5 ) + "%"; }
		}
	}

}
 window.event.keyCode = 0;
 return true; 
}
/**
 * 
 */
function marcarCheckBox(checkname, estado){
	var collection = document.getElementsByName(checkname);
	for(var index=0; index<collection.length; index++) {
		var check = collection.item(index);
		check.checked = estado;
	}
}
/* ----------------------------------------------------------------------------
  sub-Rotina: 
  objetivo  : Selecionar todos os checkbox do form principal.
  parâmetros: 
  retorno   : 
  autor(a)  : Thadeu Soares
  data      : 05/07/2005
  situação  : concluída
----------------------------------------------------------------------------*/
var checar = true;
function preencherTodos(){
	var limite=0;
	var todosChecados = true;
	for(var i=document.forms[0].elements.length-1 ; i>=limite ;i--){
		if(document.forms[0].elements[i].name.indexOf("chk")==0) {
			document.forms[0].elements[i].checked=checar;
		}
	}
	checar = !checar;
}