// ---------------------------------------------------------------------------------------
// Valida um determinado campo de acordo com seu tipo
//
// Parâmetros: field - campo a ser verificado
//             tipoval - tipo da validação:
//                       0 = verificar string
//                       1 = verificar números
//                       2 = verificar datas
//                       3 = verificar se a string está ou não vazia
//                       4 = verificar numeros entre 0 e 9
// ---------------------------------------------------------------------------------------
function F_ValidField1(field,tipoval)
 {
  with (field)
   {
    value = F_Trim1(value);
    checkvalue = value;
    checksize  = value.length;
   }

// Validação de string
  if (tipoval == 0)
    var checkOK = "'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzƒŠŒŽšœžŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþ- \t\r\n\f";

// Validação de números
  else if (tipoval == 1)
    var checkOK = "0123456789-.";

// Verificação se a string está ou não vazia
  else if (tipoval == 3)
   {
    if (F_Vazio1(field.value,""))
      return(false);
    else
      return(true);
   }

// Verificação de números entre 0 e 9
  else if (tipoval == 4)
    var checkOK = "0123456789";

  var allValid = true;

// Se for verificação de números ou de string
  if (tipoval <= 1 || tipoval == 4)
   {
    var decPoints = 0;
    var allNum = "";
    for (i = 0; i < checksize; i++)
     {
      ch = checkvalue.charAt(i);
      for (j = 0; j < checkOK.length; j++)
        if (ch == checkOK.charAt(j))
          break;

      if (j == checkOK.length)
       {
        allValid = false;
        break;
       }

      if (ch != ".")
        allNum += ch;
     }
   }

// Verificação de datas
  else
   {
    if (checksize == 8)
     {
      var dia2 = checkvalue.substring(0,2);
      var mes2 = checkvalue.substring(2,4);
      var ano2 = checkvalue.substring(4,8);
      field.value = dia2 + "/" + mes2 + "/" + ano2;
      checkvalue = field.value;
      checksize  = field.value.length;
     }

    if (checksize == 10 || checksize == 19)
     {
      if (checkvalue.charAt(2) != "/"  || checkvalue.charAt(5) != "/")
        return false;

      var dia = checkvalue.substring(0,2);
      var mes = checkvalue.substring(3,5);
      var ano = checkvalue.substring(6,10);
      var hor = checkvalue.substring(11,13);
      var min1 = checkvalue.substring(14,16);
      var seg = checkvalue.substring(17,19);

      if (hor == '')
        hor = '00'

      if (min1 == '')
        min1 = '00'

      if (seg == '')
        seg = '00'

      if (isNaN(dia) || isNaN(mes) || isNaN(ano) || isNaN(hor) || isNaN(min1) || isNaN(seg))
        return false;

      else if (hor < '00' || hor > '23' || min1 < '00' || min1 > '59' || seg < '00' || seg > '59')
        return false;

      mes--;

      calDate = new Date(ano, mes, dia);

      if (calDate.getDate() == dia && calDate.getMonth() == mes && calDate.getUTCFullYear() == ano)
        allValid = true;
      else
        allValid = false;
     }
    else
      return (false);
   }

  return (allValid);
 }

// ---------------------------------------------------------------------------------------
// Verifica se a data é menor do que a data mínima
//
// Parâmetros: checkdata - data a ser verificada
//             anomin    - menor ano aceito
// ---------------------------------------------------------------------------------------
function F_IsMinDate(checkdata, anomin)
 {
  var dia = checkvalue.substring(0,2);
  var mes = checkvalue.substring(3,5);
  var ano = checkvalue.substring(6,10);
	
  if (isNaN(dia) || isNaN(mes) || isNaN(ano))
    return false;

  calDate = new Date(ano, mes, dia);
	
  if (calDate.getUTCFullYear() > anomin)
    return false;
  else
    return true;
 }

// ---------------------------------------------------------------------------------------
// Verifica os números de um campo de CPF
//
// Parâmetros: strcpf - CPF a ser validado
// ---------------------------------------------------------------------------------------
function F_ValidCpf(strcpf)
 {
  var wSomaDosProdutos=0;
  var wResto=0;
  var wDigitChk=0;
  var wDigitChk2=0;
  var wStatus=0;
  var wI=0;
  var ncpf = "";
  var num1;

  for (wI = 0; wI < strcpf.length; wI++)
   {
    num1 = strcpf.substring(wI, wI+1);

    if (isNaN(num1) == false)
     ncpf = ncpf + num1;
   }

  strcpf = ncpf;

  for (wI = 0; wI < 9; wI++)
    wSomaDosProdutos += parseInt( strcpf.substring(wI, wI+1),10 ) * (11 - (wI+1) );

  var wResto = wSomaDosProdutos - parseInt( wSomaDosProdutos / 11 ) * 11;
  if (wResto == 0 || wResto == 1)
    wDigitChk1 = 0;
  else
    wDigitChk1 = 11 - wResto;

  wSomaDosProdutos = 0;
  for (wI = 0;wI<9;wI++)
    wSomaDosProdutos += parseInt(strcpf.substring(wI,wI+ 1),10) * (12 - (wI+1));
	
  wSomaDosProdutos += 2 * wDigitChk1;
  wResto = wSomaDosProdutos - parseInt(wSomaDosProdutos / 11) * 11;

  if (wResto == 0 || wResto == 1)
    wDigitChk2 = 0;
  else
    wDigitChk2 = 11-wResto ;

  var ch1 = strcpf.charAt(9);
  var ch2 = strcpf.charAt(10);
	
  if (parseInt(ch1) == wDigitChk1 && parseInt(ch2) == wDigitChk2)
    return (true);
  else
    return (false);
 }

// ---------------------------------------------------------------------------------------
// Evento OnBlur para campos data, para preencher com barras entre os números
//
// Parâmetros: checkdata - data a ser preenchida
// ---------------------------------------------------------------------------------------
function F_OnBlurDate1(checkdata)
 {
  checkdata.value = F_Trim1(checkdata.value);

  if (checkdata.value.length == 8)
   {
    var dia = checkdata.value.substring(0,2);
    var mes = checkdata.value.substring(2,4);
    var ano = checkdata.value.substring(4,8);
    checkdata.value = dia + "/" + mes + "/" + ano;
   }
 }

// -----------------------------------------------------------------------------
// Evento OnBlur para campos data e hora, para preencher com barras e dois
// pontos entre os números
//
// Parâmetros: checkdata - data a ser preenchida
// -----------------------------------------------------------------------------
function F_OnBlurDateTime1(checkdata)
 {
  checkdata.value = F_Trim1(checkdata.value);

  if (checkdata.value.length == 8)
   {
    F_OnBlurDate1(checkdata);
    checkdata.value = checkdata.value + ' 00:00:00';
   }

  else if (checkdata.value.length == 10)
    checkdata.value = checkdata.value + ' 00:00:00';

  if (checkdata.value.length == 12 || checkdata.value.length == 14)
   {
    var dia = checkdata.value.substring(0,2);
    var mes = checkdata.value.substring(2,4);
    var ano = checkdata.value.substring(4,8);
    var hor = checkdata.value.substring(8,10);
    var min = checkdata.value.substring(10,12);
    var seg = checkdata.value.substring(12,14);

    if (seg == '')
      seg = '00';

    checkdata.value = dia + "/" + mes + "/" + ano + " " + hor + ":" + min + ":" + seg;
   }
 }

// ---------------------------------------------------------------------------------------
// Evento OnBlur para campos CPF, para preencher com . e - entre os números
//
// Parâmetros: checkcpf - CPF a ser preenchido
// ---------------------------------------------------------------------------------------
function F_OnBlurCpf1(checkcpf)
 {
  if (checkcpf.value.length == 11)
   {
    var cpf1 = checkcpf.value.substring(0,3);
    var cpf2 = checkcpf.value.substring(3,6);
    var cpf3 = checkcpf.value.substring(6,9);
    var cpf4 = checkcpf.value.substring(9,11);

    checkcpf.value = cpf1 + "." + cpf2 + "." + cpf3 + "-" + cpf4;
   }
 }

// ---------------------------------------------------------------------------------------
// Evento OnBlur para campos CEP, para preencher com - entre os números
//
// Parâmetros: checkcpf - CEP a ser preenchido
// ---------------------------------------------------------------------------------------
function F_OnBlurCep1(checkcep)
 {
  if (checkcep.value.length == 8)
   {
    var cep1 = checkcep.value.substring(0,5);
    var cep2 = checkcep.value.substring(5,8);

    checkcep.value = cep1 + "-" + cep2;
   }
 }

// ---------------------------------------------------------------------------------------
// Evento OnBlur para campos telefone, para preencher com espaço entre os números
//
// Parâmetros: _txttele - Campo telefone a ser preenchido
// ---------------------------------------------------------------------------------------
function F_OnBlurTel1(_txttele)
 {
  if (_txttele.value.length == 8 && _txttele.value.substr(3,1) != " ")
   {
    var tel1 = _txttele.value.substr(0,4);
    var tel2 = _txttele.value.substr(4,4);

    _txttele.value = tel1 + " " + tel2;
   }

  else if (_txttele.value.length == 7)
   {
    var tel1 = _txttele.value.substr(0,3);
    var tel2 = _txttele.value.substr(3,7);

    _txttele.value = tel1 + " " + tel2;
   }
 }

// ---------------------------------------------------------------------------------------
// Grava um cookie na máquina do usuário
//
// Parâmetros: Nome - nome do cookie a ser gravado
//             Valor - valor do cookie
//             Expira - data de expiração
// ---------------------------------------------------------------------------------------
function F_GravarCookie(Nome, Valor, Expira)
 {
  document.cookie = Nome + "=" + escape(Valor) + ((Expira == null) ? "" : (";expires=" + Expira.toGMTString()));
 }

// ---------------------------------------------------------------------------------------
// Apaga um cookie na máquina do usuário
//
// Parâmetros: Nome - nome do cookie a ser apagado
// ---------------------------------------------------------------------------------------
function F_ApagarCookie(Nome)
 {
  Data = new Date(1900,01,01);
  Valor = "";

  document.cookie = Nome + "=" + escape(Valor) + ((Data == null) ? "" : (";expires=" + Data.toGMTString()));
 }

// ---------------------------------------------------------------------------------------
// Lê um cookie na máquina do usuário
//
// Parâmetros: Nome - nome do cookie a ser lido
// ---------------------------------------------------------------------------------------
function F_LerCookie(Nome)
 {
  Result = "";
  Busca = Nome + "=";

  if (document.cookie.length > 0)
   {
    Posic = document.cookie.indexOf(Busca);

    if (Posic != -1)
     {
      Posic += Busca.length;
      Fim = document.cookie.indexOf(";", Posic);

      if (Fim == -1)
        Fim = document.cookie.length;

      Result = unescape(document.cookie.substring(Posic, Fim));
     }
   }

  return (Result);
 }

// ---------------------------------------------------------------------------------------
// Preenche o início de uma string com determinado caracter
//
// Parâmetros: Campo : Campo a preencher
//             Carac : Caracter de preenchimento
//             Tam1  : Tamanho a preencher
// ---------------------------------------------------------------------------------------
function F_FillEsq(Campo, Carac, Tam1)
 {
  Str1 = new String(Campo);
  Tam2 = Str1.length;
  Ret = "";

  for(ind1 = 1; ind1 <= Tam1 - Tam2; ind1++)
    Ret = Ret + Carac;

  return (Ret + Campo);
 }

// --------------------------------------------------------------------------------
// Função F_Preenche2
// Objetivo: Preencher uma determinada string com espaços até atingir um determinado
//           tamanho
// Parâmetros: string1 - String a ser preenchida
//             tamfin1 - Tamanho final da string
//  -------------------------------------------------------------------------------- */
function F_Preenche2(string1, tamfin1)
 {
  Str1 = new String(string1);
  Str2 = new String(string1);
  tam1 = Str1.length;

  for(ind1 = tam1;ind1 < tamfin1; ind1++)
    Str2 = Str2 + " ";

  return (Str2);
 }

// ---------------------------------------------------------------------------------------
// Calcular o dígito verificador do código de barras através do módulo 10
//
// Parâmetros: Numero : String contendo os números para o cálculo do dígito verificador
// ---------------------------------------------------------------------------------------
function F_Modulo10(Numero)
 {
// Inicia o multiplicador com 2
  num1 = new String(Numero);
  var mult = 2;
  soma = new String("");
  var tam1 = num1.length;
  var ind1 = 0;

  for (ind1 = tam1 - 1; ind1 >= 0; ind1--)
   {
    soma = soma + String(parseInt(num1.substr(ind1,1)) * mult);

  // Alterna o multiplicador entre 1 e 2
    if (mult == 2)
      mult = 1;
    else
      mult = 2;
   }

// Obtém a soma dos dígitos encontrados
  som1 = 0;
  for (ind1 = 0; ind1 <= soma.length - 1; ind1++)
    som1 = som1 + parseInt(soma.substr(ind1,1));

// Obtém o resto da divisão da soma por 10
  rest = som1 % 10;

  if (rest == 0)
    return ("0");
  else
    return (String(10 - rest));
 }

// ---------------------------------------------------------------------------------------
// Obter a descrição do copyright na tela
// ---------------------------------------------------------------------------------------
function F_CopyRight1()
 {
  document.write("<table align='center'>");
  document.write("  <tr>");
  document.write("    <td align='center' valign='bottom'>");
  document.write("      <font size='1'>");
  document.write("        <p>");
  document.write("        &copy FACAPA Todos os direitos reservados");
  document.write("      </font>");
  document.write("    </td>");
  document.write("  </tr>");
  document.write("</table>");

  return (true);
 }

// ---------------------------------------------------------------------------------------
// Verifica se um determinado campo está vazio
//
// Parâmetros: ST_valor - Valor a ser verificado
//             ST_mens  - Mensagem a ser exibida caso o valor esteja em branco
// ---------------------------------------------------------------------------------------
function F_Vazio1(ST_valor, ST_mens)
 {
  var SI_ind1=0;
  var BO_vazio=true;

  if (ST_valor.length != 0)
   {
    for (SI_ind1 = 0; SI_ind1 < ST_valor.length; SI_ind1++)
      if (ST_valor.substr(SI_ind1,1) != " ")
       {
        BO_vazio=false;
        break;
       }
   }

  if (BO_vazio == false)
    return(false);
  else
   {
    if (ST_mens != "")
      alert(ST_mens);

    return(true);
   }
 }

// ---------------------------------------------------------------------------------------
// Verifica se um determinado valor é número inteiro
//
// Parâmetros: ST_valo - Valor a ser verificado
// ---------------------------------------------------------------------------------------
function F_IsNumInt1(ST_valo)
 {
  var ST_nume = "0123456789";
  var BO_vali = true;
  var ST_car1 = "";

  if (ST_valo.length > 0)
    BO_vali = true;
  else
    BO_vali = false;

  for (SI_ind1 = 0; SI_ind1 < ST_valo.length; SI_ind1++)
   {
    ST_car1 = ST_valo.charAt(SI_ind1);

    for (SI_ind2 = 0; SI_ind2 < ST_nume.length; SI_ind2++)
      if (ST_car1 == ST_nume.charAt(SI_ind2))
        break;

    if (SI_ind2 == ST_nume.length)
     {
      BO_vali = false;
      break;
     }
   }

  return(BO_vali);
 }

// ---------------------------------------------------------------------------------------
// Obtém o valor do item selecionado de um radiobutton
//
// Parâmetros: _RadioBtn - RadioButton a ser verificado
// ---------------------------------------------------------------------------------------
function F_ValorRadio1(_RadioBtn)
 {
  var SI_valor = -1;
  var SI_ind1 = 0;

  for (SI_ind1 = 0; SI_ind1 < _RadioBtn.length; SI_ind1++)
    if (_RadioBtn[SI_ind1].checked)
      SI_valor = SI_ind1 + 1;

  return (String(SI_valor));
 }

// ---------------------------------------------------------------------------------------
// Obtém o valor do item selecionado de um radiobutton
//
// Parâmetros: _RadioBtn - RadioButton a ser verificado
// ---------------------------------------------------------------------------------------
function F_ValorRadio2(_RadioBtn)
 {
  var SI_valor = -1;
  var SI_ind1 = 0;

  for (SI_ind1 = 0; SI_ind1 < _RadioBtn.length; SI_ind1++)
    if (_RadioBtn[SI_ind1].checked)
      SI_valor = SI_ind1 + 1;

  if (SI_valor == "-1")
    return("");
  else
    return(_RadioBtn[SI_valor - 1].value);
 }

// ---------------------------------------------------------------------------------------
// Verifica se um determinado valor numérico é real
//
// Parâmetros: ST_nume - Número a ser verificado
//             ST_mens - Mensagem a ser exibida caso o valor não seja real. Se for = ""
//                       não exibe mensagem
// ---------------------------------------------------------------------------------------
function F_IsFloatNum1(ST_nume, ST_mens)
 {
  var TI_ind1 = 0;
  var BO_reto = false;
  var BO_virg = false;

  ST_nume = F_Trim1(ST_nume);

  if (ST_nume.length > 0)
    BO_reto = true;
  else
    BO_reto = false;

  BO_virg = false;

  for(TI_ind1 = 0; TI_ind1 < ST_nume.length; TI_ind1++)
    if (ST_nume.charAt(TI_ind1) < '0' || ST_nume.charAt(TI_ind1) > '9')
      if ((ST_nume.charAt(TI_ind1) == '.' || ST_nume.charAt(TI_ind1) == ',') && (BO_virg == false))
        BO_virg = true;
      else
       {
        BO_reto = false;
        break;
       }

  if (BO_reto == true)
    return(true);
  else
   {
    if (ST_mens != "")
      alert(ST_mens);

    return(false);
   }
 }

// ---------------------------------------------------------------------------------------
// Verifica se um determinado valor é número inteiro
//
// Parâmetros: ST_valo - Valor a ser verificado
//             ST_mens - Mensagem a ser exibida caso o valor não seja inteiro. Se for = ""
//                       nenhuma mensagem será exibida
// ---------------------------------------------------------------------------------------
function F_IsNumInt2(ST_valo, ST_mens)
 {
  var BO_reto = F_IsNumInt1(ST_valo);

  if (BO_reto == false && ST_mens != "")
    alert(ST_mens);

  return(BO_reto);
 }

// --------------------------------------------------------------------------------
// Função F_FormatDate1
// Objetivo: Converter uma data obtida do MySQL do formato yyyy-mm-dd hh:mm:ss para
//           dd/mm/yyyy
// Parâmetros: DT_data - Data a ser convertida
//  --------------------------------------------------------------------------------
function F_FormatDate1(DT_data)
 {
  DT_data1 = new String(DT_data);

  if (DT_data != "")
    if (DT_data1.substr(2,1) != "/" && DT_data1.substr(5,1) != "/")
      return(DT_data1.substr(8,2) + "/" + DT_data1.substr(5,2) + "/" + DT_data1.substr(0,4));
    else
      return(DT_data1);
  else
    return("");
 }

// --------------------------------------------------------------------------------
// Função F_FormatDate2
// Objetivo: Converter uma data obtida do MySQL do formato yyyy-mm-dd hh:mm:ss para
//           dd/mm/yyyy hh:mm:ss
// Parâmetros: DT_data - Data a ser convertida
//  --------------------------------------------------------------------------------
function F_FormatDate2(DT_data)
 {
  DT_data1 = new String(DT_data);

  if (DT_data1 != "")
    if (DT_data1.substr(2,1) != "/" && DT_data1.substr(5,1) != "/")
      return(DT_data1.substr(8,2) + "/" + DT_data1.substr(5,2) + "/" + DT_data1.substr(0,4) + DT_data1.substr(10,9));
    else
      return(DT_data1);
  else
    return("");
 }

// -----------------------------------------------------------------------------
// Função F_FormatDate3
// Objetivo: Converter uma data no formato dd/mm/yyyy hh:mm:ss para
//           yyyy-mm-dd hh:mm:ss
// Parâmetros: DT_data - Data a ser convertida
//  ----------------------------------------------------------------------------
function F_FormatDate3(DT_data)
 {
  DT_data1 = new String(DT_data);

  if (DT_data1 != "")
    if (DT_data1.substr(2,1) != "-" && DT_data1.substr(5,1) != "-")
      return(DT_data1.substr(6,4) + "-" + DT_data1.substr(3,2) + "-" + DT_data1.substr(0,2) + DT_data1.substr(10,9));
    else
      return(DT_data1);
  else
    return("NULL");
 }

// --------------------------------------------------------------------------------
// Função F_Browse1
// Objetivo: Preparar e chamar a janela de exibição de dados de uma consulta
// Parâmetros: ST_colsele - Array com as colunas a consultar
//             ST_tabsele - Tabela(s) a serem consultas (na mesma sintaxe do SQL,
//                          com INNER JOIN ou OUTER JOIN para unir várias tabelas)
//             ST_consele - Condição da consulta
//             ST_ordsele - Ordem de exibição do resultado
//             ST_colexib - Array com as Colunas a exibir
//             ST_campos  - Campos a serem atribuídos. Não colocar entre aspas
//             ST_colatr  - Colunas a atribuir
//  --------------------------------------------------------------------------------
function F_Browse1(ST_colsele, ST_tabsele, ST_consele, ST_ordsele, ST_colexib, ST_campos, ST_colatr)
 {
  VC_para = "?";

// Colunas a selecionar
  for (SI_ind1 = 0; SI_ind1 < ST_colsele.length; SI_ind1++)
    VC_para = VC_para + "ColSele" + SI_ind1 + "=" + ST_colsele[SI_ind1] + "&";

  VC_para = VC_para + "ColSele=" + ST_colsele.length + "&";
  VC_para = VC_para + "TabSele=" + ST_tabsele + "&";
  VC_para = VC_para + "ConSele=" + ST_consele + "&";
  VC_para = VC_para + "OrdSele=" + ST_ordsele + "&";

// Colunas a exibir
  for (SI_ind1 = 0; SI_ind1 < ST_colexib.length; SI_ind1++)
    VC_para = VC_para + "ColExib" + SI_ind1 + "=" + ST_colexib[SI_ind1] + "&";

  VC_para = VC_para + "ColExib=" + ST_colexib.length + "&";

// Colunas a ser atribuídas
  for (SI_ind1 = 0; SI_ind1 < ST_colatr.length; SI_ind1++)
    VC_para = VC_para + "ColAtr" + SI_ind1 + "=" + ST_colatr[SI_ind1] + "&";

  VC_para = VC_para + "ColAtr=" + ST_colatr.length;

  ST_reto = window.showModalDialog("Browse_1.php" + VC_para + "&data=new Date()",self,"dialogHeight: 600px; dialogWidth: 800px; dialogTop: 0px; dialogLeft: 0px; edge: Raised; center: Yes; help: No; resizable: Yes; status: Yes;");

  if (ST_reto != null)
   {
  // Campos a ser atribuídos, caso seja selecionada uma linha
    ST_reto1 = "";

    for (SI_ind1 = 0; SI_ind1 < ST_campos.length; SI_ind1++)
      ST_reto1 = ST_reto1 + ST_reto[SI_ind1];

    if (F_Vazio1(ST_reto1,""))
      alert('Nenhum item correspondente foi encontrado.');
    else
      for (SI_ind1 = 0; SI_ind1 < ST_campos.length; SI_ind1++)
       {
        ST_campos[SI_ind1].value = ST_reto[SI_ind1];
        ST_reto1 = ST_reto1 + ST_reto[SI_ind1];
       }
   }
 }

// --------------------------------------------------------------------------------
// Função F_Browse2
// Objetivo: Preparar e chamar a janela de exibição de dados de uma consulta
// Parâmetros: ST_colsele - Array com as colunas a consultar
//             ST_tabsele - Tabela(s) a serem consultas (na mesma sintaxe do SQL,
//                          com INNER JOIN ou OUTER JOIN para unir várias tabelas)
//             ST_consele - Condição da consulta
//             ST_ordsele - Ordem de exibição do resultado
//             ST_colexib - Array com as Colunas a exibir
//             ST_campos  - Campos a serem atribuídos. Observar que, diferentemente
//                          de F_Browse1, devem estar entre aspas
//             ST_colatr  - Colunas a atribuir
//             ST_conlimit - Expressão com as colunas a usar na limitação do
//                           resultado, podendo conter funções como CONCAT e LPAD
//             ST_colexiblimit - Coluna a exibir na limitação do resultado, sem
//                               alias e ponto
//             ST_numlimit - Número limite do resultado. Recomendado entre 50 e 100
//  --------------------------------------------------------------------------------
function F_Browse2(ST_colsele, ST_tabsele, ST_consele, ST_ordsele, ST_colexib, ST_campos, ST_colatr, ST_conlimit, ST_colexiblimit, ST_numlimit)
 {
  VC_para = "?";

// Colunas a selecionar
  for (SI_ind1 = 0; SI_ind1 < ST_colsele.length; SI_ind1++)
    VC_para = VC_para + "ColSele" + SI_ind1 + "=" + ST_colsele[SI_ind1] + "&";

  VC_para = VC_para + "ColSele=" + ST_colsele.length + "&";
  VC_para = VC_para + "TabSele=" + ST_tabsele + "&";
  VC_para = VC_para + "ConSele=" + ST_consele + "&";
  VC_para = VC_para + "OrdSele=" + ST_ordsele + "&";

// Colunas a exibir
  for (SI_ind1 = 0; SI_ind1 < ST_colexib.length; SI_ind1++)
   {
    VC_para = VC_para + "ColExib" + SI_ind1 + "=" + F_ObtItem2(ST_colexib[SI_ind1],1,';') + "&";

    if (F_ObtItem2(ST_colexib[SI_ind1],2,';') != "")
      VC_para = VC_para + "Ali" + SI_ind1 + "=" + F_ObtItem2(ST_colexib[SI_ind1],2,';') + "&";

    if (F_ObtItem2(ST_colexib[SI_ind1],3,';') != "")
      VC_para = VC_para + "For" + SI_ind1 + "=" + F_ObtItem2(ST_colexib[SI_ind1],3,';') + "&";

    if (F_ObtItem2(ST_colexib[SI_ind1],4,';') != "")
      VC_para = VC_para + "Wid" + SI_ind1 + "=" + F_ObtItem2(ST_colexib[SI_ind1],4,';') + "&";
   }

  VC_para = VC_para + "ColExib=" + ST_colexib.length + "&";

// Campos a atribuir
  for (SI_ind1 = 0; SI_ind1 < ST_campos.length; SI_ind1++)
    VC_para = VC_para + "Campos" + SI_ind1 + "=" + ST_campos[SI_ind1] + "&";

  VC_para = VC_para + "Campos=" + ST_campos.length + "&";

// Colunas a ser atribuídas
  for (SI_ind1 = 0; SI_ind1 < ST_colatr.length; SI_ind1++)
    VC_para = VC_para + "ColAtr" + SI_ind1 + "=" + ST_colatr[SI_ind1] + "&";

  VC_para = VC_para + "ColAtr=" + ST_colatr.length;
  VC_para = VC_para + "&ConLimit=" + ST_conlimit;
  VC_para = VC_para + "&ColExibLimit=" + ST_colexiblimit;
  VC_para = VC_para + "&NumLimit=" + ST_numlimit;

  ObjJan = "F_Browse2";
  window.open("Browse_1.php" + VC_para,ObjJan,"location=no,menubar=no,toolbar=no,resizable=yes,scrollbars=yes,status=yes");
 }

// --------------------------------------------------------------------------------
// Função F_Browse3
// Objetivo: Preparar e chamar a janela de exibição de dados de uma consulta
// Parâmetros: ST_colsele - Array com as colunas a consultar
//             ST_tabsele - Tabela(s) a serem consultas (na mesma sintaxe do SQL,
//                          com INNER JOIN ou OUTER JOIN para unir várias tabelas)
//             ST_consele - Condição da consulta
//             ST_ordsele - Ordem de exibição do resultado
//             ST_colexib - Array com as Colunas a exibir
//             ST_campos  - Campos a serem atribuídos. Observar que, diferentemente
//                          de F_Browse1, devem estar entre aspas
//             ST_colatr  - Colunas a atribuir
//             ST_conlimit - Expressão com as colunas a usar na limitação do
//                           resultado, podendo conter funções como CONCAT e LPAD
//             ST_colexiblimit - Coluna a exibir na limitação do resultado, sem
//                               alias e ponto
//             ST_numlimit - Número limite do resultado. Recomendado entre 50 e 100
//             ST_Config - Array com as configurações da coluna. Posições
//                         0 - Comandos JavaScript a executar após a escolha de
//                             um item
//                         1 - Tamanho da tabela de dados
//                         2 - Comandos JavaScript a executar quando nenhum item
//                             for encontrado
//                         3 - S para exibir a janela mesmo quando houver apenas
//                             um item
//  --------------------------------------------------------------------------------
function F_Browse3(ST_colsele, ST_tabsele, ST_consele, ST_ordsele, ST_colexib, ST_campos, ST_colatr, ST_conlimit, ST_colexiblimit, ST_numlimit, ST_config)
 {
  VC_para = "";

// Colunas a selecionar
  for (SI_ind1 = 0; SI_ind1 < ST_colsele.length; SI_ind1++)
    VC_para = VC_para + "ColSele" + SI_ind1 + " /*/ " + ST_colsele[SI_ind1] + " /*/ ";

  VC_para = VC_para + "ColSele /*/ " + ST_colsele.length + " /*/ ";
  VC_para = VC_para + "TabSele /*/ " + ST_tabsele + " /*/ ";
  VC_para = VC_para + "ConSele /*/ " + ST_consele + " /*/ ";
  VC_para = VC_para + "OrdSele /*/ " + ST_ordsele + " /*/ ";

// Colunas a exibir
  for (SI_ind1 = 0; SI_ind1 < ST_colexib.length; SI_ind1++)
   {
    VC_para = VC_para + "ColExib" + SI_ind1 + " /*/ " + F_ObtItem2(ST_colexib[SI_ind1],1,';') + " /*/ ";

    if (F_ObtItem2(ST_colexib[SI_ind1],2,';') != "")
      VC_para = VC_para + "Ali" + SI_ind1 + " /*/ " + F_ObtItem2(ST_colexib[SI_ind1],2,';') + " /*/ ";

    if (F_ObtItem2(ST_colexib[SI_ind1],3,';') != "")
      VC_para = VC_para + "For" + SI_ind1 + " /*/ " + F_ObtItem2(ST_colexib[SI_ind1],3,';') + " /*/ ";

    if (F_ObtItem2(ST_colexib[SI_ind1],4,';') != "")
      VC_para = VC_para + "Wid" + SI_ind1 + " /*/ " + F_ObtItem2(ST_colexib[SI_ind1],4,';') + " /*/ ";
   }

  VC_para = VC_para + "ColExib /*/ " + ST_colexib.length + " /*/ ";

// Campos a atribuir
  for (SI_ind1 = 0; SI_ind1 < ST_campos.length; SI_ind1++)
    VC_para = VC_para + "Campos" + SI_ind1 + " /*/ " + ST_campos[SI_ind1] + " /*/ ";

  VC_para = VC_para + "Campos /*/ " + ST_campos.length + " /*/ ";

// Colunas a ser atribuídas
  for (SI_ind1 = 0; SI_ind1 < ST_colatr.length; SI_ind1++)
    VC_para = VC_para + "ColAtr" + SI_ind1 + " /*/ " + ST_colatr[SI_ind1] + " /*/ ";

  VC_para = VC_para + "ColAtr /*/ " + ST_colatr.length;
  VC_para = VC_para + " /*/ ConLimit /*/ " + ST_conlimit;
  VC_para = VC_para + " /*/ ColExibLimit /*/ " + ST_colexiblimit;
  VC_para = VC_para + " /*/ NumLimit /*/ " + ST_numlimit;

// Parâmetros de configuração da janela a ser montada
  for (SI_ind1 = 0; SI_ind1 < ST_config.length; SI_ind1++)
    VC_para = VC_para + " /*/ Config" + SI_ind1 + " /*/ " + ST_config[SI_ind1];

  VC_para = VC_para + " /*/ Config /*/ " + ST_config.length;

// Grava as informações em um cookie
  F_GravarCookie('GL_browse', VC_para, null);

  ObjJan = "F_Browse3";
  window.open("Browse_1.php?ST_new=S",ObjJan,"location=no,menubar=no,toolbar=no,resizable=yes,scrollbars=yes,status=yes");
 }

// --------------------------------------------------------------------------------
// Função F_ObtItem1
// Objetivo: Obter um determinado item de uma string, cujos itens sejam separados
//           por //*//
// Parâmetros: VC_string - String com os itens a pesquisar
//             TI_item - Número do item a ser localizado
//  --------------------------------------------------------------------------------
function F_ObtItem1(VC_string, TI_item)
 {
  TI_ind1 = 1;
  VC_string2 = new String("");
  VC_string1 = new String(VC_string);

  while (TI_ind1 <= TI_item)
   {
    for (SI_fim = 0; SI_fim < VC_string1.length; SI_fim++)
      if (VC_string1.substr(SI_fim,3) == "/*/")
        break;

    if (SI_fim >= VC_string.length)
      SI_fim = 0;

    if (SI_fim == 0)
     {
      SI_fim = VC_string1.length - 1;

      if (TI_ind1 == TI_item)
        VC_string2 = VC_string1;

      break;
     }
    else
     {
      if (TI_ind1 == TI_item)
       {
        VC_string2 = VC_string1.substring(0,SI_fim);
        break;
       }

      VC_string1 = VC_string1.substring(SI_fim + 3,VC_string1.length);
     }

    TI_ind1++;
   }

  return(VC_string2);
 }

// --------------------------------------------------------------------------------
// Função F_ObtItem2
// Objetivo: Obter um determinado item de uma string, cujos itens sejam separados
//           por uma string informada
// Parâmetros: VC_string - String com os itens a pesquisar
//             TI_item - Número do item a ser localizado
//             VC_sepa - String separadora
//  --------------------------------------------------------------------------------
function F_ObtItem2(VC_string, TI_item, VC_sepa)
 {
  TI_ind1 = 1;
  VC_string2 = new String("");
  VC_string1 = new String(VC_string);
  VC_string3 = new String(VC_sepa);

  SI_tam1 = VC_string3.length;

  while (TI_ind1 <= TI_item)
   {
    for (SI_fim = 0; SI_fim < VC_string1.length; SI_fim++)
      if (VC_string1.substr(SI_fim,SI_tam1) == VC_sepa)
        break;

    if (SI_fim >= VC_string.length)
      SI_fim = 0;

    if (SI_fim == 0)
     {
      SI_fim = VC_string1.length - 1;

      if (TI_ind1 == TI_item)
        VC_string2 = VC_string1;

      break;
     }
    else
     {
      if (TI_ind1 == TI_item)
       {
        VC_string2 = VC_string1.substring(0,SI_fim);
        break;
       }

      VC_string1 = VC_string1.substring(SI_fim + SI_tam1,VC_string1.length);
     }

    TI_ind1++;
   }

  return(VC_string2);
 }

// --------------------------------------------------------------------------------
// Função F_ValorCheckBox1
// Objetivo: Determinar o valor de um checkbox
// Parâmetros: _CheckBox1 - CheckBox a ser verificado
//             ST_sele - Valor quando selecionado
//             ST_unsele - Valor quando não-selecionado
//  --------------------------------------------------------------------------------
function F_ValorCheckBox1(_CheckBox1, ST_sele, ST_unsele)
 {
  if (_CheckBox1.checked)
    return(ST_sele);
  else
    return(ST_unsele);
 }

// --------------------------------------------------------------------------------
// Função F_FocusBrowse1
// Objetivo: Determinar se o cursor irá permanecer ou não em um campo de pesquisa
// Parâmetros: ST_Codi - Valor campo código a ser verificado. Se vazio, o cursor
//                       irá permanecer no campo de pesquisa. Caso contrário será
//                       chamado o evento blur
//             _CmpPesq - Campo de pesquisa
//  --------------------------------------------------------------------------------
function F_FocusBrowse1(ST_Codi,_CmpPesq)
 {
  if (!F_Vazio1(ST_Codi,""))
    _CmpPesq.blur();
 }

// --------------------------------------------------------------------------------
// Função F_OnKeyDownCep1
// Objetivo: Formatar campos CEP durante a digitação
// Parâmetros: _CmpCep - Campo cep a ser formatado
//  --------------------------------------------------------------------------------
function F_OnKeyDownCep1(_CmpCep)
 {
  if (!F_Vazio1(_CmpCep.value,""))
    if (event.keyCode < 96 || event.keyCode > 105)
      event.returnValue = false;
    else if (_CmpCep.value.length == 5)
      _CmpCep.value = _CmpCep.value + '-';
 }

// --------------------------------------------------------------------------------
// Função F_ConvFloat1
// Objetivo: Converter um valor float em uma string, colocando . para separar
//           as casas decimais
// Parâmetros: VC_valor - Valor a ser convertido
//  --------------------------------------------------------------------------------
function F_ConvFloat1(VC_valor)
 {
  TI_ind1 = 1;
  VC_valo = new String(VC_valor);

  for (SI_ind1 = 0; SI_ind1 < VC_valo.length; SI_ind1++)
   {
    ST_car1 = VC_valo.charAt(SI_ind1);

    if (ST_car1 == ',')
      VC_valo = VC_valo.substring(0,SI_ind1) + '.' + VC_valo.substring(SI_ind1 + 1,VC_valo.length);
   }

  if (VC_valo == "")
    return(0);
  else
    return(parseFloat(VC_valo));
 }

// --------------------------------------------------------------------------------
// Função F_IsNull1
// Objetivo: Verificar se um valor está vazio e, neste caso, subsitituir por outro
// Parâmetros: VC_valo1 - Valor a ser analisado
//             VC_valo2 - Valor a substituir
//  --------------------------------------------------------------------------------
function F_IsNull1(VC_valo1, VC_valo2)
 {
  if (F_Vazio1(VC_valo1,""))
    return(VC_valo2);
  else
    return(VC_valo1);
 }

// -----------------------------------------------------------------------------
// Verificar se uma data é maior do que a outra, exibindo, opcionalmente, uma
// mensagem de erro
//
// Parâmetros: ST_data1 - Data que não pode ser maior
//             ST_data2 - Data que deveria ser maior
// -----------------------------------------------------------------------------
function F_CompData1(ST_data1, ST_data2, ST_mens)
 {
  var ST_data3 = "";
  var ST_data4 = "";

  if (ST_data1.length != 0 && ST_data2.length != 0)
   {
    ST_data3 = ST_data1.substring(6,10) + ST_data1.substring(3,5) + ST_data1.substring(0,2);
    ST_data4 = ST_data2.substring(6,10) + ST_data2.substring(3,5) + ST_data2.substring(0,2);

    if (ST_data3 > ST_data4)
     {
      alert(ST_mens);
      return(false);
     }
    else
      return(true);
   }
  else
    return(true);
 }

// --------------------------------------------------------------------------------
// Função F_ValorCurr1
// Objetivo: Formatar um valor Currency, colocando vírgula no lugar de ponto, para
//           exibição
// Parâmetros: ST_valo - Valor a ser formatado
// -------------------------------------------------------------------------------- */
function F_ValorCurr1(ST_valo)
 {
  var ST_reto = "";
  var ST_cade = "N";
  var ST_virg = "N";
  var TI_nuca = 0;

  if (ST_valo != "")
   {
    for (SI_ind1 = 0; SI_ind1 < ST_valo.length; SI_ind1++)
     {
      if (ST_valo.substr(SI_ind1,1) == ",")
       {
        ST_virg = "S";
        break;
       }

      if (ST_valo.substr(SI_ind1,1) != ".")
        ST_reto = ST_reto . ST_valo.substr(SI_ind1,1);
      else
       {
        ST_reto = ST_reto + ",";
        ST_cade = "S";
       }

      if (ST_cade == "S")
        TI_nuca++;

      if (TI_nuca == 3)
        break;
     }

    if (ST_virg == "S")
      ST_reto = ST_valo;
    else if (TI_nuca == 0)
      ST_reto = ST_reto + ",00";
    else if (TI_nuca == 2)
      ST_reto = ST_reto + "0";
   }

  return(ST_reto);
 }

// -----------------------------------------------------------------------------
// Função F_ObtDados1
// Objetivo: Obter dados de um cadastro, a partir de uma chave, e mostrá-los na
//           tela em campos de um formulário. Usar quando não tiver campos OLD
// Parâmetros: _CmpCod - Campo correspondente a chave, que será verificado se
//                       está ou não vazio
//             _CmpNome - Campo correspondente ao nome ou descrição, que será
//                        focado caso o campo´chave esteja em branco
//             VC_colu - String com as colunas a selecionar, da mesma forma como
//                       se constrói um SELECT
//             VC_tab - Tabela(a) do Select (Cláusula FROM)
//             VC_cond - Condição do SELECT (Cláusula WHERE)
//             VC_camp - Campos a atribuir separados por vírgula
// -----------------------------------------------------------------------------
function F_ObtDados1(_CmpCod, _CmpNome, VC_colu, VC_tab, VC_cond, VC_camp)
 {
  if (F_Vazio1(_CmpCod.value,''))
   {
    _CmpNome.focus();
    event.returnValue=false;
   }
  else
   {
    document.all.FrmDados.src='Select_1.php?ST_col=' + VC_colu +
                              '&ST_tab=' + VC_tab +
                              '&ST_con=' + VC_cond +
                              '&ST_cmp=' + VC_camp;
    event.returnValue=true;
   }
 }

// -----------------------------------------------------------------------------
// Função F_ObtDados2
// Objetivo: Obter dados de um cadastro, a partir de uma chave, e mostrá-los na
//           tela em campos de um formulário. Usar quando não tiver campos OLD
// Parâmetros: _CmpCod - Campo correspondente a chave, que será verificado se
//                       está ou não vazio
//             _CmpCodOld - _CmpCod na versão OLD
//             _CmpNome - Campo correspondente ao nome ou descrição, que será
//                        focado caso o campo´chave esteja em branco
//             _CmpNomeOld - _CmpNome na versão OLD
//             VC_colu - String com as colunas a selecionar, da mesma forma como
//                       se constrói um SELECT
//             VC_tab - Tabela(a) do Select (Cláusula FROM)
//             VC_cond - Condição do SELECT (Cláusula WHERE)
//             VC_camp - Campos a atribuir separados por vírgula
// -----------------------------------------------------------------------------
function F_ObtDados2(_CmpCod, _CmpCodOld, _CmpNome, _CmpNomeOld, VC_colu, VC_tab, VC_cond, VC_camp)
 {
  if (F_Vazio1(_CmpCod.value,''))
   {
    _CmpNome.focus();
    event.returnValue=false;
   }
  else if (_CmpCod.value != _CmpCodOld.value || _CmpNome.value != _CmpNomeOld.value)
   {
    document.all.FrmDados.src='Select_1.php?ST_col=' + VC_colu +
                              '&ST_tab=' + VC_tab +
                              '&ST_con=' + VC_cond +
                              '&ST_cmp=' + VC_camp;
   }
 }

// -----------------------------------------------------------------------------
// Função F_VerCodigo1
// Objetivo: Verificar se um código opcionalmente informado é numérico e se a
//           descrição correspondente foi encontrada
// Parâmetros: _CmpCod - Campo correspondente ao código
//             _CmpDesc - Campo correspondente ao nome ou descrição
//             VC_men1 - Mensagem quando o campo código não for numérico
//             VC_men2 - Mensagem quando o campo descrição estiver vazio (não
//                       encontrado)
// -----------------------------------------------------------------------------
function F_VerCodigo1(_CmpCod, _CmpDesc, VC_men1, VC_men2)
 {
  BO_reto = true;

  if (F_Vazio1(_CmpCod.value,'') == false)
   {
    if (F_IsNumInt1(_CmpCod.value) == false)
     {
      _CmpCod.focus();
      _CmpCod.select();
      alert(VC_men1);
      BO_reto = false;
     }

    else if (F_Vazio1(_CmpDesc.value,VC_men2) == true)
     {
      _CmpCod.focus();
      _CmpCod.select();
      BO_reto = false;
     }
   }
  return (BO_reto);
 }

// -----------------------------------------------------------------------------
// Função F_VerCodigo2
// Objetivo: Verificar se um código obrigatoriamente informado é numérico e se a
//           descrição correspondente foi encontrada
// Parâmetros: _CmpCod - Campo correspondente ao código
//             _CmpDesc - Campo correspondente ao nome ou descrição
//             VC_men1 - Mensagem quando o campo código não for numérico
//             VC_men2 - Mensagem quando o campo descrição estiver vazio (não
//                       encontrado)
//             VC_men3 - Mensagem quando o campo código não foi informado
// -----------------------------------------------------------------------------
function F_VerCodigo2(_CmpCod, _CmpDesc, VC_men1, VC_men2, VC_men3)
 {
  BO_reto = true;

  if (F_Vazio1(_CmpCod.value,VC_men3) == false)
   {
    if (F_IsNumInt1(_CmpCod.value) == false)
     {
      _CmpCod.focus();
      _CmpCod.select();
      alert(VC_men1);
      BO_reto = false;
     }

    else if (F_Vazio1(_CmpDesc.value,VC_men2) == true)
     {
      _CmpCod.focus();
      _CmpCod.select();
      BO_reto = false;
     }
   }
  else
   {
    _CmpCod.focus();
    _CmpCod.select();
    BO_reto = false;
   }

  return (BO_reto);
 }

// -----------------------------------------------------------------------------
// Função F_StretchImage1
// Objetivo: Redimensionar uma imagem na tela de forma que ela se encaixo em
//           determinadas coordenadas
// Parâmetros: SI_height - Altura máxima da imagem
//             SI_width  - Largura máxima da imagem
//             _Image1   - Componente da imagem (Nome do <IMG>)
// -----------------------------------------------------------------------------
function F_StretchImage1(SI_height, SI_width, _Image1)
 {
// Tamanho padrão
  SI_height1 = SI_height;
  SI_width1  = SI_width;

// Calcula a melhor altura e largura
  if ((SI_height1 * 100) / _Image1.height <= (SI_width1 * 100) / _Image1.width)
    RE_porc = (SI_height1 * 100) / _Image1.height
  else
    RE_porc = (SI_width1 * 100) / _Image1.width;

  SI_height1 = _Image1.height * RE_porc / 100;
  SI_width1  = _Image1.width * RE_porc / 100;

  _Image1.height = SI_height1;
  _Image1.width  = SI_width1;
 }

// -----------------------------------------------------------------------------
// Função F_SelectOption1
// Objetivo: Modificar o selectedIndex de um SELECT para o índice que corresponda
//           a um determinado valor
// Parâmetros: _select - Objeto select
//             ST_valo - Valor da opção a ser selecionada
// -----------------------------------------------------------------------------
function F_SelectOption1(_select, ST_valo)
 {
  SI_ind1 = 0;

  for (SI_ind1 = 0; SI_ind1 < _select.options.length; SI_ind1++)
    if (_select.options[SI_ind1].value == ST_valo)
     {
      _select.options[SI_ind1].selectedIndex = SI_ind1;
      break;
     }
 }

// -----------------------------------------------------------------------------
// Função F_LTrim1
// Objetivo: Retirar espaços em branco no início de uma string
// Parâmetros: ST_string - String a ser analisada
// -----------------------------------------------------------------------------
function F_LTrim1(ST_string)
 {
  var BO_inic = true;
  var ST_ltrim = '';
  var ST_str1 = new String(ST_string);
  var TI_ind1;

  for (TI_ind1 = 0; TI_ind1 < ST_str1.length; TI_ind1++)
   {
    if (ST_str1.charAt(TI_ind1) != ' ' && BO_inic == true)
      BO_inic = false;

    if (BO_inic == false)
      ST_ltrim = ST_ltrim + ST_str1.charAt(TI_ind1);
   }

  if (BO_inic == true)
    ST_ltrim = '';

  return (ST_ltrim);
 }

// -----------------------------------------------------------------------------
// Função F_RTrim1
// Objetivo: Retirar espaços em branco no final de uma string
// Parâmetros: ST_string - String a ser analisada
// -----------------------------------------------------------------------------
function F_RTrim1(ST_string)
 {
  var BO_fim = true;
  var ST_rtrim = '';
  var ST_str1 = new String(ST_string);
  var TI_ind1;

  for (TI_ind1 = ST_str1.length - 1; TI_ind1 >= 0 ; TI_ind1--)
   {
    if (ST_str1.charAt(TI_ind1) != ' ' && BO_fim == true)
      BO_fim = false;

    if (BO_fim == false)
      ST_rtrim = ST_str1.charAt(TI_ind1) + ST_rtrim;
   }

  if (BO_fim == true)
    ST_rtrim = '';

  return (ST_rtrim);
 }

// -----------------------------------------------------------------------------
// Função F_Trim1
// Objetivo: Retirar espaços em branco no início e no final de uma string
// Parâmetros: ST_str1 - String a ser analisada
// -----------------------------------------------------------------------------
function F_Trim1(ST_str1)
 {
  return (F_LTrim1(F_RTrim1(ST_str1)));
 }

    function F_Troca_Enter_Por_Tab1()

     {

      var Tecla = window.event.keyCode;

      if(Tecla==13)

        window.event.keyCode=9;

      event.returnValue = true;

     }

    function F_Eh_Numero_Real1(numero,dec)

     {

      var Tecla           = window.event.keyCode;

      var str_numero      = numero;

      str_numero          = str_numero.toString();

      var posicao_virgula = str_numero.indexOf(",")

      // se e numero de 0 a 9 OU ,

      if((Tecla > 47 && Tecla < 58 || Tecla == 44))

       {

        // se é virgula verifica se ja digitou antes

        if(Tecla == 44)

         {

          if ((posicao_virgula!= -1) || (str_numero.length == 0))

           event.returnValue = false;

          else

           event.returnValue = true;

         }

        else

         { 

          // verifica casas decimais

          if(posicao_virgula!= -1)

           {

            if(str_numero.length - posicao_virgula <= dec)

             event.returnValue = true;

            else

             event.returnValue = false;

           }

          else

           event.returnValue = true;

         }

       }

      else

       event.returnValue = false;

     }

 

    function F_Ler_Data1(data)

     {

      var Tecla    = window.event.keyCode;

      var caracter = String.fromCharCode(Tecla);

      // se e numero de 0 a 9

      if((Tecla > 47 && Tecla < 58)) 

       {

        if ((data.value.length == 1 ) || (data.value.length == 4)) 

         {

          data.value = data.value + caracter + "/";

          event.returnValue = false;

         }

        else

         event.returnValue = true;

       } 

      else

       {

        event.returnValue = false;

       }

     }



    // funcao que verifica se a tecla digitada e numero de 0 a 9

    function F_Eh_Numero1(numero)

     {

      var Tecla = window.event.keyCode;

      // se e numero de 0 a 9

      if(Tecla > 47 && Tecla < 58) 

       event.returnValue = true;

      else

       event.returnValue = false;

     }
