/*#################################################################
              FUNÇÕES DE CPF
 #################################################################*/

var NUM_DIGITOS_CPF  = 11;
var NUM_DIGITOS_CNPJ = 14;
var NUM_DGT_CNPJ_BASE = 8;

/*########################################################
         FUNÇÕES PARA POR E TIRAR FOCUS DOS CAMPOS
##########################################################*/
function entra_foco(p) {
	posicao = p.name ;
	if (p.type == "text")
		p.style.background = 'lightblue' ;
	return true ;
}

function sai_foco(p) {
	if (p.type == "text")
		p.style.background = 'white' ;
	return true ;
}
function upcase(p){
	p.value = p.value.toUpperCase();
}


/*########################################################
               FUNÇÕES EXCLUSIVAS DE DIV´s
##########################################################*/
function showObj2(_divName, _show, pTop, pLeft )
{
		if (document.getElementById) {
			obj = document.getElementById(_divName);
		}
		else if (document.all) {
			obj = document.all[_divName];
		}
		else if (document.layers)	{
			obj = document.layers[_divName];
		}

		if (_show != 'hidden') {
			obj.style.top = pTop;
			obj.style.left = pLeft;
		}
		else {
			obj.style.top = -600;
		}
		obj.style.visibility = _show;
}

function EscondeDiv( pNomeDiv )
{
  try{
      if (document.getElementById) {
        document.getElementById(pNomeDiv).style.display='none';
      }
      else if (document.layers && document.layers[pNomeCol]) {
        document.layers[pNomeDiv].visibility = 'hidden';
      }
      else if (document.all) {
        document.all[pNomeDiv].style.display='none';
      }
  }catch(e)
  {}
}

function showDiv(_divName, _show, pTop, pLeft )
{
        if (document.getElementById) {
			obj = document.getElementById(_divName);
		}
		else if (document.all) {
			obj = document.all[_divName];
		}
		else if (document.layers)	{
			obj = document.layers[_divName];
		}

		if (_show != 'hidden') {
            if( pTop != 0 )
			  obj.style.top = pTop;
            if( pLeft != 0 )
 			  obj.style.left = pLeft;
		}
		else {
			//obj.style.top = -600;
		}
		obj.style.visibility = _show;
        //alert( obj.style.visibility );
}

function VisibilidadeDiv( _divName )
{
		if (document.getElementById)
			obj = document.getElementById(_divName);
		else if (document.all)
			obj = document.all[_divName];
		else if (document.layers)
			obj = document.layers[_divName];

        return obj.style.visibility;
}


/**
 * Adiciona método lpad() à classe String.
 * Preenche a String à esquerda com o caractere fornecido,
 * até que ela atinja o tamanho especificado.
 */
String.prototype.lpad = function(pSize, pCharPad)
{
	var str = this;
	var dif = pSize - str.length;
	var ch = String(pCharPad).charAt(0);
	for (; dif>0; dif--) str = ch + str;
	return (str);
} //String.lpad


/**
 * Adiciona método trim() à classe String.
 * Elimina brancos no início e fim da String.
 */
String.prototype.trim = function()
{
	return this.replace(/^\s*/, "").replace(/\s*$/, "");
} //String.trim


/**
 * Elimina caracteres de formatação e zeros à esquerda da string
 * de número fornecida.
 * @param String pNum
 *      String de número fornecida para ser desformatada.
 * @return String de número desformatada.
 */
function unformatNumber(pNum)
{
	return String(pNum).replace(/\D/g, "").replace(/^0+/, "");
} //unformatNumber

/**
 * Calcula os 2 dígitos verificadores para o número-efetivo pEfetivo de
 * CNPJ (12 dígitos) ou CPF (9 dígitos) fornecido. pIsCnpj é booleano e
 * informa se o número-efetivo fornecido é CNPJ (default = false).
 * @param String pEfetivo
 *      String do número-efetivo (SEM dígitos verificadores) de CNPJ ou CPF.
 * @param boolean pIsCnpj
 *      Indica se a string fornecida é de um CNPJ.
 *      Caso contrário, é CPF. Default = false (CPF).
 * @return String com os dois dígitos verificadores.
 */
function dvCpfCnpj(pEfetivo, pIsCnpj)
{
    try{
    	if (pIsCnpj==null) pIsCnpj = false;
    	var i, j, k, soma, dv;
    	var cicloPeso = pIsCnpj? NUM_DGT_CNPJ_BASE: NUM_DIGITOS_CPF;
    	var maxDigitos = pIsCnpj? NUM_DIGITOS_CNPJ: NUM_DIGITOS_CPF;
    	var calculado = formatCpfCnpj(pEfetivo, false, pIsCnpj);
    	calculado = calculado.substring(2, maxDigitos);
    	var result = "";

    	for (j = 1; j <= 2; j++)
    	{
    		k = 2;
    		soma = 0;
    		for (i = calculado.length-1; i >= 0; i--)
    		{
    			soma += (calculado.charAt(i) - '0') * k;
    			k = (k-1) % cicloPeso + 2;
    		}
    		dv = 11 - soma % 11;
    		if (dv > 9) dv = 0;
    		calculado += dv;
    		result += dv
    	}

    	return result;
  }catch(err)
  { return false; }
} //dvCpfCnpj

/**
 * Formata a string fornecida como CNPJ ou CPF, adicionando zeros
 * à esquerda se necessário e caracteres separadores, conforme solicitado.
 * @param String pCpfCnpj
 *      String fornecida para ser formatada.
 * @param boolean pUseSepar
 *      Indica se devem ser usados caracteres separadores (. - /).
 * @param boolean pIsCnpj
 *      Indica se a string fornecida é um CNPJ.
 *      Caso contrário, é CPF. Default = false (CPF).
 * @return String de CPF ou CNPJ devidamente formatada.
 */
function formatCpfCnpj(pCpfCnpj, pUseSepar, pIsCnpj)
{
    try{
        if (pIsCnpj==null) pIsCnpj = false;
    	if (pUseSepar==null) pUseSepar = true;
    	var maxDigitos = pIsCnpj? NUM_DIGITOS_CNPJ: NUM_DIGITOS_CPF;
    	var numero = unformatNumber(pCpfCnpj);

    	numero = numero.lpad(maxDigitos, '0');
    	if (!pUseSepar) return numero;

    	if (pIsCnpj)
    	{
    		reCnpj = /(\d{2})(\d{3})(\d{3})(\d{4})(\d{2})$/;
    		numero = numero.replace(reCnpj, "$1.$2.$3/$4-$5");
    	}
    	else
    	{
    		reCpf  = /(\d{3})(\d{3})(\d{3})(\d{2})$/;
    		numero = numero.replace(reCpf, "$1.$2.$3-$4");
    	}
    	return numero;
    }catch(err)
    {
        return "";
    }
} //formatCpfCnpj

function CpfValido( pCampo, bUsaAlert, bObrigatorio, pNomeCampo )
{
    var pCpf = pCampo.value;
    var bTudoOk = StrOk( pCpf );
    
    if( bTudoOk ){
        var numero = formatCpfCnpj(pCpf, false, false);

        //Se deu erro, retorna vazio
        if( numero == "" )
            bTudoOk = false;
        else{

        	var base = numero.substring(0, numero.length - 2);
        	var digitos = dvCpfCnpj(base, false);
        	var algUnico, i;

        	// Valida dígitos verificadores
        	if (numero != base + digitos)
                bTudoOk = false;

        	/* Não serão considerados válidos os seguintes CPF:
        	 * 000.000.000-00, 111.111.111-11, 222.222.222-22, 333.333.333-33, 444.444.444-44,
        	 * 555.555.555-55, 666.666.666-66, 777.777.777-77, 888.888.888-88, 999.999.999-99.
        	 */
            if( bTudoOk ){
                algUnico = true;
            	for (i=1; i<NUM_DIGITOS_CPF; i++)
            		algUnico = algUnico && (numero.charAt(i-1) == numero.charAt(i));

                if( !algUnico )
                    bTudoOk = true;
            }
        }
    }
    
    if( !bTudoOk )
    {
        if( bUsaAlert )
    	   if( pNomeCampo != "" )
              alert( "CPF '" + pNomeCampo + "' inválido!" );
    	   else
              alert( "CPF inválido!" );
        try{
          pCampo.focus();
        }
        catch(err)
        {}
    }

    return bTudoOk;
} //isCpf

/**
 * Testa se a String pCnpj fornecida é um CNPJ válido.
 * Qualquer formatação que não seja algarismos é desconsiderada.
 * @param String pCnpj
 *      String fornecida para ser testada.
 * @return <code>true</code> se a String fornecida for um CNPJ válido.
 */
function CNPJValido( pCampo, bUsaAlert, bObrigatorio, pNomeCampo )
{
    var pCnpj = pCampo.value;
	var numero = formatCpfCnpj(pCnpj, false, true);
	var base = numero.substring(0, NUM_DGT_CNPJ_BASE);
	var ordem = numero.substring(NUM_DGT_CNPJ_BASE, 12);
	var digitos = dvCpfCnpj(base + ordem, true);
	var algUnico;

	// Valida dígitos verificadores
	if (numero != base + ordem + digitos) return false;

	/* Não serão considerados válidos os CNPJ com os seguintes números BÁSICOS:
	 * 11.111.111, 22.222.222, 33.333.333, 44.444.444, 55.555.555,
	 * 66.666.666, 77.777.777, 88.888.888, 99.999.999.
	 */
	algUnico = numero.charAt(0) != '0';
	for (i=1; i<NUM_DGT_CNPJ_BASE; i++)
	{
		algUnico = algUnico && (numero.charAt(i-1) == numero.charAt(i));
	}
	if (algUnico) return false;

	/* Não será considerado válido CNPJ com número de ORDEM igual a 0000.
	 * Não será considerado válido CNPJ com número de ORDEM maior do que 0300
	 * e com as três primeiras posições do número BÁSICO com 000 (zeros).
	 * Esta crítica não será feita quando o no BÁSICO do CNPJ for igual a 00.000.000.
	 */
	if (ordem == "0000") return false;
	return (base == "00000000"
		|| parseInt(ordem, 10) <= 300 || base.substring(0, 3) != "000");
} //CNPJValido




/*#################################################################
              FUNÇÕES DE VALIDAÇÃO
              DE CAMPO PREENCHIDO
 #################################################################*/

function StrOk( pString )
{
  var bTudoOk = ( pString.length != 0 );

  //Para evitar cadastro somente de espaços em branco
  // percorre todas as letras e desconta os vazios
  if( bTudoOk )
  {
	  iTamCampo = pString.length;
	  for( i=0; i<=pString.length-1; i++)
		if( pString.charAt(i) == ' ' )
		   iTamCampo--;

      if( iTamCampo == 0 )
        bTudoOk = false;
  }

  return bTudoOk;
}

function StringValida( pCampo, bUsaAlert, bObrigatorio, pNomeCampo )
{
  var sValor = pCampo.value, bTudoOk, i, iTamCampo;
  //sValor = sValor.trim();

  bTudoOk = StrOk( sValor );
  
  if( !bTudoOk )
    //Se não for obrigatório, está Ok
    bTudoOk = !bObrigatorio;

  if( !bTudoOk )
  {
    if( bUsaAlert ){
	    if( pNomeCampo != "" )
           alert( "Campo '" + pNomeCampo + "' não preenchido!" );
	    else
           alert( "Valor não preenchido!" );

	    try{
	       pCampo.focus();
	    }
	    catch(err)
	    {}
    }
  }

  return bTudoOk;
}

function InteiroValido( pCampo, bUsaAlert, bObrigatorio, pNomeCampo )
{
    var bTudoOk = false;

    if( isNaN(parseInt(pCampo.value,10)) == true )
      bTudoOk = false;
    else
	if ( Math.ceil(pCampo.value) != pCampo.value )
      bTudoOk = false;
    else
      bTudoOk = true;

    //Se deu erro e não tem nada preenchido...
    if( ( !bTudoOk ) && ( (pCampo.value).length == 0 ) )
      //Se não for obrigatório, está Ok
      bTudoOk = !bObrigatorio;

	if( !bTudoOk )
	{
	   if( bUsaAlert ){
		 if( pNomeCampo != "" )
            alert( "Campo '" + pNomeCampo + "' preenchido incorretamente ou não preenchido!" );
	     else
            alert( "Número inválido!" );
         try{
	        pCampo.focus();
	     }catch(err){}
	   }
	}

	return bTudoOk;
}

function RadioValida( pCampo, bUsaAlert, bObrigatorio, pNomeCampo )
{
    var bTudoOk = false;

    if( pCampo.length == 0 )
      //Se não for obrigatório, está Ok
      bTudoOk = !bObrigatorio;

	if( !bTudoOk )
      for( i=0; i<pCampo.length; i++ )
        if( pCampo[i].checked )
        {
          bTudoOk = true;
          break;
        }

	if( !bTudoOk )
	{
	  if( bUsaAlert )
		if( pNomeCampo != "" )
           alert( "No campo '" + pNomeCampo + "' deve ser selecionada uma opção!" );
	    else
           alert( "Por favor, selecione um opção!" );
      //Para colocar o focus na primeira opção existente
      try{
        pCampo[0].focus();
      }catch(err){}
	}

	return bTudoOk;
}

function ValidDate(d, m, y)
{ // m = 0..11 ; y m d integers
  with (new Date(y, m, d))
    return ((getMonth()==m) && (getDate()==d)) /* was y, m */
}

function HoraValida( pCampo, bUsaAlert, bObrigatorio, pNomeCampo ){
  var sData = pCampo.value, bTudoOk = true;
  var T = sData.split(':');
  
  /*   T[0] = hora
       T[1] = minuto
	   T[2] = segundo
  ******************/
  if( T.length != 3 )
	bTudoOk = false;

  if( bTudoOk )
    if( ( T[0].length != 1 ) && ( T[0].length != 2 ) ) //um ou dois digitos na hora
      bTudoOk = false;

  if( bTudoOk )
    if( T[1].length != 2 ) //dois digitos no minuto
      bTudoOk = false;

  if( bTudoOk )
    if( T[2].length != 2 ) //dois digitos no segundo
      bTudoOk = false;

  /*
  alert( T[0] );
  alert( T[1] );
  alert( T[2] );
  */

  if(  (T[0]<00)||(T[0]>23) ||
       (T[1]<00)||(T[1]>59) ||
       (T[2]<00)||(T[2]>59) )
      bTudoOk = false;

  if( !bTudoOk )
    //Se não for obrigatório, está Ok
	if( pCampo.value == "" )
       bTudoOk = !bObrigatorio;

  if( !bTudoOk )
  {
     if( bUsaAlert ){
       sMsg = "Hora inválida!";
       if( pNomeCampo != "" ){
         sMsg = "Campo '" + pNomeCampo + "' preenchido incorretamente ou não preenchido!\n";
         sMsg += "A hora deve ser no formato 'HH:MM:SS'.";
       }
       alert( sMsg );
     }
     try{
        pCampo.focus();
     }catch(err){}
  }

  return bTudoOk;
}

function DataValida( pCampo, bUsaAlert, bObrigatorio, pNomeCampo ){
	var data;
	
	if( pCampo.value != "" )
		pCampo.value = TrataAno4Dig(pCampo.value);
	
	date = pCampo.value;
	var bTudoOk = true;

	if( date != "" ) {
	    var array_data = new Array;
		var ExpReg = new RegExp('(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/[12][0-9]{3}');
		//vetor que contem o dia o mes e o ano
		array_data = date.split('/');
		erro = false;
		//Valido se a data esta no formato dd/mm/yyyy e se o dia tem 2 digitos e esta entre 01 e 31
		//se o mes tem d2 digitos e esta entre 01 e 12 e o ano se tem 4 digitos e esta entre 2005 e 2999
		if ( date.search(ExpReg) == -1 )
		erro = true;
		//Valido os meses que nao tem 31 dias com execao de fevereiro
		else if ( ( ( array_data[1] == 4 ) || ( array_data[1] == 6 ) || ( array_data[1] == 9 ) || ( array_data[1] == 11 ) ) && ( array_data[0] > 30 ) )
		erro = true;
		//Valido o mes de fevereiro
		else if ( array_data[1] == 2 ) {
		//Valido ano que nao e bissexto
		if ( ( array_data[0] > 28 ) && ( ( array_data[2] % 4 ) != 0 ) )
				erro = true;
		//Valido ano bissexto
		if ( ( array_data[0] > 29 ) && ( ( array_data[2] % 4 ) == 0 ) )
		erro = true;
		}
		
		bTudoOk = !erro;
	}
	else
		bTudoOk = false;
	
    if( !bTudoOk )
       //Se não for obrigatório, está Ok
	   if( date == "" )
           bTudoOk = !bObrigatorio;	
	
	if( !bTudoOk )
	{
	     if( bUsaAlert ){
	       sMsg = "Data inválida!";
	       if( pNomeCampo != "" )
	         sMsg = "Campo '" + pNomeCampo + "' preenchido incorretamente ou não preenchido!";
	       alert( sMsg );
	     }
	     try{
	        if( bUsaAlert || bObrigatorio )
	           pCampo.focus();
	     }catch(err){}
	}
	
	return bTudoOk;	
}

function DataHoraValida( pCampo, bUsaAlert, bObrigatorio, pNomeCampo )
{
  var umCampo = pCampo.value;
  var sValAntigo = "";

  if( pCampo.value != "" ){
      //Conferindo se o tamanho está correto ( 19 = 00/00/0000 00:00:00 )
      if( (pCampo.value).length != 19 ){
         sValAntigo = pCampo.value;
         pCampo.value += "xxxxx"; //Para forçar o erro
      }
      //Se o tamanho está legal, deve verificar se a parte da data está correta
      else{
         sValAntigo = pCampo.value;
         pCampo.value = (pCampo.value).substring(0,10);
      }
  }
  
  var bTudoOk = DataValida( pCampo, false, bObrigatorio, pNomeCampo );

  //Se chegou até aqui com TRUE, falta verificar a hora
  if( bTudoOk )
    if( pCampo.value != "" ){
       //Pega só a hora
       pCampo.value = (sValAntigo).substring(11);
       bTudoOk = HoraValida( pCampo, false, bObrigatorio, pNomeCampo );
    }

  if( sValAntigo != "" )
     pCampo.value = sValAntigo;

  if( !bTudoOk ){
     sMsg = "Use o formato 'DD/MM/YYYY HH:MM:SS'.";
     if( pNomeCampo != "" )
        sMsg = "'" + pNomeCampo + "' preenchido incorretamente!" + "\n" + sMsg;
     alert(sMsg);
  }
  
  return bTudoOk;
}

function ComboValida( pCampo, pValIndexMin, bUsaAlert, bObrigatorio, pNomeCampo )
{
  var bTudoOk = true, sTextoCombo = "";

  if( !( pCampo.selectedIndex > pValIndexMin ) || ( pCampo.selectedIndex == -1) )
	 bTudoOk = false;

  if( bTudoOk )
  {
     sTextoCombo = pCampo.options[pCampo.selectedIndex].text;
	 bTudoOk = StrOk(sTextoCombo);
  }
  
  if( !bTudoOk )
     //Se não for obrigatório, está Ok
     bTudoOk = !bObrigatorio;

  if( !bTudoOk )
  {
     if( bUsaAlert )
		if( pNomeCampo != "" )
           alert( "Por favor, selecione uma opção na combo '" + pNomeCampo + "'!" );
	    else
           alert( "Por favor, selecione uma opção na combo!" );

     try{
       pCampo.focus();
     }catch(err){}
  }

  return bTudoOk;
}

function ExecutaFuncao( pKeyCode, pNomeFunc ){
     try{
       if (!e) var e = window.event;
	   if(e.keyCode==pKeyCode){
          eval(pNomeFunc);
       }
     }
     catch(err)
     {}
}

function SetaItemNaCombo( pCombo, pProcuraPorValue, pValue, pText )
{
   var i;
   pCombo.selectedIndex = -1;
   for( i=0; i<pCombo.length; i++ )
   {
	  if( pProcuraPorValue )
	  {
	     if( pCombo.options[i].value == pValue )
	     {
	        pCombo.selectedIndex = i;
			break;
	     }
	  }
	  else
	  if( pCombo.options[i].text == pText )
	  {
	     pCombo.selectedIndex = i;
	     break;
	  }
   }
}

function setVisible(id, visible) {
  if(document.getElementById){
    if(visible) {
      document.getElementById(id).style.visibility = 'visible';
    } else {
      document.getElementById(id).style.visibility = 'hidden';
    }
  }
}

/*#################################################################
              FUNÇÕES DE ABERTURA DE JANELA
 #################################################################*/

function AbreJan(pAltura,pLargura,pScript,pNomeJan)
{
  if( pAltura <= 0 )
    pAltura = screen.height - 60;
  if( pLargura <= 0 )
    pLargura = screen.width - 20;

  //Para centralizar a janela de edição em qq resolução.
  var y = (screen.height-pAltura)/2;
  var x = (screen.width-pLargura)/2;
  if( y >= 20 )
     y -= 20;
  var win = window.open( pScript, pNomeJan,"HEIGHT="+pAltura+",WIDTH="+pLargura+",left="+x+",top="+y+",status=yes,scrollbars=yes,resizable=1" );
  win.focus();
  return win;
}

function ExibeSistema(pAltura,pLargura,pScript,pNomeJan){
	var win =  AbreJan(pAltura,pLargura,pScript,pNomeJan);
    win.focus();		
}

function AbreJan2(pAltura,pLargura,pLeft,pTop,pScript,pNomeJan,pBarraMenu,pBarraEndereco,pRedimensionavel)
{
  var sParametros = "status=yes,scrollbars=yes,";

  if( pLeft == 0 )
    pLeft = (screen.width-pLargura)/2;
  if( pTop == 0 )
    pTop = (screen.height-pAltura)/2;

  if( pAltura <= 0 )
    pAltura = screen.height - 60;
  if( pLargura <= 0 )
    pLargura = screen.width - 20;

  sParametros += "HEIGHT="+pAltura+",";
  sParametros += "WIDTH="+pLargura+",";
  if( pLeft != 0 )
    sParametros += "left="+pLeft+",";
  if( pTop != 0 )
    sParametros += "top="+pTop+",";
  if( pBarraMenu )
    sParametros += "menubar=1,";
  if( pBarraEndereco )
    sParametros += "location=1,";
  if( pRedimensionavel )
    sParametros += "resizable=1,";

  var win = window.open( pScript, pNomeJan, sParametros );
  //win.resizeTo( pLargura, pAltura );
  win.focus();
  return win;
}

function ExibeSistemaV2(pAltura,pLargura,pLeft,pTop,pScript,pNomeJan,pBarraMenu,pBarraEndereco,pRedimensionavel){
	var win = AbreJan2(pAltura,pLargura,pLeft,pTop,pScript,pNomeJan,pBarraMenu,pBarraEndereco,pRedimensionavel);
    win.focus();		
}

/*#################################################################
              FUNÇÕES QUE PERCORREM CHECKBOX´S
              SELECIONADAS E RETORNA NUMA STRING
 #################################################################*/

function PegaSelecionados( pForm, pSeparador )
{
   var sResultado = "";

   for( i=0; i<pForm.length; i++ )
     if( pForm.elements[i].type == "checkbox" )
        if( pForm.elements[i].checked )
	      if( pForm.elements[i].name.indexOf( "ChecaTodos", 0 ) < 0 )
  		  {
			   if( sResultado != "" ) sResultado = sResultado + pSeparador;
			   sResultado =  sResultado + pForm.elements[i].name;
		  }

   return sResultado;
}

function PegaSelecionadosSemNome( pForm, pSeparador, pNomeImpedido )
{
   var sResultado = "";

   for( i=0; i<pForm.length; i++ )
     if( pForm.elements[i].type == "checkbox" )
        if( pForm.elements[i].checked )
	      if( ( pForm.elements[i].name.indexOf( "ChecaTodos", 0 ) < 0 ) &&
              ( pForm.elements[i].name.indexOf( pNomeImpedido, 0 ) < 0 )  )
  		  {
			   if( sResultado != "" ) sResultado = sResultado + pSeparador;
			   sResultado =  sResultado + pForm.elements[i].name;
		  }

   return sResultado;
}

function PegaSelecionadosSoInt( pForm, pSeparador )
{
   var sResultado = "";
   for( i=0; i<pForm.length; i++ )
     if( pForm.elements[i].type == "checkbox" )
        if( pForm.elements[i].checked )
	      if( pForm.elements[i].name.indexOf( "ChecaTodos", 0 ) < 0 )
             if( !isNaN(parseInt(pForm.elements[i].name,10)) )
  		     {
			   if( sResultado != "" ) sResultado = sResultado + pSeparador;
			   sResultado =  sResultado + pForm.elements[i].name;
		     }
   return sResultado;
}

function PegaSelecionadosComPliques( pForm, pSeparador, pPliques )
{
   var sResultado = "";

   for( i=0; i<pForm.length; i++ )
     if( pForm.elements[i].type == "checkbox" )
        if( pForm.elements[i].checked )
	      if( pForm.elements[i].name.indexOf( "ChecaTodos", 0 ) < 0 )
  		  {
			   if( sResultado != "" ) sResultado = sResultado + pSeparador;
			   sResultado =  sResultado + pPliques + pForm.elements[i].name + pPliques;
		  }

   return sResultado;
}

/*#################################################################
              FUNÇÃO QUE CHECA TODOS
              AS CHECKS ( MENOS A SELECIONA TODOS )
              DE UM FORMULÁRIO
 #################################################################*/

function ChecaRegistros( pForm, pChecked )
{
  for( i=0; i<pForm.length; i++ )
     if( pForm.elements[i].type == "checkbox" )
       if( pForm.elements[i].name.indexOf( "ChecaTodos", 0 ) < 0 )
          pForm.elements[i].checked = pChecked;
}

function ChecaRegistrosSoInt( pForm, pChecked )
{
  for( i=0; i<pForm.length; i++ )
     if( pForm.elements[i].type == "checkbox" )
       if( pForm.elements[i].name.indexOf( "ChecaTodos", 0 ) < 0 )
         if( !isNaN(parseInt(pForm.elements[i].name,10)) )
            pForm.elements[i].checked = pChecked;
}

function ChecaRegistrosByStr( pForm, pChecked, pString )
{
  for( i=0; i<pForm.length; i++ )
     if( pForm.elements[i].type == "checkbox" ){
       //alert( pForm.elements[i].name.indexOf( pString, 0 ) );
       if( pForm.elements[i].name.indexOf( pString, 0 ) == 0 )
          pForm.elements[i].checked = pChecked;
     }
}

function KeyDigitada(pEvent){
	return ( pEvent.keyCode ? pEvent.keyCode : pEvent.charCode );
}

function FocusProxObjeto( pEvent, pNomeObjeto, pOlhaEvento ){
	//if (!e) var e = window.event;
	if( pOlhaEvento )
		key = pEvent.keyCode ? pEvent.keyCode : pEvent.charCode;
	else
	    key = 13;
	if( key == 13 ){
		eval( pNomeObjeto + ".focus()" );
	}
}

function TrocaCaracterEsp(pTexto){
  pTexto = TrocaCaracter( pTexto, "[ASPAS]", '"' );
  pTexto = TrocaCaracter( pTexto, "[UMPLIQUE]", "'" );
  return pTexto;
}

function TrocaCaracter( pTexto, pProcurado, pNovo )
{
  var sSaida = "";
  var sEscProc = escape(pProcurado);

  var i=0;
  var iPasso=0;
  while( i<pTexto.length )
  {
     //Se for procura de uma letra...
     if( pProcurado.length == 1 )
       sLetra = pTexto.charAt(i);
     else
       sLetra = pTexto.substr( i, pProcurado.length );

     //alert( sLetra );

     if( (sLetra==pProcurado) || (escape(sLetra)==sEscProc) )
     {
       //alert( "achou" );
       sSaida += pNovo;
       if( pProcurado.length > 1 )
         i += pProcurado.length;
       else
         i++;
     }
     else
     {
       //Se está procurando por texto e não conseguiu achar
       // uma parte igual, tem que pegar uma letra novamente.
       if( pProcurado.length > 1 )
         sLetra = pTexto.charAt(i);
       sSaida += sLetra;
       i++;
     }
     //alert( sSaida );
     iPasso++;
  }
  return sSaida;
}

/*###############################################################
     OBJETO AJAX
#################################################################*/
var arrXmlHttp = new Array(0);

function AjaxErro(pRetorno){
  var bTemErro = false;
  if( (pRetorno.toUpperCase()).indexOf("ERRO") >= 0 ){
    var arr = pRetorno.split("|");
    alert( arr[1] );
    bTemErro = true;
  }
  return bTemErro;
}

function AjaxXMLErro(pRoot){
  var sErro = "";
  try{
	 sErro = pRoot.getElementsByTagName('ERRO')[0].firstChild.nodeValue;  	 
  }
  catch(err){
  }
  return sErro;
}

function GetXmlHttpObject()
{
  var objXMLHttp=null
  if (window.XMLHttpRequest)
     objXMLHttp=new XMLHttpRequest();
  else
  if (window.ActiveXObject){
     //objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
     try{
         objXMLHttp = new ActiveXObject("Msxml2.XMLHTTP");
     }
     catch (e){
         try{
            objXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
         } catch (e) {}
     }
  }
  return objXMLHttp
}

function ObjetoAjax( pScriptPost, pDados, pOnStateChange, pNaoPropagaErroRetornado ){
  this.scriptpost = pScriptPost;
  this.dados = pDados;
  this.onReadyStateChange = pOnStateChange;
  this.naopropagaerro = pNaoPropagaErroRetornado;
  this.xmlHttp = GetXmlHttpObject();
}

function AjaxPost( pScriptPost, pDados, pOnStateChanged, pNaoPropagaErroRetornado ){
  if( pNaoPropagaErroRetornado == undefined )
    pNaoPropagaErroRetornado = false;

  var newObjAjax = new ObjetoAjax(pScriptPost,pDados,pOnStateChanged,pNaoPropagaErroRetornado);

  if( newObjAjax.xmlHttp == null ){
    alert ("Browser does not support HTTP Request");
    return;
  }
  //FOnReadyStateChange = pOnStateChanged;
  //xmlHttpAux.onreadystatechange= ProcessStateChange;
  newObjAjax.xmlHttp.onreadystatechange= ProcessStateChangeObjAjax;
  arrXmlHttp.push(newObjAjax);

  PostObjAjax(newObjAjax);
  //PostAjax( pScriptPost, pDados );
}

function AjaxXMLPost( pScriptPost, pDados, pOnStateChanged, pNaoPropagaErroRetornado ){
  if( pNaoPropagaErroRetornado == undefined )
    pNaoPropagaErroRetornado = false;

  var newObjAjax = new ObjetoAjax(pScriptPost,pDados,pOnStateChanged,pNaoPropagaErroRetornado);

  if( newObjAjax.xmlHttp == null ){
    alert ("Browser does not support HTTP Request");
    return;
  }
  //FOnReadyStateChange = pOnStateChanged;
  //xmlHttpAux.onreadystatechange= ProcessStateChange;
  newObjAjax.xmlHttp.onreadystatechange= ProcessStateChangeObjAjaxXML;
  arrXmlHttp.push(newObjAjax);
  PostObjAjaxXML(newObjAjax);
  //PostAjax( pScriptPost, pDados );
}

function PostObjAjax( pObjAjax ){
  pObjAjax.xmlHttp.open("POST",pObjAjax.scriptpost,true);
  pObjAjax.xmlHttp.setRequestHeader('encoding','ISO-8859-1');
  pObjAjax.xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  pObjAjax.xmlHttp.setRequestHeader('Content-length', pObjAjax.dados.length );
  pObjAjax.xmlHttp.send(pObjAjax.dados);
}

function PostObjAjaxXML( pObjAjax ){ 
  /*	
  pObjAjax.xmlHttp.open("POST",pObjAjax.scriptpost,true);
  pObjAjax.xmlHttp.setRequestHeader('encoding','ISO-8859-1');
  pObjAjax.xmlHttp.setRequestHeader('Content-Type', 'text/xml');
  pObjAjax.xmlHttp.setRequestHeader('Content-length', pObjAjax.dados.length );
  pObjAjax.xmlHttp.send(pObjAjax.dados);
  */
  //alert(  pObjAjax.scriptpost + "?" + pObjAjax.dados );
  
  pObjAjax.xmlHttp.open( "GET", pObjAjax.scriptpost + "?" + pObjAjax.dados, true);
  pObjAjax.xmlHttp.setRequestHeader('Content-Type',  "text/xml");
  pObjAjax.xmlHttp.send(null);
}

function ProcessStateChangeObjAjax(){
   //alert(arrXmlHttp.length);
   for( i=arrXmlHttp.length-1; i>=0; i-- ){
       objAjax = arrXmlHttp[i];
       if( objAjax != null )
           if( objAjax.xmlHttp.readyState == 4){
              var sValRetorno = objAjax.xmlHttp.responseText;

              //Se foi solicitado não retornar para o formulário que chamou o retorno.
              if( objAjax.naopropagaerro ){
                  if( !AjaxErro(sValRetorno) )
                     alert(sValRetorno);
              }
              else
                  try{
                    var sNomeFuncRetorno = objAjax.onReadyStateChange;
                    //alert(sValRetorno);
                    var sFunc = sNomeFuncRetorno + "('" + sValRetorno + "');";
                    //alert( sFunc );
                    //Libera o objeto tratado
                    arrXmlHttp[i] = null;
                    eval( sFunc );
                  }catch(err){
                    alert( "Erro ao chamar função que pega retorno Ajax :\n" + err.message );
                  }
              break;
           }
   }
}

function ProcessStateChangeObjAjaxXML(){
   for( i=arrXmlHttp.length-1; i>=0; i-- ){
       objAjax = arrXmlHttp[i];
       if( objAjax != null )
           if( objAjax.xmlHttp.readyState == 4){
              var xmldoc = objAjax.xmlHttp.responseXML;
              var root = xmldoc.getElementsByTagName('root').item(0);
              if( root == null ){
              	 alert( "Não foi encontrado o nó raiz ROOT!" );
              }
              else              
              //Se foi solicitado não retornar para o formulário que chamou o retorno.
              if( objAjax.naopropagaerro ){
                  sErro = AjaxXMLErro(root);
                  if( sErro != "" )
                     alert(sErro);
              }
              else
                  try{
	                 var sNomeFuncRetorno = objAjax.onReadyStateChange;
	                 //alert(sNomeFuncRetorno);
	                 var sFunc = sNomeFuncRetorno + "( root );";
	                 //Libera o objeto tratado
	                 arrXmlHttp[i] = null;
	                 eval( sFunc );
	              }catch(err){
	                 alert( "Erro ao chamar função que pega retorno Ajax :\n" + err.message );
	              }
	          break;
           }
   }
}

function TrataAno4Dig(pData,pSeparador){
   if( pSeparador == undefined )
   	  pSeparador = "/";
   var arrAux = pData.split(pSeparador);
   if( arrAux.length == 3 ){
   	  for( i=0; i<=2; i++ ){
   	  	try{
   	  		var iAux = arrAux[i] * 1;
   	  	}catch(err){
   	  		return pData;
   	  	}

   	  	//Tratando o dia ou mês
   	  	if( (i<=1) && (arrAux[i].legnth==1) )
   	  		arrAux[i] = "0" + arrAux[i];
   	  	else
   	  	if( arrAux[2].length < 4 ){
   	  		while( arrAux[2].length < 3 ){
   	  			arrAux[2] = "0" + arrAux[2]
   	  		}
  			arrAux[2] = "2" + arrAux[2]
   	  	}
   	  }
   }
   
   return arrAux[0] + "/" + arrAux[1] + "/" + arrAux[2];
}

function TrataAno4DigV2(pAno){
   if( pAno.length == 4 )
   	  return pAno;	

   if( pAno < 100 ){
	   while( pAno.length < 3 ){
	   		pAno = "0" + pAno;
	   }
	   pAno = "2" + pAno;
	   return pAno;
   }
   
   return pAno;
}

function SetaEnableCampos(pForm,pEnabled){
  for( i=0; i<pForm.length; i++ )
     if( (pForm.elements[i].type=="checkbox") ||
         (pForm.elements[i].type=="text") ||
         (pForm.elements[i].type=="select-one") )
         pForm.elements[i].disabled = !pEnabled;
}
