/*
 * Regras gerais para utilização das funções para controle de operações via JS.
 * - Os seguinte campos são obrigatórios no formulário: operação - hidden,
   operação default - hidden, botão - button.
   - No momento do cadatros dos campos no arrya devem ser informados os tipos de
   cada campo.
   - Os ultimos dois campos do array DEVEM OBRIGATÓRIAMENTES ser operação e
   operação default, RESPECTIVAMENTE.
 */

/*
 * Tipos de campos que podem ser utilizados para a validação das operações nos
 * formulários
 */
var TYPE_OPER = 'oper';
var TYPE_BUTTON = 'button';
var TYPE_HIDDEN = 'hidden';
var TYPE_TEXT = 'text';
var TYPE_SELECT = 'select';

/*
 * Representa um campo do formulário.  Quando existirem vetores representar
 * somente um campo e não todos do vetor
 */
function field(name,type) {
   this.name = name;
   this.type = type;
}

/*
 * Seta o registro para update
 * params: list - Array contendo os campos do registro
 *         index - indice do array a ser alterado
 *         n - se existe um array ou um só registro (0 - um só | 1 - vetor)
 */
function setUpdate(list,index,n) {
   for (i=0;i<list.length;i++) {
      if (list[i].type==TYPE_OPER) {
         if (eval("document."+FORM_NAME+"."+list[i].name+(n?"["+index+"]":"")+".value")!=DELETE) {
            eval("document."+FORM_NAME+"."+list[i].name+(n?"["+index+"]":"")+".value = UPDATE;");
         }
         break;
      }
   }
}

/*
 * Seta o registro para create
 * params: list - Array contendo os campos do registro
 *         index - indice do array a ser alterado
 *         n - se existe um array ou um só registro (0 - um só | 1 - vetor)
 */
function setCreate(list,index,n) {
   for (i=0;i<list.length;i++) {
      if (list[i].type==TYPE_OPER) {
         eval("document."+FORM_NAME+"."+list[i].name+(n?"["+index+"]":"")+".value = CREATE;");
         break;
      }
   }
}

/*
 * Seta o registro para delete e retorna todos os campos para o estilo Fields
 * e os campos para read only = false
 * params: list - Array contendo os campos do registro
 *         index - indice do array a ser alterado
 *         n - se existe um array ou um só registro (0 - um só | 1 - vetor)
 */
function setDelete(list,index,n) {
   for (i=0;i<list.length;i++) {
      if (list[i].type==TYPE_TEXT) {
         eval("document."+FORM_NAME+"."+list[i].name+(n?"["+index+"]":"")+".className = 'DeleteFields';");
         eval("document."+FORM_NAME+"."+list[i].name+(n?"["+index+"]":"")+".readOnly = true;");
      }
      if (list[i].type==TYPE_SELECT) {
         eval("document."+FORM_NAME+"."+list[i].name+(n?"["+index+"]":"")+".className = 'DeleteFields';");
      }
      if (list[i].type==TYPE_BUTTON) {
         eval("document."+FORM_NAME+"."+list[i].name+(n?"["+index+"]":"")+".value = 'Restaurar';");
      }
      if (list[i].type==TYPE_OPER) {
         eval("document."+FORM_NAME+"."+list[i+1].name+(n?"["+(index)+"]":"")+".value = document."+FORM_NAME+"."+list[i].name+(n?"["+index+"]":"")+".value;");
         eval("document."+FORM_NAME+"."+list[i].name+(n?"["+index+"]":"")+".value = DELETE;");
         break;
      }
   }
}

/*
 * Restaura o campo deletado para a última operação executada sobre ele
 * params: list - Array contendo os campos do registro
 *         index - indice do array a ser alterado
 *         n - se existe um array ou um só registro (0 - um só | 1 - vetor)
 */
function setRestore(list,index,n) {
   for (i=0;i<list.length;i++) {
      if (list[i].type==TYPE_TEXT) {
         eval("document."+FORM_NAME+"."+list[i].name+(n?"["+index+"]":"")+".className = 'Fields';");
         eval("document."+FORM_NAME+"."+list[i].name+(n?"["+index+"]":"")+".readOnly = false;");
      }
      if (list[i].type==TYPE_SELECT) {
         eval("document."+FORM_NAME+"."+list[i].name+(n?"["+index+"]":"")+".className = 'Fields';");
      }
      if (list[i].type==TYPE_BUTTON) {
         eval("document."+FORM_NAME+"."+list[i].name+(n?"["+index+"]":"")+".value = 'Excluir';");
      }
      if (list[i].type==TYPE_OPER) {
         eval("document."+FORM_NAME+"."+list[i].name+(n?"["+index+"]":"")+".value = document."+FORM_NAME+"."+list[i+1].name+(n?"["+(index)+"]":"")+".value;");
         break;
      }
   }
}

/*
 * Restaura a última operação executada antes do delete
 * params: list - Array contendo os campos do registro
 *         index - indice do array a ser alterado
 *         n - se existe um array ou um só registro (0 - um só | 1 - vetor)
 */
function setNone(list,index,n) {
   for (i=0;i<list.length;i++) {
      if (list[i].type==TYPE_HIDDEN) {
         eval("document."+FORM_NAME+"."+list[i].name+(n?"["+index+"]":"")+".value = '';");
      }
      if (list[i].type==TYPE_TEXT) {
         eval("document."+FORM_NAME+"."+list[i].name+(n?"["+index+"]":"")+".value = '';");
      }
      if (list[i].type==TYPE_SELECT) {
         eval("document."+FORM_NAME+"."+list[i].name+(n?"["+index+"]":"")+".selectedIndex = 0;");
      }
      if (list[i].type==TYPE_OPER) {
         eval("document."+FORM_NAME+"."+list[i].name+(n?"["+index+"]":"")+".value = NONE");
         break;
      }
   }
}

/*
 * Excolhe qual operação será realizada pelo botão de excluir/restaurar de
 * acordo com a operação atual
 * params: list - Array contendo os campos do registro
 *         index - indice do array a ser alterado
 *         buttonValue - Label do botão
 *         n - se existe um array ou um só registro (0 - um só | 1 - vetor)
 */
function set(list,index,buttonValue,n) {
  if (buttonValue == 'Excluir') setDelete(list,index,n);
  else setRestore(list,index,n);
}

function setAll(list,buttonPrinc,n) {
  var buttonValue;
  for (index=0;index<(eval("document."+FORM_NAME+"."+list[list.length-1].name+".length"));index++) { // for dos campos do formulario
    for (i=0;i<list.length;i++) {
      buttonValue = (eval("document."+FORM_NAME+"."+list[i].name+(n?"["+index+"]":"")+".value;"));
      if ((buttonValue == 'Excluir') && (buttonPrinc=='Excluir')) {
        setDelete(list,index,n);
      }
      if ((buttonValue == 'Restaurar') && (buttonPrinc=='Restaurar')) {
        setRestore(list,index,n);
      }
    }
  }
}


function busca(oModulo, oForm, oTabela, oCampoTabela, oCampos, oComoComparar, oMostrar, oOrderBy, oColunas, oIncluir, oRefresh, oIndex) {
  if(""+oIndex == "undefined"){
    busca2(oModulo, oForm, oTabela, oCampoTabela, oCampos, oComoComparar, oMostrar, oOrderBy, oColunas, oIncluir, oRefresh, oIndex)
  }
  else{
    var oCampo = '';
    var oValor = '';
    var oTipo  = '';
    var chamada = 'SysServlet?op=1';
    var arrayCampos = oCampos.split('|');
    for (var i=0; i < arrayCampos.length; i++) {
      oCampo +=  eval('oForm.'+arrayCampos[i]+'['+oIndex+'].name') + ((i == arrayCampos.length-1)?'':'|');
      if((""+eval('oForm.'+eval('oForm.'+arrayCampos[i]+'['+oIndex+'].name')+'['+oIndex+'].type') == "hidden") && (""+eval('oForm.'+eval('oForm.'+arrayCampos[i]+'['+oIndex+'].name')+'['+oIndex+'].fixed') != "true")) {
        oValor += '#|';
      }
      else {
        if (""+eval('oForm.'+eval('oForm.'+arrayCampos[i]+'['+oIndex+'].name')+'['+oIndex+'].type') == "select-one") {
          oValor += '#'+eval('oForm.'+eval('oForm.'+arrayCampos[i]+'['+oIndex+'].name')+'['+oIndex+']['+('oForm.'+eval('oForm.'+arrayCampos[i]+'['+oIndex+'].name')+'['+oIndex+'].selectedIndex')+'].value') + ((i == arrayCampos.length-1)?'':'|');
        }
        else {
          oValor += '#'+eval('oForm.'+eval('oForm.'+arrayCampos[i]+'['+oIndex+'].name')+'['+oIndex+'].value') + ((i == arrayCampos.length-1)?'':'|');
        }
      }
      oTipo  +=     eval('oForm.'+eval('oForm.'+arrayCampos[i]+'['+oIndex+'].name')+'['+oIndex+'].tipo')  + ((i == arrayCampos.length-1)?'':'|');
     }

     chamada += '&hModulo='       + escape(oModulo);      // módulo que chamou a busca
     chamada += '&hForm='         + escape(oForm.name);   // nome do formulário
     chamada += '&hTabela='       + escape(oTabela);      // tabela que vai ser executado o sql
     chamada += '&hCampoTabela='  + escape(oCampoTabela); // campos da tabela para comparar
     chamada += '&hCampo='        + escape(oCampo);       // campo do formulário para retornar
     chamada += '&hValor='        + escape(oValor);       // valor do campo do formulário para comparar
     chamada += '&hTipo='         + escape(oTipo);        // tipo do campo para comparar (String, Date ou Number)
     chamada += '&hComoComparar=' + escape(oComoComparar); // tipo do campo para comparar (String, Date ou Number)
     chamada += '&hMostrar='      + escape(oMostrar);     // colunas da tabela para mostrar
     chamada += '&hOrderBy='      + escape(oOrderBy);     // order by
     chamada += '&hColunas='      + escape(oColunas);     // nome das colunas no cabeçalho da tabela
     chamada += '&hIncluir='      + escape(oIncluir);     // mensagem para incluir novo(a)
     chamada += '&hRefresh='      + escape(oRefresh);     // refresh (S/N)
     chamada += '&hIndex='       + escape(oIndex);
     buscar(chamada);
  }
}


function busca2(oModulo, oForm, oTabela, oCampoTabela, oCampos, oComoComparar, oMostrar, oOrderBy, oColunas, oIncluir, oRefresh) {
  var oCampo = '';
  var oValor = '';
  var oTipo  = '';
  var chamada = 'SysServlet?op=1';
  var arrayCampos = oCampos.split('|');
  for (var i=0; i < arrayCampos.length; i++) {
    oCampo +=     eval('oForm.'+arrayCampos[i]+'.name') + ((i == arrayCampos.length-1)?'':'|');
    if((""+eval('oForm.'+eval('oForm.'+arrayCampos[i]+'.name')+'.type') == "hidden") && (""+eval('oForm.'+eval('oForm.'+arrayCampos[i]+'.name')+'.fixed') != "true")) {
      oValor += '#|';
    }
    else {
      oValor += '#'+eval('oForm.'+eval('oForm.'+arrayCampos[i]+'.name')+'.value') + ((i == arrayCampos.length-1)?'':'|');
    }
    oTipo  +=     eval('oForm.'+eval('oForm.'+arrayCampos[i]+'.name')+'.tipo')  + ((i == arrayCampos.length-1)?'':'|');
   }
   chamada += '&hModulo='       + escape(oModulo);      // módulo que chamou a busca
   chamada += '&hForm='         + escape(oForm.name);   // nome do formulário
   chamada += '&hTabela='       + escape(oTabela);      // tabela que vai ser executado o sql
   chamada += '&hCampoTabela='  + escape(oCampoTabela); // campos da tabela para comparar
   chamada += '&hCampo='        + escape(oCampo);       // campo do formulário para retornar
   chamada += '&hValor='        + escape(oValor);       // valor do campo do formulário para comparar
   chamada += '&hTipo='         + escape(oTipo);        // tipo do campo para comparar (String, Date ou Number)
   chamada += '&hComoComparar=' + escape(oComoComparar); // tipo do campo para comparar (String, Date ou Number)
   chamada += '&hMostrar='      + escape(oMostrar);     // colunas da tabela para mostrar
   chamada += '&hOrderBy='      + escape(oOrderBy);     // order by
   chamada += '&hColunas='      + escape(oColunas);     // nome das colunas no cabeçalho da tabela
   chamada += '&hIncluir='      + escape(oIncluir);     // mensagem para incluir novo(a)
   chamada += '&hRefresh='      + escape(oRefresh);     // refresh (S/N)
   buscar(chamada);
}

function buscar(chamada,sHeight,sWidth,oWindow) {
   var sH = (""+sHeight=="undefined"?"385":sHeight);
   var sW = (""+sWidth=="undefined"?"710":sWidth);
   if ((""+oWindow) == "undefined") {
      if((typeof(listcidWindow)=="object") && (!listcidWindow.closed))
         listcidWindow.close() ;
      listcidWindow=window.open(chamada,"_Buscas","scrollbars=yes,status=yes,left=30,top=30,height="+sH+",width="+sW) ;
   }
   else
      eval(oWindow+'=window.open(chamada,"_'+oWindow+'","scrollbars=yes,left=30,top=30,status=yes,height='+sH+',width='+sW+'");') ;
}

/*
 * Completa o campo que será utilizado como data atual
 * params oCampo - Campo que deverá ser validado e auto-completado
          iCompleta - Se caso o campo ficar em branco será completado automaticamente pelo sistema (0 - Não completa | 1 - Completa)
 */
function autoCompleteData(oCampo,iCompleta) {   // iCompleta = (0 - Não completa | 1 - Completa )
   var hoje = new Date();
   var i    = 0;
   var dia = '';
   var mes = '';
   var ano = '';
   var sData = oCampo.value;
   var tam = oCampo.value.length;
   if (iCompleta == 0 && tam == 0) return true;
   if (tam != 10) {
      for (i=tam;i < 8;i++) sData += '0';
      if (sData.substring(0,2) == '00') dia = (hoje.getDate()).toString();
      else dia = sData.substring(0,2);
      if (sData.substring(2,4) == '00') mes = (hoje.getMonth()+1).toString();
      else mes = sData.substring(2,4);
      if (sData.substring(4,8) == '0000') ano = (hoje.getUTCFullYear()).toString();
      else ano = sData.substring(4,8);
      sData = ((dia>9 || dia.length==2)?dia:'0'+dia) + ((mes>9 || mes.length==2)?mes:'0'+mes) + ano;
   }
   if(sData.length==8) sData = sData.substring(0,2) + '/' + sData.substring(2,4) + '/' + sData.substring(4,8);
   if (dataValida(sData)) oCampo.value = sData;
   else {
      alert('Data inválida utilize DD/MM/YYYY');
      oCampo.focus();
      oCampo.select();
   return false;
   }
   return true;
}

/*
 * Valida se o valor é vazio
 * params: valor - Valor a ser conferido
 */
function isEmpty(valor) {
   return(valor=="" || valor==null);
}

/*
 * Valida se a data é válida
 * params: cStrData - Valor da data
 */
function dataValida(cStrData) {
   var aDias = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
   var nDia = 0;
   var nMes = 0;
   var nAno = 0;
   if(isEmpty(cStrData))
      return false;
   if(!maskValida(cStrData, "99/99/99"))
      return false;
   nDia = parseInt(cStrData.substring(0,2),10);
   nMes = parseInt(cStrData.substring(3,5),10);
   nAno = parseInt(cStrData.substring(6),10);
   if((nMes < 1) || (nMes > 12)) return false;
   if((nAno%4)==0 && ((nAno%100)==0?((nAno%400)==0?true:false):true)) aDias[1] = 29;
   if((nDia < 1) || (nDia > aDias[nMes-1])) return false;
return true;
}

/*
 * Valida se um determinado valor esta em conformidade com a máscara passada
 * params: cStrValue - Valor
 *         cStrMask - máscara
 */
function maskValida(cStrValue, cStrMask) {
   // L - letra obrigatoria
   // A - letra opcional
   // 9 - numero obrigatorio
   // 0 - numero opcional
   // # - digito obrigatorio
   // X - digito opcional
    cStrValue=cStrValue.toUpperCase();
    cStrMask=cStrMask.toUpperCase();
    if(cStrMask.length>0 && cStrValue.length==0)        // existe mascara mas nao existe valor
       return false;                                    //
    if(cStrMask.length<cStrValue.length)                // tamanho do valor excede o tamanho
       return false;                                    //    da mascara
    for(var m=0;m<cStrMask.length;m++)                  // verifica se os requisitos da
       {                                                //    mascara sao atendidos
       if(m>=cStrValue.length)                           // tamanho do valor menor que o tamanho
         {                                              //    da mascara
         if("L#9".indexOf(cStrMask.charAt(m))!=-1)      // verifica se nao ha uma entrada
            {return false;}                               //    obrigatoria no restante da mascara
         }
       else
         {
         if(cStrMask.charAt(m)=="L" &&  "ABCDEFGHIJKLMNOPQRSTUVXZ".indexOf(cStrValue.charAt(m))==-1) return false;
         if(cStrMask.charAt(m)=="A" && " ABCDEFGHIJKLMNOPQRSTUVXZ".indexOf(cStrValue.charAt(m))==-1) return false;
         if(cStrMask.charAt(m)=="9" &&                "0123456789".indexOf(cStrValue.charAt(m))==-1) return false;
         if(cStrMask.charAt(m)=="0" &&                // entrada de numero opcional
            " 0123456789".indexOf(cStrValue.charAt(m))==-1)
            return false;
         if(cStrMask.charAt(m)=="#" &&                // entrada de digito obrigatoria
            "ABCDEFGHIJKLMNOPQRSTUVXZ0123456789".indexOf(cStrValue.charAt(m))==-1)
            return false;
         if(cStrMask.charAt(m)=="X" &&                // entrada de digito opcional
            " ABCDEFGHIJKLMNOPQRSTUVXZ0123456789".indexOf(cStrValue.charAt(m))==-1)
            return false;
         if("LA90#X".indexOf(cStrMask.charAt(m))==-1)   // outros simbolos
            {
            if(cStrValue.charAt(m)==" ")              // se esta vazio
               if(m+1<cStrMask.length &&
                  "L9#".indexOf(cStrValue.charAt(m+1)!=-1)) // se o proximo eh obrigatorio
                  return false;                             //    este tambem
               else                                         // senao o proximo nao obrigatorio
                  return true;                              //    aceita vazio
            if(cStrMask.charAt(m)!=cStrValue.charAt(m)) // se existe, deve ser valido
               return false;
            }
         }
       }
return true;
}

/*
 * Retorna true se o campo possuir somente espaços em branco
 * params: text - Valor a ser verificado se estiver em branco
 */
function isBlank(text) {
   var c ;
   for(var i=0;i<text.length;i++) {
       c = text.charAt(i) ;
       if((c!=" ") && (c!="\n") && (c!="\t")) return false ;
   }
   return true ;
}

/*
 * Funcao de Validação de CGC
 */
function cgcValido (cCgcInformado) {
   var nSoma;
   var nDigito1;
   var nDigito2;
   var cCGC;
   var bStatusCGC = true;            // Retorna TRUE se CGC ok.

   if(!maskValida(cCgcInformado, "99999999999999"))
      bStatusCGC = false;            // Retorna FALSE - mascara invalida.
   else
     {
      // Consistencia do primeiro digito de controle do CGC (nDigito1)
         cCGC  = cCgcInformado.substring(0,14);
         nSoma = cCGC.substring(0,1) * 5 + cCGC.substring(1,2) * 4 +
                 cCGC.substring(2,3) * 3 + cCGC.substring(3,4) * 2 +
                 cCGC.substring(4,5) * 9 + cCGC.substring(5,6) * 8 +
                 cCGC.substring(6,7) * 7 + cCGC.substring(7,8) * 6 +
                 cCGC.substring(8,9) * 5 + cCGC.substring(9,10) * 4 +
                 cCGC.substring(10,11) * 3 + cCGC.substring(11,12) * 2;
         nDigito1 = (nSoma % 11);
         nDigito1 = 11-nDigito1;
         if(nDigito1>=10) nDigito1=0;
      // Consistencia do segundo digito de controle do CGC (nDigito2)
         nSoma = cCGC.substring(0,1) * 6 + cCGC.substring(1,2) * 5 +
                 cCGC.substring(2,3) * 4 + cCGC.substring(3,4) * 3 +
                 cCGC.substring(4,5) * 2 + cCGC.substring(5,6) * 9 +
                 cCGC.substring(6,7) * 8 + cCGC.substring(7,8) * 7 +
                 cCGC.substring(8,9) * 6 + cCGC.substring(9,10) * 5 +
                 cCGC.substring(10,11) * 4 + cCGC.substring(11,12) * 3 +
                 nDigito1 * 2 ;
         nDigito2 = (nSoma % 11);
         nDigito2 = 11-nDigito2;
         if(nDigito2 >= 10) nDigito2 = 0;
         if(nDigito1 != cCgcInformado.substring(12,13) ||
            nDigito2 != cCgcInformado.substring(13,14))
             bStatusCGC = false;                // Retorna FALSE se CGC invalido.
     }
     return bStatusCGC ;
}

function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}

function setUrl(page,oForm) {
  params = "";
  for(i=0;i<oForm.length;i++) {
    params += (i==0?"?":"&") + oForm[i].name + "=" + oForm[i].value;
  }
  return page + params;
}

//Chamada desta função no html <input type="text" onkeydown="return sohNum(this,event)">
function sohNum(campo,ev){
   comma = false;
   if (campo.value.indexOf(',')>=0) {
     comma = true;
   }
   chr = String.fromCharCode(ev.keyCode);
   key = ev.keyCode;
   keyCom = ','+ev.keyCode+',';
   str = ',8,16,17,35,36,37,39,46,96,97,98,99,100,101,102,103,104,105,110,188,';
   ctrl = ',67,86,88,90,115,'
   if (key==32){ return false;}
   if (!(ev.ctrlKey && ctrl.indexOf(keyCom,0)>=0)) {
      if (str.indexOf(keyCom,0)>=0 || !isNaN(chr)){
        if (',110,'==keyCom && comma) {
          ev.keyCode = 0;
          return false;
        }
        else {
          return true;
        }
      }
      else{
         ev.keyCode = 0;
         return false;
      }
   }
}

//Chamada desta função no html <input type="text" onkeydown="return sohNum(this,event)">
function sohInt(campo,ev){
   chr = String.fromCharCode(ev.keyCode);
   key = ev.keyCode;
   keyCom = ','+ev.keyCode+',';
   str = ',8,16,17,35,36,37,39,46,96,97,98,99,100,101,102,103,104,105,188,';
   ctrl = ',67,86,88,90,115,'
   if (key==32){ return false;}
   if (!(ev.ctrlKey && ctrl.indexOf(keyCom,0)>=0)) {
      if (str.indexOf(keyCom,0)>=0 || !isNaN(chr)){
         return true;
      }else{
         ev.keyCode = 0;
         return false;
      }
   }
}

/**
* Método utilizado para comparação de datas
* @param data1_param - data inicial
*        data2_param - data final
*/

function comparaDatas(data1_param,data2_param){
   var dt1 = data1_param.value;
   var dt2 = data2_param.value;

   var hoje = new Date();
   var ano = hoje.getYear();
   if(ano >= 50 && ano <= 99)
    ano = 1900 + ano
   else
    ano = 2000 + ano;

   var pos1 = dt1.indexOf("/",0)
   var dd = dt1.substring(0,pos1)
   pos2 = dt1.indexOf("/", pos1 + 1)
   var mm = dt1.substring(pos1 + 1,pos2)
   var aa = dt1.substring(pos2 + 1,10)
   if(aa.length < 4)
   if(ano > 1999)
   aa = (2000 + parseInt(aa,10))
   else
   aa = (1900 + parseInt(aa,10));
   var data1 = new Date(parseInt(aa,10),parseInt(mm,10) - 1, parseInt(dd,10));
   var pos1 = dt2.indexOf("/",0)
   var dd = dt2.substring(0,pos1)
   pos2 = dt2.indexOf("/", pos1 + 1)
   var mm = dt2.substring(pos1 + 1,pos2)
   var aa = dt2.substring(pos2 + 1,10)
   if(aa.length < 4)
   if(ano > 80 && ano <= 99)
   aa = (1900 + parseInt(aa,10))
   else
   aa = (2000 + parseInt(aa,10));
   var data2 = new Date(parseInt(aa,10),parseInt(mm,10) - 1,parseInt(dd,10));
  
   if (data2_param.value == "")
      {
         return true;
      }
   
   else {
      if(data1 <= data2)
            {
               return true; 
            }
      else
            {
               window.alert('Data Inicial deve ser Menor que a Final !');
               data2_param.value = "";
               data2_param.focus();
               data2_param.select(); 
            }      
    }
}

/* 
  Função que valida o tamanho máximo de um textarea
  A chamada da função deve seguir este exemplo
  <textarea name="campo" type="text" class="Fields" cols="65" rows="3" maxlength="500" onKeyUp="validaTextarea(0,this)"></textarea>
  onde o primeiro parametro é o numero do form onde está o campo
*/
function validaTextarea(form,target){
  charsLeft = target.maxlength;
  strLen = target.value.length;
  campo = target.name;
  if (strLen > target.maxlength){
     eval("document.forms["+form+"]."+campo+".value = document.forms["+form+"]."+campo+".value.substring(0,document.forms["+form+"]."+campo+".value.length-1)");
     charsLeft = 0;
    //alert('O número máximo de '+target.maxlength+' caracteres foi excedido!!!');
  }
}

function verifInteger(field) {
  var str = "";
  for (i=0;i<field.value.length;i++) {
    if ("0123456789".indexOf(field.value.charAt(i))!=-1) {
      str += field.value.charAt(i);
    }
  }
  field.value = str;
}

function formataCpf(field) {
  var str = "";
  for (i=0;i<field.value.length;i++) {
    if ("0123456789".indexOf(field.value.charAt(i))!=-1) {
      if (str.length==9) {
        str += '-';
      }
      str += field.value.charAt(i);
    }
  }
  field.value = str;
}

function formataCnpj(field) {
  var str = "";
  for (i=0;i<field.value.length;i++) {
    if ("0123456789".indexOf(field.value.charAt(i))!=-1) {
      if (str.length==2 || str.length==6) {
        str += '.';
      }
      else if (str.length==10) {
        str += '/';
      }
      else if (str.length==15) {
        str += '-';
      }
      str += field.value.charAt(i);
    }
  }
  field.value = str;
}

// Função para retornar hora válida
// exemplo de chamada no jsp:
// <input type="text" name="nome" value="" onblur="return verifHora(this);">
function verifHora(oCampo) {
   var sHora = oCampo.value ;
   var nHora = 0;
   var nMin  = 0;
   var bErro = false ;

   if(sHora.length<5) {
      if(sHora.length==4) { sHora=    sHora.substring(0,2)+":"+sHora.substring(2,4) ; }
      if(sHora.length==3) { sHora="0"+sHora.substring(0,1)+":"+sHora.substring(1,3) ; }
      if(sHora.length==2) { sHora=    sHora+":00" ; }
      if(sHora.length==1) { sHora="0"+sHora+":00" ; }
      if(sHora.length==0) { return true ; } 
   }
   for(var i=0;i<5;i++) {
      if(i==2)
        bErro = (sHora.charAt(i)!=":") ;
      else
        bErro = ("0123456789".indexOf(sHora.charAt(i))==-1) ;
      if(bErro) {
        alert("Caracter inválido!\n\nUtilize o formato HH:MM.") ;
        oCampo.focus() ;
        return false ;
      }
   }
   nHora=parseInt(sHora.substring(0,2),10);
   nMin =parseInt(sHora.substring(3,5),10);
   if(nHora<0 || nHora>23 || nMin <0 || nMin >59) {
      alert("Hora informada inválida!") ;
      oCampo.focus() ;
      return false ;
   }
   oCampo.value = sHora ;
   return true ;
}

function setaControleAlteracoes(tabela,where){
  parent.heading.document.location.tabela = tabela;
  parent.heading.document.location.where = where;
}

function setValores(tabela,where) {
  if((""+document.frmConteudo) == "undefined") {
    setaControleAlteracoes(tabela,where);
  }
  else if ((""+document.frmConteudo.unidadeFabril) == "undefined") {
    setaControleAlteracoes(tabela,where);
  }
  else if(""+document.frmConteudo.unidadeFabril.value != "Sim") {
    setaControleAlteracoes(tabela,where);
  }
}

//adiciona o caractere '/' para o formato mes/ano - Reinaldo
function setMesAno(mesAno, oCampo) {
  if (mesAno.length == 2) mesAno = mesAno.substring(0,2) + '/';
  oCampo.value = mesAno;
}

//verifica se um campo mes/ano foi informado no formato dd/yyyy - Reinaldo
function verifyMesAno(mesAno, oCampo) {
  if ((mesAno.length != 7) || (mesAno.charAt(2) != '/')) {
    alert('Informe o campo mês/ano no formato mm/yyyy');
    oCampo.focus();
  }
}

//verifica se um campo mes/ano foi informado no formato dd/yyyy - Reinaldo
function verifyAno(Ano, oCampo) {
  if (Ano.length != 4)  {
    alert('Informe o ano no formato yyyy');
    oCampo.focus();
  }
}

/**
 * Função que permite apenas teclas numéricas e 
 * todos os caracteres que estiverem na lista de args.
 * Deve ser chamada no evento onKeyPress desta forma
 * onKeyPress ="return (soNums(event,'(/){,}.'));"
 * caso queira apenas permitir caracters
 */
function soNums(e, args) {
	if (document.all) {
		var evt = event.keyCode;
	} // caso seja IE
	else {
		var evt = e.charCode;
	} // do contrário deve ser Mozilla

	// pegando a tecla digitada
	var chr= String.fromCharCode(evt);

	// Se o código for menor que 20 é porque deve ser caracteres de controle
	// ex.: <ENTER>, <TAB>, <BACKSPACE> portanto devemos permitir
	// as teclas numéricas vão de 48 a 57
	if (evt < 20 || (evt > 47 && evt < 58) || (args.indexOf(chr) > -1)) {
		return true;
	}

	return false;
}

/**
 * outra variação só que mais rígida. Não permite nenhum caracter que não esteja na lista de permissão.
 * Aconselhável para algumas situações como por exemplo testes de digitação ou coisas do tipo.
 */
function soNumsRestritos(e, args) {        
	if (document.all){
		var evt = event.keyCode;
	} // caso seja IE
	else {
		var evt = e.charCode;
	} // do contrário deve ser Mozilla

	// criando a lista de teclas permitidas
	var valid_chars = '0123456789'+args;

	// pegando a tecla digitada
	var chr= String.fromCharCode(evt);
	
	if (valid_chars.indexOf(chr) > -1 ) {
		return true;
	}
	
	// se a tecla estiver na lista de permissão permite-a
	// para permitir teclas como <BACKSPACE> adicionamos uma permissão para 
	// códigos de tecla menores que 09 por exemplo (geralmente uso menores que 20)
	if (valid_chars.indexOf(chr)>-1 || evt < 9) {
		return true;
	}    

	// se a tecla estiver na lista de permissão permite-a do contrário nega
	return false;
} 

function formatarMoeda(objTextBox, SeparadorMilesimo, SeparadorDecimal, e){
    var sep = 0;
    var key = '';
    var i = j = 0;
    var len = len2 = 0;
    var strCheck = '0123456789';
    var aux = aux2 = '';
//    var whichCode = (window.Event) ? e.which : e.keyCode;
    var whichCode = (window.addEventListener) ? e.which : e.keyCode;    
    // 13=enter, 8=backspace as demais retornam 0(zero)
    // whichCode==0 faz com que seja possivel usar todas as teclas como delete, setas, etc    
    if ((whichCode == 13) || (whichCode == 0) || (whichCode == 8))
    	return true;
    key = String.fromCharCode(whichCode); // Valor para o código da Chave
 
 
    if (strCheck.indexOf(key) == -1) 
    	return false; // Chave inválida
    len = objTextBox.value.length;
    for(i = 0; i < len; i++)
        if ((objTextBox.value.charAt(i) != '0') && (objTextBox.value.charAt(i) != SeparadorDecimal)) 
        	break;
    aux = '';
    for(; i < len; i++)
        if (strCheck.indexOf(objTextBox.value.charAt(i))!=-1) 
        	aux += objTextBox.value.charAt(i);
    aux += key;
    len = aux.length;
    if (len == 0) 
    	objTextBox.value = '';
    if (len == 1) 
    	objTextBox.value = '0'+ SeparadorDecimal + '0' + aux;
    if (len == 2) 
    	objTextBox.value = '0'+ SeparadorDecimal + aux;
    if (len > 2) {
        aux2 = '';
        for (j = 0, i = len - 3; i >= 0; i--) {
            if (j == 3) {
                aux2 += SeparadorMilesimo;
                j = 0;
            }
            aux2 += aux.charAt(i);
            j++;
        }
        objTextBox.value = '';
        len2 = aux2.length;
        for (i = len2 - 1; i >= 0; i--)
        	objTextBox.value += aux2.charAt(i);
        objTextBox.value += SeparadorDecimal + aux.substr(len - 2, len);
    }
    return false;
}

function pesquisa(opcao, campo) {
	var janela = null;

	if (opcao == 'PRODUTO') {
		janela = window.open('produtopesquisa.php?campo=' + campo, 'PESQUISA_PRODUTO', 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=630,height=300,top=100,left=100');
	}
	
	try {
		janela.focus();
	} catch (e) {
		alert('Por favor, desabilite o Anti-popup de seu navegador!');
	}
}

function cadastro(opcao, campo) {
	var janela = null;

	if (opcao == 'CIDADE') {
		janela = window.open('cidadepopup.php?campo=' + campo, 'CIDADE_' + campo, 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=600,height=300,top=100,left=100');
	} else if (opcao == 'BAIRRO') {
		janela = window.open('bairropopup.php?campo=' + campo, 'BAIRRO_' + campo, 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=600,height=280,top=100,left=100');
	} else if (opcao == 'RUA') {
		janela = window.open('ruapopup.php?campo=' + campo,'RUA_' + campo,'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=600,height=280,top=100,left=100');
	} else if (opcao == 'PESSOA') {
		janela = window.open('pessoapopup.php?campo=' + campo,'PESSOA_' + campo,'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=600,height=480,top=100,left=100');
	} else if (opcao == 'CATEGORIA') {
		janela = window.open('categoriapopup.php?campo=' + campo,'CATEGORIA_' + campo,'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=600,height=280,top=100,left=100');
	} else if (opcao == 'CONDICAOPGTO') {
		janela = window.open('condicaopgtopopup.php?campo=' + campo,'CONDICAOPGTO_' + campo,'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=600,height=280,top=100,left=100');
	} else if (opcao == 'SERVICOCATEGORIA') {
		janela = window.open('servicocategoriapopup.php?campo=' + campo,'SERVICOCATEGORIA_' + campo,'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=600,height=280,top=100,left=100');
	} else if (opcao == 'VAGA') {
		janela = window.open('vagapopup.php?campo=' + campo, 'VAGA_' + campo, 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=600,height=280,top=100,left=100');
	} else if (opcao == 'CLASSIFICADOCATEGORIA') {
		janela = window.open('classificadocategoriapopup.php?campo=' + campo,'SERVICOCATEGORIA_' + campo,'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=600,height=280,top=100,left=100');
	} else if (opcao == 'GUIACATEGORIA') {
		janela = window.open('guiacategoriapopup.php?campo=' + campo,'GUIACATEGORIA_' + campo,'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=600,height=280,top=100,left=100');
	}
	
	try {
		janela.focus();
	} catch (e) {
		alert('Por favor, desabilite o Anti-popup de seu navegador!');
	}
}

function setaSelect(campo, codigo, descricao) {
	var field = eval('document.frmEditar.' + campo);
	field.options[field.length] = new Option(descricao, codigo, true, true);
}

function servicoDetalhe(aUrl, id) {
	var janela = window.open(aUrl, 'servicoDetalhe_' + id, 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=580,height=400,top=100,left=100');
	
	try {
		janela.focus();
	} catch (e) {
		alert('Por favor, desabilite o Anti-popup de seu navegador!');
	}
}

function linhagemDetalhe(aUrl, id) {
	var janela = window.open(aUrl, 'linhagemDetalhe_' + id, 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=580,height=400,top=100,left=100');
	
	try {
		janela.focus();
	} catch (e) {
		alert('Por favor, desabilite o Anti-popup de seu navegador!');
	}
}

function borracha(campo) {
	campo.value = '';
	campo.focus();
}

function abreHistorico(id) {
	var janela = window.open('historico.php?IDPESSOA=' + id, 'HISTORICO', 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=700,height=400,top=150,left=150');
	
	try {
		janela.focus();
	} catch (e) {
		alert('Por favor, desabilite o Anti-popup de seu navegador!');
	}
}

// BEGIN AJAX_UTILS
function getXmlHttpRequest() {
	var xmlhttp = false;

	try {
		xmlhttp = new ActiveXObject('Msxml2.XMLHTTP');
	} catch(e) {
		try {
			xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
		} catch (ex) {
			xmlhttp = false;
		}
	}

	if(!xmlhttp && typeof XMLHttpRequest != 'undefined') {
		xmlhttp = new XMLHttpRequest();
	}

	return xmlhttp;
}

function loading(show) {
	document.getElementById('combo').style.display = ((show) ? 'none' : '');
	document.getElementById('loading').style.display = ((show) ? '' : 'none');
}

function montaCombo(c, d) {
	for(i = 0; i < d.length; i++) {
		c.options[i + 1] = new Option(d[i].descricao, d[i].id, true, true);
	}
	c.options[0].selected = true;
}

function limpaCombo(c) {
	var tam = c.length;
	for(i = tam; i > 0; i--) {
		c.options[i] = null;
	}
}

function populaCombo(root, child, url, rootId) {
	var index = root.selectedIndex;
	if(index == 0) {
		limpaCombo(child);
		return;
	}

	var xmlhttp = getXmlHttpRequest();
	if(xmlhttp != null) {
		loading(true);
		var theUrl = url + '?' + rootId + '=' + root.options[index].value;
		xmlhttp.open("GET", theUrl, true);
		xmlhttp.onreadystatechange = function() {
			if(xmlhttp.readyState == 4) {
				var data = eval(xmlhttp.responseText);
				if(data != "undefined") {
					montaCombo(child, data);
					loading(false);
				} else {
					limpaCombo(child);
					loading(false);
				}
	       	}
	     }
	     xmlhttp.send(null);
	} else {
		alert('xmlhttp is null');
	}
	
}

function contatoEmail(id) {
	var janela = window.open('contatoemail.php?ID=' + id, 'ContatoEmail' + id, 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=400,height=320,top=100,left=100');
	try {
		janela.focus();
	} catch (e) {
		alert('Por favor, desabilite o Anti-popup de seu navegador!');
	}	
}
///////////////////

function frotaDetalhe(aUrl, id, alturaImagem) {
	left = ((screen.availWidth) - 700) / 2;
	altura = 50 + alturaImagem;
	if (altura < 350) {
		altura = 350;
	}
	
	topo = 50;
	if (altura > (screen.availHeight)) {
		altura = screen.availHeight;
		topo = 0;
	}
	var janela = window.open(aUrl, 'frotaDetalhe_' + id, 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=700,height=' +  altura + ',top=' + topo + ',left='+left);
	
	try {
		janela.focus();
	} catch (e) {
		alert('Por favor, desabilite o Anti-popup de seu navegador!');
	}
}

function contatoEmpresa(idpr) {
	left = ((screen.availWidth) - 700) / 2;
	var janela = window.open('contatoempresa.php?IDPR=' + idpr, 'ContatoEmpresa', 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=410,height=310,top=100,left=' + left);
	try {
		janela.focus();
	} catch (e) {
		alert('Por favor, desabilite o Anti-popup de seu navegador!');
	}	
}

function mapaMatriz() {
	left = ((screen.availWidth) - 710) / 2;
	var janela = window.open('mapa.php', 'MAPA', 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=673,height=450,top=100,left=' + left);
	try {
		janela.focus();
	} catch (e) {
		alert('Por favor, desabilite o Anti-popup de seu navegador!');
	}	
}

function mapaFilial() {
	left = ((screen.availWidth) - 710) / 2;
	var janela = window.open('mapaf.php', 'MAPAF', 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=673,height=450,top=100,left=' + left);
	try {
		janela.focus();
	} catch (e) {
		alert('Por favor, desabilite o Anti-popup de seu navegador!');
	}	
}

function empresaDetalhe(id, alturaImagem) {
	altura = 300 + alturaImagem;
	if (altura < 250) {
		altura = 250;
	}
	topo = 50;
	if (altura > (screen.availHeight)) {
		altura = screen.availHeight;
		topo = 0;
	}
	left = ((screen.availWidth) - 680) / 2;
	var janela = window.open('empresadetalhe.php?id=' + id, 'EMPRESA', 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=680,height=' + altura + ',top=' + topo + ',left=' + left);

	try {
		janela.focus();
	} catch (e) {
		alert('Por favor, desabilite o Anti-popup de seu navegador!');
	}
}

function jogoDetalhe(id, alturaImagem) {
	altura = 450 + alturaImagem;
	if (altura < 450) {
		altura = 450;
	}
	topo = 50;
	if (altura > (screen.availHeight)) {
		altura = screen.availHeight;
		topo = 0;
	}
	left = ((screen.availWidth) - 680) / 2;
	var janela = window.open('jogodetalhe.php?id=' + id, 'JOGO', 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=680,height=' + altura + ',top=' + topo + ',left=' + left);

	try {
		janela.focus();
	} catch (e) {
		alert('Por favor, desabilite o Anti-popup de seu navegador!');
	}
}

function mapaLocalizacao(id) {
	left = ((screen.availWidth) - 710) / 2;
	var janela = window.open('localizacao.php?id=' + id, 'MAPA', 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=673,height=473,top=100,left=' + left);
	try {
		janela.focus();
	} catch (e) {
		alert('Por favor, desabilite o Anti-popup de seu navegador!');
	}	
}

function estruturaDetalhe(id, alturaImagem) {
	altura = 300 + alturaImagem;
	if (altura < 250) {
		altura = 250;
	}
	topo = 50;
	if (altura > (screen.availHeight)) {
		altura = screen.availHeight;
		topo = 0;
	}
	left = ((screen.availWidth) - 560) / 2;
	var janela = window.open('estruturadetalhe.php?id=' + id, 'ESTRUTURA', 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=560,height=' + altura + ',top=' + topo + ',left=' + left);

	try {
		janela.focus();
	} catch (e) {
		alert('Por favor, desabilite o Anti-popup de seu navegador!');
	}
}

function eventofoto(foto, largura, altura) {
	var janela = window.open('eventofotopopup.php?FOTO=' + foto, 'EVENTOFOTO', 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=' + largura + ',height=' + altura + ',top=150,left=150');

	try {
		janela.focus();
	} catch (e) {
		alert('Por favor, desabilite o Anti-popup de seu navegador!');
	}
}

function showFotosEvento(id) {
	left = ((screen.availWidth) - 555) / 2;
	var janela = window.open('fotos_eventos_galeria.php?id=' + id, 'FOTOS_EVENTOS', 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=555,height=610,top=150,left=' + left);
	showJanela(janela);
}

function noticiaDetalhe(id, alturaImagem) {
	altura = 300 + alturaImagem;
	if (altura < 250) {
		altura = 250;
	}
	topo = 50;
	if (altura > (screen.availHeight)) {
		altura = screen.availHeight;
		topo = 0;
	}
	left = ((screen.availWidth) - 600) / 2;
	var janela = window.open('noticiadetalhe.php?id=' + id, 'NOTICIA', 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=600,height=' + altura + ',top=' + topo + ',left=' + left);

	try {
		janela.focus();
	} catch (e) {
		alert('Por favor, desabilite o Anti-popup de seu navegador!');
	}
}


// END AJAX_UTILS
