//tipos de botões--respostas
var vbYes=1;
var vbNo=2;
var vbOK=1;
var vbOkCancel=2;
var vbYesNoCancel=3;
var vbYesNo=4;
var vbCancel=5


/*
	#################################
	  Abre uma janela modal passando parametros para ela e recebendo um retorno
	################################
*/	
function ExibirMensagemPopUp_Modal(parPagina,Param){
	var retorno;
	retorno= window.showModalDialog(parPagina,Param,"dialogHeight: 210 px; dialogWidth:320 px; dialogTop: 200px; dialogLeft: 200px; edge: Raised; center: Yes; help: No; resizable: No; status: No;");
	return retorno;

}

/*
	#################################
	  Abre uma janela modal passando parametros para ela e recebendo um retorno
	################################
*/	
function ExibirMensagemPopUp(parMensagem){
	var retorno;
	alert(parMensagem);
//	retorno= window.showModalDialog(parPagina,Param,"dialogHeight: 210 px; dialogWidth:320 px; dialogTop: 200px; dialogLeft: 200px; edge: Raised; center: Yes; help: No; resizable: No; status: No;");
	//return retorno;

}

/*
Função: validaIdent
objetivo: Permite que o usuario digte apenas o que está no range permitido na função
parâmetros: object - objeto que está sendo editado
utilização: onblur do objeto
exemplo: onblur = "JavaScript: validaPlic(this);";
autor: Jose Rui Viana
*/
function validaIdent(){
	//valida o undescore
	//alert(event.keyCode);
	if(String.fromCharCode(event.keyCode)=="_"){
		event.returnValue=true;
		return
	}
	
	validaChave2()
	
}



/*
Função: validaLogin
objetivo: Define  uma expressao regular para validar dados de login
parâmetros: object.valu - value do objeto que está sendo editado
utilização: onblur do objeto
exemplo: onblur = "JavaScript: validaLogin(this);";
autor: Jose Rui Viana
*/
function validaLogin(strLogin) {
	var reg = /(PA\d{1,6})|(CR\d{1,4})|(CI\d{1,2})|CGSDAS/gi
	
	var datePat = /^(\d{2})\/(\d{4})/
	if(strLogin.substr(0,2).toUpperCase()=='CI' && strLogin.length > 4){	
		alert('O login de CI deve conter no máximo 2 dígitos como código');
		return false;
	}
	if(strLogin.substr(0,2).toUpperCase()=='PA' && strLogin.length > 8){	
		alert('O login de PA deve conter no máximo 6 dígitos como código');
		return false;
	}
	if(strLogin.substr(0,2).toUpperCase()=='CR' && strLogin.length > 6){	
		alert('O login de CR deve conter no máximo 4 dígitos como código');
		return false;
	}
	
	var matchArray = strLogin.match(reg); //
	if (matchArray == null) {
		alert("Login não está no formato válido");
		return false;
	}
	return true;
}


/*
Função: validaChave
objetivo: Permite que o usuario digite apenas o que está no range permitido na função
parâmetros: object - objeto que está sendo editado
utilização: onblur do objeto
exemplo: onblur = "JavaScript: validaPlic(this);";
autor: Jose Rui Viana
*/
function validaChave(object) {
	var reg = /[a-z]|[0-9]/gi
	
	for (var i = 0; i < object.value.length; i++) {
		if (reg.test(object.value.substr(i,1)) == false) {
			ExibirMensagemPopUp("Caracter inválido no campo (" + object.nmcampo + ")!");
			object.select();
			object.focus();
			return;
		}
		reg = /[a-z]|[0-9]/gi;	
	}
}

/*
Função: validaChave2
objetivo: Permite que o usuario digite apenas o que está no range permitido na função
retorno: false
utilização: onkeypress do objeto
exemplo: onblur = "JavaScript: validaPlic2();";
autor: Jose Rui Viana
*/

function validaChave2(){
	var reg = /[a-z]|[0-9]/gi;

	if (reg.test(String.fromCharCode(event.keyCode)) == false) {
		event.returnValue = false;
	}
}

/*
Função: ger_coloca_virgula
Objetivo: Insere uma vírgula após um número determinado de casas inteiras
Autor: Jose Rui Viana
*/
function ger_coloca_virgula(objOrigem) {
	if (ger_valida_tecla_numerica_inteiro() == true) {
		if (objOrigem.value.length == objOrigem.casasint) {
			objOrigem.value += ","; 
		}
	}
	return true;
}
//
/*
função: ger_retira_html
objetivo: retira caracteres HTML de uma string
retorna : string sem HTML
autor: Jose Rui Viana
*/
function ger_retira_html(Word) {
	a = Word.indexOf("<");
	b = Word.indexOf(">");
	len = Word.length;
	c = Word.substring(0, a);
	if(b == -1)
		b = a;
	d = Word.substring((b + 1), len);
	Word = c + d;
	tagCheck = Word.indexOf("<");
	if(tagCheck != -1)
		Word = ger_retira_html(Word);
	return Word;
}

/*
função: troca_cor
objetivo: mudar a cor da linha selecionada de uma tabela
retorna : nada
autor: Jose Rui Viana
*/

var objClicado;
var strNmClassTmp;
var strNmClassAnt;

function troca_cor(pobjOrigem) {
	strNmClassTmp = pobjOrigem.className;
	pobjOrigem.className = 'RegSelecionado';
			
	if (objClicado != null) {
		
		objClicado.className = strNmClassAnt;
	}
	/*
		somente guarda o 
		objanterior se for
		diferente do atual	
	*/ 
	if(objClicado!=pobjOrigem){
		strNmClassAnt = strNmClassTmp;
		objClicado = pobjOrigem;
	}
	
	if(objClicado==pobjOrigem && strNmClassTmp!='RegSelecionado' ){
		pobjOrigem.className = 'RegSelecionado';
		strNmClassAnt = strNmClassTmp;
		objClicado = pobjOrigem;
	}
	
	
}
		
/*
função: checaCheckbox
objetivo:  garante que pelo menos um checkbox deve ser selecionado
retorna : true  ou false + mensagem de erro
autor: Jose Rui Viana
*/

function checaCheckbox(parMensagem)
{
var cont=0;
var el = document.forms[0].elements;
//alert( form.elements.length);
//for(i=0;i< form.elements.length;i++){
for(var i = 0 ; i < el.length ; ++i) {
	if(el[i].type=="checkbox"){
		 if(el[i].checked==true)
			 ++cont; 
  
	}
 } 
alert(el.length);
 if(el.length==0){
alert("Não há registros para enviar");
	return false;
 }
 if(cont==0)
 {
	ExibirMensagemPopUp(parMensagem);
	return false;
  }
 return true; 
}
/*
função: checkRadios
objetivo: obrigar o usuário a escolher um dos radios de 
todos radiogrups do formaulário
retorna : true  ou false + mensagem de erro
autor: Jose Rui Viana
*/

function checkRadios() {
 var el = document.forms[0].elements;
 for(var i = 0 ; i < el.length ; ++i) {
  if(el[i].type == "radio") {
   var radiogroup = el[el[i].name]; // pega o grupo de radios
   var itemchecked = false;
   for(var j = 0 ; j < radiogroup.length ; ++j) {
    if(radiogroup[j].checked) {
	 itemchecked = true;
	 break;
	}
   }
   if(!itemchecked) { 
    ExibirMensagemPopUp("Escolha um ("+el[i].nmcampo+").");
    if(el[i].focus)
     el[i].focus();
	return false;
   }
  }
 }
 return true;
} 

function ValidaCompetencia(dateStr){

var datePat = /^(\d{2})\/(\d{4})/

var matchArray = dateStr.match(datePat); //
if (dateStr.length!=7)
{
 alert("Competência inválida! Coloque a Competência no formato mm/aaaa.") 
 return false;
}
if (matchArray == null) {
alert("Competência inválida! Coloque a Competência no formato mm/aaaa.");
return false;
}
month = matchArray[1];       
year = matchArray[2];
     
if(year=="0000")
{
	alert('Ano inválido');
	return false;
}
if (month < 1 || month > 12) { // checa o mês
	alert('Mês tem que ser entre 1 e 12.')
// alert("Mês  tem que ser entre 1 e 12.");
	return false;
}

return true;  // date é válida
}


/*
função: isDate
objetivo: verificar se uma data é válida
parâmetros: data
utilização: isDate('22/03/2002')
retorna : 
true- se a data for válida
false- se a data for inválida + mensagem de erro
autor: Jose Rui Viana
*/

function isDate(dateStr,tp) {
//checa a data pro formato dd/mm/aaaa
var now = new Date(); 
if (dateStr.length==10)
{

	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;
	var matchArray = dateStr.match(datePat); //

	if (dateStr.length!=10)
	{
	
	 ExibirMensagemPopUp("Data inválida! Coloque a data no formato dd/mm/aaaa ou dd/mm/aa.") 
	 return false;
	}
	if (matchArray == null) {
	ExibirMensagemPopUp("Data inválida! Coloque a data no formato dd/mm/aaaa ou dd/mm/aa.")
	return false;
	}
	month = matchArray[3];       
	day = matchArray[1];       
	year = matchArray[4] ; 
	data=day+"/"+month+"/"+year;  
	if (day < 1 || day > 31) {
	
		ExibirMensagemPopUp('Dia tem que ser entre 1 e 31.')
	// alert("Dia tem que ser entre 1 e 31.");
	return false;
	}
	if (month < 1 || month > 12) { // checa o mês
		ExibirMensagemPopUp('Mês  tem que ser entre 1 e 12.')
	// alert("Mês  tem que ser entre 1 e 12.");
	return false;
	}
	//verifica o tipo de data e valida o ano
	if((tp==1)&&(year<1900))//tp=1 datanormal
	{
		ExibirMensagemPopUp('Ano inválido')
		return false;
	}
	if((tp==2)&&((year<1900)||(year > now.getYear()+1)))//tp=2 data prevista;
	{
		ExibirMensagemPopUp('O ano digitado não pode ser superior a ' + (now.getYear()+1))
		return false;
	}
	if((tp==3)&&((year<1900)||(year > now.getYear())))//tp=3 data realizada;
	{
		ExibirMensagemPopUp('O ano digitado não pode ser superior ao ano corrente.')
		return false;
	}
	if((tp==3)&&(Compara_DataCorrente(data)==false))//tp=3 data realizada;
	{
		return false;
	}
	if ((month==4 || month==6 || month==9 || month==11) && day==31) {
		ExibirMensagemPopUp('Data inválida. Mês não pode ser maior que 31')
	// alert("Data inválida. Mês não pode ser maior que 31")
	return false
	}
	if (month == 2) { // checa fevereiro
	var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
	if (day>29 || (day==29 && !isleap)) {
	
	ExibirMensagemPopUp('Data inválida. Fevereiro só possui 28 dias no ano escolhido')
	// alert("Data inválida. Fevereiro só possui 28 dias no ano escolhido");
	return false;
	   }
	} 
}
//checa a data pro formato dd/mm/aa
else if (dateStr.length==8)
{

	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2})$/;
	var matchArray = dateStr.match(datePat); //
	
	if (dateStr.length!=8)
	{
	 ExibirMensagemPopUp("Data inválida! Coloque a data no formato dd/mm/aaaa ou dd/mm/aa.") 
	 return false;
	}
	if (matchArray == null) {
	ExibirMensagemPopUp("Data inválida! Coloque a data no formato dd/mm/aaaa ou dd/mm/aa.")
	return false;
	}
	month = matchArray[3];       
	day = matchArray[1];       
	year = "20" + matchArray[4];  
	data=day+"/"+month+"/"+year;
	if (day < 1 || day > 31) {
	
		ExibirMensagemPopUp('Dia tem que ser entre 1 e 31.')
	// alert("Dia tem que ser entre 1 e 31.");
	return false;
	}
	if (month < 1 || month > 12) { // checa o mês
		ExibirMensagemPopUp('Mês  tem que ser entre 1 e 12.')
	// alert("Mês  tem que ser entre 1 e 12.");
	return false;
	}
	//verifica o tipo de data e valida o ano
	if((tp==1)&&(year<1900))//tp=1 datanormal
	{
		ExibirMensagemPopUp('Ano inválido')
		return false;
	}
	if((tp==2)&&((year<1900)||(year > now.getYear()+1)))//tp=2 data prevista;
	{
		ExibirMensagemPopUp('O ano digitado não pode ser superior a ' + (now.getYear()+1))
		return false;
	}
	if((tp==3)&&((year<1900)||(year > now.getYear())))//tp=3 data realizada;
	{
		ExibirMensagemPopUp('O ano digitado não pode ser superior ao ano corrente.')
		return false;
	}
	if((tp==3)&&(Compara_DataCorrente(data)==false))//tp=3 data realizada;
	{
		return false;
	}
	if ((month==4 || month==6 || month==9 || month==11) && day==31) {
		ExibirMensagemPopUp('Data inválida. Mês não pode ser maior que 31')
	// alert("Data inválida. Mês não pode ser maior que 31")
	return false
	}
	if (month == 2) { // checa fevereiro
	var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
	if (day>29 || (day==29 && !isleap)) {
	
	ExibirMensagemPopUp('Data inválida. Fevereiro só possui 28 dias no ano escolhido')
	// alert("Data inválida. Fevereiro só possui 28 dias no ano escolhido");
	return false;
	   }
	}
}
else
{
ExibirMensagemPopUp("Data inválida! Coloque a data no formato dd/mm/aaaa ou dd/mm/aa.")
return false;
}
return true;  // date é válida
}


/*
função: Compara_DataCorrente
objetivo: comparar data passada por parametro com data corrente
parâmetros: data1
utilização: Compara_DataCorrente('22/03/2002')
retorna :
true - se a data informada for menor ou igual que a data corrente
false - se a data informada for maior que a data corrente


autor: Jose Rui Viana
*/

function Compara_DataCorrente(data1){
	var now = new Date(); 
	dia1= data1.substr(0,2);
	mes1= data1.substr(3,2);
	ano1=data1.substr(6,4);
	
	dia2= now.getDate()
	mes2= now.getMonth()+1;
	ano2=now.getYear();

	if(ano2 <  ano1){
	   ret = 1;
	   
	}
	else if(ano2 >  ano1){
	   ret = 2;
	}
	else if(ano2==ano1)	 
	{
		if(mes2<mes1){
		   ret = 1;
		   //data 1 maior que data2
		}
		else if(mes2>mes1)	//data 2 maior que data1
		 	ret = 2;
		else if(mes2 == mes1){
			if(dia2<dia1)
			 	ret = 1;
			else if(dia2>=dia1)	//data 2 maior que data1
		 		ret = 2;
		}
	}
	/*
	else if((ano2==ano1)&&(mes2==mes1)){
		 if(dia2<dia1)
			 ret = 1;
		else if(dia2>=dia1)	//data 2 maior que data1
		 	ret = 2;
		else if(dia1==dia2)
			ret = 0;

	}*/

	if(ret == 2 || ret == 0){
			return true;
	}
	else if(ret ==1){
			alert('A data informada não pode ser maior que a data corrente!');
			return false;
	}
	
}		


/*
função: compara_datas
objetivo: comparar duas datas
parâmetros: data1 , data2
utilização: comparadatas('22/03/2002','22/04/2002')
retorna :
1- se a primeira data for maior que a segunda
2- se a segunda data for maior que a primeira
0- se as duas datas passadas forem iguais

autor: Jose Rui Viana
*/
function compara_datas(data1,data2){

dia1= data1.substr(0,2);
mes1= data1.substr(3,2);
// datas no formato dd/mm/yyyy
if(data1.length==10)
{
ano1=data1.substr(6,4);
}
else
{
ano1="20" + data1.substr(6,2);
}

dia2= data2.substr(0,2);
mes2= data2.substr(3,2);
// datas no formato dd/mm/yy
if(data2.length==10)
{
ano2=data2.substr(6,4);
}
else
{
ano2="20" + data2.substr(6,2);
}


if(ano2 <  ano1)
   return 1;
   //data 1 maior que data2
if(ano2==ano1)
   {
     if(mes2<mes1)
       return 1;
       //data 1 maior que data2
   }
if((ano2==ano1)&&(mes2==mes1))
     if(dia2<dia1)
         return 1;
if((ano2==ano1)&&(mes2==mes1)&&(dia2==dia1))
{
 //datas iguais
  return 0;
}        

return 2; //data 2 maior que data1
// data 2 maior que data 1
	
}		



/*
função: compara_num_asc
objetivo: ordernar um array com dados numéricos de forma ascendente
parâmetros: a, b não utilizados
utilização: parâmetro para método sort de um Array
exemplo: ... vetTeste.sort(compara_num_asc);
autor: Jose Rui Viana
*/
function compara_num_asc(a, b) {
	return a - b; // ascendente
}



/*
função: compara_num_desc
objetivo: ordernar um array com dados numéricos de forma descendente
parâmetros: a, b não utilizados
utilização: parâmetro para método sort de um Array
exemplo: ... vetTeste.sort(compara_num_desc);
autor: Jose Rui Viana
*/
function compara_num_desc(a, b) {
	return b - a; // descendente
}



/*
função: valida_compr_keypress
objetivo: não permitir a digitação de mais string que o permitido pela propriedade maxLength
parâmetros: pobjOrigem - objeto de origem
utilização: no evento onkeypress do objeto
exemplo: onkeypress = new Function ("valida_compr_keypress(this);");
autor: Jose Rui Viana
*/
function valida_compr_keypress(pobjOrigem) {
	if (pobjOrigem.value.length >= pobjOrigem.maxLength) {
 	  window.event.keyCode = 0;
	}
}


		
/*
função: valida_compr_keyup
objetivo: trocar na string de origem os caracteres para um novo caracter
parâmetros: robjOrigem - objeto de origem que terá value alterado
utilização: no evento onkeyup do objeto
exemplo: onkeyup = new Function ("valida_compr_keyup(this);");
autor: Jose Rui Viana
*/
function valida_compr_keyup(robjOrigem) {
	if (robjOrigem.value.length > robjOrigem.maxLength) {
		robjOrigem.value = robjOrigem.value.substr(0, robjOrigem.maxLength)
	}
}   



/*
função: ger_formata_numero_br
objetivo: trocar um número no formato americano para formato brasileiro
parâmetros: pstrOrigem - string de original
						pintNuCasasDec - número de casas decimais
utilização: em qualquer parte do código para substituir números
exemplo: alert(ger_formata_numero_br("1040.3", "2")); ... retorna 1.040,30"
autor: Jose Rui Viana
*/
function ger_formata_numero_br(pdblOrigem, pintNuCasasDec) {
	// Variáveis destinas a geração da saída
	var strSaida = new String("");
	var dblTemp = new Number(pdblOrigem);

	// Variáveis utilizadas para fazer a pontuação
	var varRegBuscaVirg;
	var intPos;
	var intCont;
	
	// Fixa o tamanho do número de casas decimais, o default é 0 sem casas decimais
	if (!isNaN(pintNuCasasDec)) {
		strSaida = dblTemp.toFixed(pintNuCasasDec).toString(); 
	}
	else {
		strSaida = dblTemp.toFixed(0).toString(); 
	}

	// Substitui para formato brasileiro
	strSaida = strSaida.replace(/\,/gi, "");
	strSaida = strSaida.replace(/\./gi, ",");

	// Monta a expressão de busca da vírgula
	varRegBuscaVirg = /,/i;

	// Pega a posição procurada
	intPos = strSaida.search(varRegBuscaVirg);

	// Caso não tenha casas decimais (vírgula)
	if (intPos == -1) {
	  // Coloca na posição de busca o comprimento completo da string
		intPos = strSaida.length;
	}

	// Preencho os pontos separadores de milhar
	for (intCont=intPos; intCont>3; intCont-=3) {
	  strSaida = strSaida.substr(0, (intCont-3)) + "." + strSaida.substr((intCont-3), (strSaida.length-(intCont-3)));
	}
	
	return strSaida;
}



/*
função: ger_replace_string
objetivo: trocar na string de origem os caracteres para um novo caracter
parâmetros: pstrOrigem - string original a ser trocada
						pstrProcura - string a ser localizada e substituída
						pstrNovo - novo caracter a substituir
utilização: em qualquer parte do código para substituir strings
exemplo: alert(ger_replace_string("100.00", ".", ","));"
autor: Jose Rui Viana
*/
function  ger_replace_string(pstrOrigem,pstrProcura,pstrNovo){
	// exemplo: /&/gi
	return pstrOrigem.toString().replace(new RegExp(pstrProcura, "gi"), pstrNovo);
}



/*
função: ger_valida_campo_data
objetivo: valida se é ou não uma data válida
parâmetros: robjOrigem - objeto que está sendo editado
utilização: evento onblur do objeto
exemplo: onblur="JavaScript: return ger_valida_campo_data(this);"
autor: Jose Rui Viana
*/
function ger_valida_campo_data(robjOrigem,tpdata) {
	var blnRetTemp = true;
	
	if (ger_trim(robjOrigem.value) != "") {
		blnRetTemp = isDate(robjOrigem.value,tpdata);
	
		if(!blnRetTemp) {
			robjOrigem.value = "";
			robjOrigem.focus();
		}
	}
	
	return blnRetTemp;
}



/*
função: ger_valida_campo_cep
objetivo: valida se é ou não um cep válido
parâmetros: robjOrigem - objeto que está sendo editado
utilização: evento onblur do objeto
exemplo: onblur="JavaScript: return ger_valida_campo_cep(this);"
autor: Jose Rui Viana
*/
function ger_valida_campo_cep(robjOrigem) {
	var reg = /\d{5}-\d{3}/gi;

	if (reg.test(robjOrigem.value) == false) {
		robjOrigem.select();
		robjOrigem.focus();
	    return false;
	}
	return true;
}



/*
função: ger_valida_range_valor
objetivo: valida o range de valores que um objeto pode conter
parâmetros: robjOrigem - objeto que está sendo editado
			pblnExibeMsg - true para habilitar a exibição de mensagens de erro e false 
			para desabilitar
utilização: evento onblur do objeto
exemplo: onblur="JavaScript: ger_valida_range_valor((this, true);"
autor: Jose Rui Viana
*/
function ger_valida_range_valor(robjOrigem, pblnExibeMsg) {
	var blnRetTemp = true;
	
// // alert("Primeira comparação: " + (parseFloat(robjOrigem.value) < parseFloat(robjOrigem.vl_range_min)));	
// // alert("Segunda comparação: " + (parseFloat(robjOrigem.value) > parseFloat(robjOrigem.vl_range_max)));	
	
	if (!isNaN(robjOrigem.value)) {
		if ((parseFloat(robjOrigem.value) < parseFloat(robjOrigem.vl_range_min)) && (parseFloat(robjOrigem.vl_range_min) != 0)) {
			if (pblnExibeMsg) {
				
				ExibirMensagemPopUp("O conteúdo do campo (" + robjOrigem.nmcampo + ") não pode ser inferior a R$ (" + robjOrigem.vl_range_min + ").")

//				alert("O conteúdo do campo (" + robjOrigem.nmcampo + ") não pode ser inferior a R$ " + robjOrigem.vl_range_min + ".");
				robjOrigem.value = "";
				robjOrigem.focus();
			}
			blnRetTemp = false;
		} 
		else if ((parseFloat(robjOrigem.value) > parseFloat(robjOrigem.vl_range_max)) && (parseFloat(robjOrigem.vl_range_max) != 0)) {
			if (pblnExibeMsg) {

				ExibirMensagemPopUp("O conteúdo do campo (" + robjOrigem.nmcampo + ") não pode ser superior a R$ (" + robjOrigem.vl_range_max + ").")

//				alert("O conteúdo do campo (" + robjOrigem.nmcampo + ") não pode ser superior a R$ " + robjOrigem.vl_range_max + ".");
				robjOrigem.value = "";
				robjOrigem.focus();
			}
			blnRetTemp = false;
		}
	} 
	else {
// // //		robjOrigem.value = "";
	}
	
	return blnRetTemp;
}



/*
função: ger_mascara_CEP
objetivo: colocar a mascara de cep em um campo de texto
parâmetros: objOrigem - objeto que está sendo editado
utilização: evento onKeydown do objeto
exemplo: onKeydown="JavaScript: ger_mascara_cep(this);"
autor: Jose Rui Viana
*/

function ger_mascara_cep (objOrigem) {
	// 00000-000

	if (ger_valida_tecla_numerica_inteiro())
		if (objOrigem.value.length == 5)
			objOrigem.value += "-"; 
		else if	(objOrigem.value.length >= 10)
			event.keyCode=0
}

/*
função: ger_pula_campo_preenchido
objetivo: enviar foco de edição para o próximo campo do tabindex, quando o objeto tiver todo o 
		  seu conteúdo preenchido
parâmetros: pobjOrigem - objeto que está sendo editado
retorno: sempre true; o campo destino recebe o foco de edição se compr. máx. preenchido
utilização: evento onKeydown do objeto
exemplo: onKeydown="JavaScript: ger_pula_campo_preenchido(this);"
autor: Jose Rui Viana
*/

function ger_pula_campo_preenchido(pobjOrigem) {
	var intTecla = window.event.keyCode;

	if (window.event.ctrlKey == false && window.event.altKey == false && window.event.shiftKey == false) {
		// enter(13)
		if (intTecla == 13) {	
/* Comentado para não pular automaticamente de campo quando a tecla ENTER for pressionada */
//			window.event.keyCode = 9;
		}	
		// backspace(8), tab(9), delete(46), home(36), end(35), seta dir(39), seta esq(37)
 		else if ((intTecla != 8) && (intTecla != 9) && (intTecla != 46) && (intTecla != 36) && (intTecla != 35) && (intTecla != 39) && (intTecla != 37)) {
// //			if (pobjOrigem.value.length == pobjOrigem.maxLength) { 
			if ((pobjOrigem.value.length == pobjOrigem.maxLength) && (pobjOrigem.fg_deletar == '')) { 
				window.event.keyCode = 9;
			}	
		} 
	}
	
	// Limpa o flag de limpeza automática
	pobjOrigem.fg_deletar = '';		
	
	return true;		
}



/*
função: ger_verifica_ja_preenchido
objetivo: verifica se o componente já está preenchido para setar flag de limpeza quando o
					mesmo já estiver selecionado
parâmetros: pobjOrigem - objeto que está sendo editado
retorno: sempre true; 
utilização: evento onfocus do objeto
exemplo: onfocus="JavaScript: ger_verifica_ja_preenchido(this);"
autor: Jose Rui Viana
*/

function ger_verifica_ja_preenchido(pobjOrigem) {
	
	if (pobjOrigem.value.length == pobjOrigem.maxLength) { 
		pobjOrigem.fg_deletar = 's';	
	}	
}



/*
função: ger_pula_campo_destino
objetivo: enviar foco de edição para o campo indicado quando o objeto tiver todo 
	  o seu conteúdo preenchido
parâmetros: pobjOrigem - objeto que está sendo editado
	    pobjDestino - objeto que ganhará o foco
retorno: sempre true; o campo destino recebe o foco de edição se compr. máx. preenchido
utilização: evento onKeyPress do objeto
exemplo: onKeyPress="JavaScript: ger_pula_campo_destino(this, txtDestino);"
autor: Jose Rui Viana
*/
function ger_pula_campo_destino(pobjOrigem, pobjDestino) {
	if (window.event.keyCode != 16 && window.event.keyCode != 9 && window.event.keyCode != 37 && window.event.keyCode != 39 && window.event.keyCode != 46 && window.event.keyCode != 35 && window.event.keyCode != 36 && window.event.keyCode != 45 && window.event.keyCode != 8)
	{
		if ((pobjOrigem.value.length == pobjOrigem.maxLength) && (pobjOrigem.fg_deletar == ''))
		{ 
			window.event.keyCode = 0;
			pobjDestino.focus();
		}	
	}
	
	// Limpa o flag de limpeza automática
	pobjOrigem.fg_deletar = '';		
	
	return true;		
}



/*
função: ger_valida_tecla_numerica_inteiro
objetivo: validar se a tecla digitada é numérica ou não (dentro do range 0..9)
parâmetros:
retorno: true (se numérica) ou false (se não numérica) 
utilização: evento onKeyPress do objeto
exemplo: onKeyPress="JavaScript: ger_valida_tecla_numerica_inteiro();"
autor: Jose Rui Viana
*/
function ger_valida_tecla_numerica_inteiro() {
	var intTecla;

	if (window.event.ctrlKey == false && window.event.altKey == false && window.event.shiftKey == false) {
		intTecla = window.event.keyCode;
 		// Valida o range de "0..9"
 		if (((intTecla > 47) && (intTecla < 58)) || (intTecla == 13)) {
			window.event.returnValue = true;
			return true;
		}
		else {
			window.event.returnValue = false;
			return false;
		}
	}
	else {
		window.event.returnValue = false;
		return false;
	}
}



/*
função: ger_valida_tecla_numerica_float
objetivo: validar se a tecla digitada é numérica ou não (dentro do range 0..9)
parâmetros:
retorno: true (se numérica) ou false (se não numérica) 
utilização: evento onKeyPress do objeto
exemplo: onKeyPress="JavaScript: ger_valida_tecla_numerica_float();"
autor: Jose Rui Viana
*/
function ger_valida_tecla_numerica_float() {
  var intTecla;
			
  if (window.event.ctrlKey == false && window.event.altKey == false && window.event.shiftKey == false) {
		intTecla = window.event.keyCode;
 		// Valida o range de "0..9"
 		// "Enter" (13), "." (46), "," (44)
 		if (((intTecla > 47) && (intTecla < 58)) || (intTecla == 13) || (intTecla == 46) || (intTecla == 44))
		{
			window.event.returnValue = true;
			return true;
		}
		else
		{
			window.event.returnValue = false;
			return false;
		}
  }
}



/*
função: ger_valida_tecla_caracter
objetivo: validar se a tecla digitada é um caracter válido ou não
parâmetros:
retorno: true (se for válido) ou false (se não for válido) 
utilização: evento onKeyPress do objeto
exemplo: onKeyPress="JavaScript: ger_valida_tecla_caracter();"
autor: Jose Rui Viana
*/

function ger_valida_tecla_caracter() {
  var intTecla;
	/*			
  if (window.event.ctrlKey == false && window.event.altKey == false && window.event.shiftKey == false) {
	intTecla = window.event.keyCode;
 	// Valida o caracter "'" retornando falso
 	if (intTecla != 39)
	{
		window.event.returnValue = true;
		return true;
	}
	else
	{
		window.event.returnValue = false;
		return false;
	}
  }
  else {
	intTecla = window.event.keyCode;
	if (intTecla != 34) {
		window.event.returnValue = true;
		return true;
	}
	else {
		window.event.returnValue = false;
		return false;
	}
  }
	*/
}



/*
função: ger_validar_hora
objetivo: executa verificação do preenchimento correto da hora que foi digitada em um campo
		  formatado
parâmetros: objOrigem - objeto que está sendo editado
retorno: sempre true; caso o campo tenha um conteúdo inválido o mesmo recebe o foco e é 
		 exibida uma mensagem de advertência
utilização: evento onblur do objeto
exemplo: onblur="JavaScript: ger_validar_hora(this);"
autor: Jose Rui Viana
*/
function ger_validar_hora(objOrigem) {
	var strHora;
	var strMinuto;
	var blnHouveErro = false;

	strHora = ger_trim(objOrigem.value.substr(0, 2));
	strMinuto = ger_trim(objOrigem.value.substr(3, 2));
	
	if (strHora != "") {
		if (strHora.length < 2) {
			strHora = "0" + strHora;
		}
	}
	
	if (strMinuto != "") {
		if (strMinuto.length < 2) {
			strMinuto = "0" + strMinuto;
		}
	}

	if ((isNaN(strHora)) || (isNaN(strMinuto))) {
		blnHouveErro = true;
	}
	else {
		if (parseInt(strHora) < 0 || parseInt(strHora) > 23) {
			blnHouveErro = true;		
		}
		else if (parseInt(strMinuto) < 0 || parseInt(strMinuto) > 59) {
			blnHouveErro = true;
		}
	}
	
	if (blnHouveErro) {
		ExibirMensagemPopUp("Valores inválidos informados na hora!")

//		alert("Valores inválidos informados na hora!");
		objOrigem.value = "";
		objOrigem.focus();
	}
	
	return true;
}



/*
função: ger_coloca_mascara_hora
objetivo: coloca máscara de um campo do tipo hora
parâmetros: objOrigem - objeto da tela que está sendo editado
retorno: sempre true; o valor do objeto editado é alterado (formatação automática)
utilização: evento onKeyPress do objeto
exemplo: onKeyPress="JavaScript: ger_coloca_mascara_hora(this);"
autor: Jose Rui Viana
*/
function ger_coloca_mascara_hora(objOrigem) {
	// 00:00

	if (ger_valida_tecla_numerica_inteiro()) {
		if (objOrigem.value.length == 2)
			objOrigem.value += ":"; 
	} 

	return true;
}



/*
função: ger_coloca_mascara_cpf
objetivo: coloca máscara do cpf no momento de preenchimento do campo
parâmetros: objOrigem - objeto da tela que está sendo editado
retorno: sempre true; o valor do objeto editado é alterado (formatação automática)
utilização: evento onKeyPress do objeto
exemplo: onKeyPress="JavaScript: ger_coloca_mascara_cpf(this);"
autor: Jose Rui Viana
*/
function ger_coloca_mascara_cpf(objOrigem) {
	// 000.000.000-00

	if (ger_valida_tecla_numerica_inteiro()) {
	   if (objOrigem.value.length == 3)
		objOrigem.value += "."; 
	   else if (objOrigem.value.length == 7)
		objOrigem.value += "."; 
	   else if (objOrigem.value.length == 11)
		objOrigem.value += "-";
	} 

	return true;
}



/*
função: ger_coloca_mascara_cnpj
objetivo: coloca máscara do cnpj no momento de preenchimento do campo
parâmetros: objOrigem - objeto da tela que está sendo editado
retorno: sempre true; o valor do objeto editado é alterado (formatação automática)
utilização: evento onKeyPress do objeto
exemplo: onKeyPress="JavaScript: ger_coloca_mascara_cnpj(this);"
autor: Jose Rui Viana
*/
function ger_coloca_mascara_cnpj(objOrigem) {
	// 00.000.000/0000-00

	if (ger_valida_tecla_numerica_inteiro()) {
	   if (objOrigem.value.length == 2)
		objOrigem.value += "."; 
	   else if (objOrigem.value.length == 6)
		objOrigem.value += "."; 
	   else if (objOrigem.value.length == 10)
		objOrigem.value += "/";
	   else if (objOrigem.value.length == 15)
		objOrigem.value += "-";
	} 

	return true;
}



/*
função: ger_coloca_mascara_data
objetivo: coloca máscara de data (dd/mm/aaaa) no momento de preenchimento do campo
parâmetros: objOrigem - objeto da tela que está sendo editado
retorno: sempre true; o valor do objeto editado é alterado (formatação automática)
utilização: evento onKeyPress do objeto
exemplo: onKeyPress="JavaScript: ger_coloca_mascara_data(this);"
autor: Jose Rui Viana
*/
function ger_coloca_mascara_data(objOrigem) {
	// 00/00/0000
	
	if (ger_valida_tecla_numerica_inteiro()) {
	   if (objOrigem.value.length == 2)
	      	objOrigem.value += "/"; 
	   else if (objOrigem.value.length == 5)
	   	objOrigem.value += "/"; 
	} 

	return true;
}



/*
função: ger_coloca_mascara_data2
objetivo: coloca máscara de data (dd/mm/aaaa) no momento de preenchimento do campo
				  inicializa pulo automático quando a qtde. de caracteres for igual ao máximo
					permitido para o campo
parâmetros: objOrigem - objeto da tela que está sendo editado
retorno: sempre true; o valor do objeto editado é alterado (formatação automática)
utilização: evento onKeyPress do objeto
exemplo: onKeyPress="JavaScript: ger_coloca_mascara_data2(this);"
autor: Jose Rui Viana
*/
function ger_coloca_mascara_data2(objOrigem) {
	// 00/00/0000
	
	if (ger_valida_tecla_numerica_inteiro()) {
		if (objOrigem.value.length == 2) {
			objOrigem.value += "/"; 
		}
		else if (objOrigem.value.length == 5) {
			objOrigem.value += "/"; 
		}
		else if (objOrigem.value.length == 9) {
			objOrigem.value += String.fromCharCode(window.event.keyCode);
			objOrigem.blur();
		}
	} 

	return true;
}



/*
função: ger_gera_eventos_objetos
objetivo: gera os eventos básicos de validação de todos os objetos do documento de origem
parâmetros:
retorno: sempre true
utilização:
exemplo: ger_gera_eventos_objetos();
autor: Jose Rui Viana 

obs. importante tags de controle de campos dos formulários: 
	tipo - define o tipo do campo: "NI" (Numérico inteiro), "D" (Data), "CEP" (CEP), "CPF" (CPF),
																 "CNPJ" (CNPJ), "NF" (números reais), "C" (Caracter),
																 "CCORR" (Conta Corrente), "H" (Hora)
	nmcampo - nome do campo que aparecerá nas mensagens de validação
	nulo - define se o campo é nulo ou não ("S"im para aceitar nulo e "N"ão aceitar nulo)
				 (validação utilizada no submit do form "return ger_valida_campos_formularios();")
	agrupamento - número do agrupamento lógico de campos que devem possuir um tipo de validação
								agrupada, ou seja, com o mesmo número de agrupamento não permitindo que seja
								enviado (submit) sem que todos os campos do agrupamento tenham sido preenchidos
								(validação utilizada no submit do form "return ger_valida_campos_form_agrupados();")
*/
function ger_gera_eventos_objetos() {

	var intIndForms;
	var intIndObjects;
	var strTipoObjeto="";

	for (intIndForms=0; intIndForms< document.forms.length; intIndForms++) {
		for (intIndObjects=0; intIndObjects<document.forms(intIndForms).elements.length; intIndObjects++) {
			try{
				strTipoObjeto = ger_trim(document.forms(intIndForms).elements[intIndObjects].type.toString().toUpperCase());
			}
			catch(e){
				 strTipoObjeto="SUBMIT"
			}
			// Não são adicionados eventos padrões para os objetos de input do tipo:
			// "submit", "reset" e "button"
			if ((strTipoObjeto != "SUBMIT") && (strTipoObjeto != "RESET") && (strTipoObjeto != "BUTTON")) {
			
				// Adiciona o evento "onkeydown" para fazer pulo automático de campo
				document.forms(intIndForms).elements[intIndObjects].onkeydown = new Function ("ger_pula_campo_preenchido(this);");
				
				// Adiciona o evento "onchange" nos objetos agrupados para fazer a limpeza automática 
				// dos campos dos objetos que estão fora do agrupamento
				if (!isNaN(document.forms(intIndForms).elements[intIndObjects].agrupamento)) {
					document.forms(intIndForms).elements[intIndObjects].onchange = new Function ("ger_limpa_campos_outros_agrupamentos(this);");
				}

				if (strTipoObjeto == "TEXTAREA") {
				
					document.forms(intIndForms).elements[intIndObjects].onkeypress = new Function ("valida_compr_keypress(this);");	
					document.forms(intIndForms).elements[intIndObjects].onkeyup = new Function ("valida_compr_keyup(this);");	

				}
				else {
					// Pega o tipo de campo (tipo tag definida dentro do campo)
					switch (document.forms(intIndForms).elements[intIndObjects].tipo) {
						// Numérico inteiro
						case "NI":
							document.forms(intIndForms).elements[intIndObjects].onkeypress = new Function ("ger_valida_tecla_numerica_inteiro();");
							document.forms(intIndForms).elements[intIndObjects].onblur = new Function ("ger_ehnumerico(this);");
							document.forms(intIndForms).elements[intIndObjects].onfocus = new Function ("ger_verifica_ja_preenchido(this);");
						
							break;

						// Data tp=1
						case "D":
							document.forms(intIndForms).elements[intIndObjects].onkeypress = new Function ("ger_coloca_mascara_data(this)");
							document.forms(intIndForms).elements[intIndObjects].onblur = new Function ("ger_valida_campo_data(this,1);");
							document.forms(intIndForms).elements[intIndObjects].onfocus = new Function ("ger_verifica_ja_preenchido(this);");
							break;
						// Data Prevista tp=2
						case "DPrevista":
							document.forms(intIndForms).elements[intIndObjects].onkeypress = new Function ("ger_coloca_mascara_data(this)");
							document.forms(intIndForms).elements[intIndObjects].onblur = new Function ("ger_valida_campo_data(this,2);");
							document.forms(intIndForms).elements[intIndObjects].onfocus = new Function ("ger_verifica_ja_preenchido(this);");
							break;
							// Data Realizada tp=3
						case "DRealizada":
							document.forms(intIndForms).elements[intIndObjects].onkeypress = new Function ("ger_coloca_mascara_data(this)");
							document.forms(intIndForms).elements[intIndObjects].onblur = new Function ("ger_valida_campo_data(this,3);");
							document.forms(intIndForms).elements[intIndObjects].onfocus = new Function ("ger_verifica_ja_preenchido(this);");
							break;

						// Data Hora - pula automaticamente quando o campo for preenchido para o campo
						//						 hora tp=1
						case "DH":
							document.forms(intIndForms).elements[intIndObjects].onkeypress = new Function ("ger_coloca_mascara_data2(this)");
							document.forms(intIndForms).elements[intIndObjects].onblur = new Function ("ger_valida_campo_data(this,1);");
							document.forms(intIndForms).elements[intIndObjects].onfocus = new Function ("ger_verifica_ja_preenchido(this);");
							break;
							
						// Campo do tipo CEP
						case "CEP":
							document.forms(intIndForms).elements[intIndObjects].onkeypress = new Function ("ger_mascara_cep(this)");
							document.forms(intIndForms).elements[intIndObjects].onblur = new Function ("ger_valida_campo_cep(this);");
							document.forms(intIndForms).elements[intIndObjects].onfocus = new Function ("ger_verifica_ja_preenchido(this);");
							break;
		
						
						// Campo do tipo CPF
						case "CPF":
							document.forms(intIndForms).elements[intIndObjects].onkeypress = new Function ("ger_coloca_mascara_cpf(this)");
							document.forms(intIndForms).elements[intIndObjects].onblur = new Function ("ger_validar_cpf(this);");
							document.forms(intIndForms).elements[intIndObjects].onfocus = new Function ("ger_verifica_ja_preenchido(this);");

							break;
						
						case "CPF_Gestao":
							document.forms(intIndForms).elements[intIndObjects].onkeypress = new Function ("ger_coloca_mascara_cpf(this)");
							document.forms(intIndForms).elements[intIndObjects].onblur = new Function ("ger_validar_cpf(this);");
							document.forms(intIndForms).elements[intIndObjects].onfocus = new Function ("ger_verifica_ja_preenchido(this);");

							break;

						// Campo do tipo CNPJ
						case "CNPJ":
							document.forms(intIndForms).elements[intIndObjects].onkeypress = new Function ("ger_coloca_mascara_cnpj(this)");
							document.forms(intIndForms).elements[intIndObjects].onblur = new Function ("ger_validar_cnpj(this);");
							document.forms(intIndForms).elements[intIndObjects].onfocus = new Function ("ger_verifica_ja_preenchido(this);");

							break;

						case "CNPJ_Gestao":
							document.forms(intIndForms).elements[intIndObjects].onkeypress = new Function ("ger_coloca_mascara_cnpj(this)");
							document.forms(intIndForms).elements[intIndObjects].onblur = new Function ("ger_validar_cnpj(this);");
							document.forms(intIndForms).elements[intIndObjects].onfocus = new Function ("ger_verifica_ja_preenchido(this);");

							break;

						// Campo caracter
						case "C":
							document.forms(intIndForms).elements[intIndObjects].onkeypress = new Function ("ger_valida_tecla_caracter()");
							document.forms(intIndForms).elements[intIndObjects].onfocus = new Function ("ger_verifica_ja_preenchido(this);");
							break;

						// Conta Corrente
						case "CCORR":
							document.forms(intIndForms).elements[intIndObjects].onkeypress = new Function ("ger_valida_tecla_numerica_inteiro();");
							document.forms(intIndForms).elements[intIndObjects].onblur = new Function ("complementa_string_caracter(this, '0', 'E');");
							document.forms(intIndForms).elements[intIndObjects].onfocus = new Function ("ger_verifica_ja_preenchido(this);");
						
							break;

						// Numérico com ponto flutuante (números reais)
						case "NF":
							document.forms(intIndForms).elements[intIndObjects].onkeypress = new Function ("ger_valida_tecla_numerica_float()");
							document.forms(intIndForms).elements[intIndObjects].onfocus = new Function ("ger_verifica_ja_preenchido(this);");
						
							if ((!isNaN(document.forms(intIndForms).elements[intIndObjects].vl_range_min)) && (!isNaN(document.forms(intIndForms).elements[intIndObjects].vl_range_max))) {
								document.forms(intIndForms).elements[intIndObjects].onblur = new Function ("ger_valida_range_valor(this, true);");
							}
							
							break;

						// Hora
						case "H":
							document.forms(intIndForms).elements[intIndObjects].onkeypress = new Function ("ger_coloca_mascara_hora(this)");
							document.forms(intIndForms).elements[intIndObjects].onblur = new Function ("ger_validar_hora(this);");
							document.forms(intIndForms).elements[intIndObjects].onfocus = new Function ("ger_verifica_ja_preenchido(this);");
							break;

						case "DEC":
							document.forms(intIndForms).elements[intIndObjects].onkeypress = new Function ("ger_coloca_virgula(this);");
							document.forms(intIndForms).elements[intIndObjects].onblur = new Function ("valida_decimal(this);");
							document.forms(intIndForms).elements[intIndObjects].onfocus = new Function ("ger_verifica_ja_preenchido(this);");
							
							break;
							
						case "PKEY":
							document.forms(intIndForms).elements[intIndObjects].onkeypress = new Function ("validaChave2();");
							document.forms(intIndForms).elements[intIndObjects].onblur = new Function ("validaChave(this);");
							document.forms(intIndForms).elements[intIndObjects].onfocus = new Function ("ger_verifica_ja_preenchido(this);");
							
							break;
						case "IDENT":
							document.forms(intIndForms).elements[intIndObjects].onkeypress = new Function ("validaIdent();");
							document.forms(intIndForms).elements[intIndObjects].onfocus = new Function ("ger_verifica_ja_preenchido(this);");
						default:
							break;
					}
				}

			}
		}
	}

	return true;
}



/*
função: ger_ehnumerico
objetivo: verificar se o valor do objeto informado é um número
parâmetros: objOrigem - objeto que está sendo editado e irá perder o foco
retorno: sempre true
utilização: onblur do objeto
exemplo: onblur="JavaScript: ger_ehnumerico(this);";
autor: Jose Rui Viana
*/
function ger_ehnumerico(objOrigem) {

	var blnRetTmp = true;

	if (ger_trim(objOrigem.value)!="") {
		if (isNaN(objOrigem.value)) {
			objOrigem.select();
			objOrigem.focus();
			
			ExibirMensagemPopUp("O valor digitado não é numérico!")
//			alert("O valor digitado não é numérico!");

			blnRetTmp = false;
		}
	}
	
	return blnRetTmp;
}

/*
Função: valida_decimal
objetivo: Verifica se o valor do objeto é um número decimal
parâmetros: object - objeto que está sendo editado e irá perder o foco
retorno: true
utilização: onblur do objeto
exemplo: onblur="JavaScript: valida_decimal(this);";
autor: Jose Rui Viana
*/

function valida_decimal(object) {
	var replace = /,/gi;
	
	if (isNaN(object.value.replace(replace, "."))) {
		object.select();
		object.focus();
	        ExibirMensagemPopUp("Valor inválido !")
//		alert("Valor inválido!");
	}
	else if (object.value.search(replace) > object.casasint) {
		object.select();
		object.focus();
	        ExibirMensagemPopUp("Valor inválido !")
//		alert("Valor inválido!");
	}
	
	return true
}

/*
Função: validaPlic
objetivo: Verifica se o valor do objeto contém ' ou "
parâmetros: object - objeto que está sendo editado e irá perder o foco
retorno: true
utilização: onblur do objeto
exemplo: onblur="JavaScript: validaPlic(this);";
autor: Jose Rui Viana
*/
function validaPlic(object) {
	var reg1 = /'/gi;
	var reg2 = /"/gi;
	
	if ((reg1.test(object.value)) || (reg2.test(object.value))) {

	        ExibirMensagemPopUp("Existem caracteres inválidos no campo (" + object.nmcampo + ")!")
//		alert("Existem caracteres inválidos no campo " + object.nmcampo + "!");
		object.select();
		object.focus();
	}
	
	return true
}


/*
função: ger_retira_espacos_brancos
objetivo: retirar todos os espaços em branco de uma string
parâmetros: strOrigem - string de origem
retorno: retorna a strOrigem sem nenhum espaço em branco
utilização: onblur do objeto, testes em gerais de login e senha, etc...
exemplo: onclick="JavaScript: ger_retira_espacos_brancos(txtSenha.value);";
autor: Jose Rui Viana

function ger_retira_espacos_brancos(strOrigem) {
	var strTemp = strOrigem;
	var strSaida = "";
	var intInd;
	
	for (intInd=0; intInd<strTemp.length; intInd++) {
		if (strTemp.substr(intInd, 1) != " ")
			strSaida += strTemp.substr(intInd, 1);
	}
	
	return strSaida;
}
*/


/*
função: ger_rtrim
objetivo: retirar todos os espaços em branco a direita de uma string
parâmetros: strOrigem - string de origem
retorno: retorna a strOrigem sem nenhum espaço em branco a sua direita
utilização: onblur do objeto, testes em gerais, etc...
exemplo: onclick="JavaScript: ger_rtrim("  testando");";
autor: Jose Rui Viana
*/
function ger_rtrim(strOrigem) {
	var intInd;
	try{
		for (intInd=0; intInd < strOrigem.length; intInd++)
			if (strOrigem.substr(intInd, 1) != " ")
				break;
	
		return strOrigem.substr(intInd, (strOrigem.length-intInd));
	}
	catch(e){
		return ""
	}	
		
}



/*
função: ger_ltrim
objetivo: retirar todos os espaços em branco a esquerda de uma string
parâmetros: strOrigem - string de origem
retorno: retorna a strOrigem sem nenhum espaço em branco a sua esquerda
utilização: onblur do objeto, testes em gerais, etc...
exemplo: onclick="JavaScript: ger_ltrim("testando  ");";
autor: Jose Rui Viana
*/
function ger_ltrim(strOrigem) {
	var intInd;
	try{
		for (intInd=(strOrigem.length-1); intInd>0; intInd--)
			if (strOrigem.substr(intInd, 1) != " ")
				break;
		return strOrigem.substring(0, (intInd + 1));		
	}
	catch(e){
		return ""
	}			
	
	
}



/*
função: ger_trim
objetivo: retirar todos os espaços em branco a esquerda e direita de uma string
parâmetros: strOrigem - string de origem
retorno: retorna a strOrigem sem nenhum espaço em branco a sua esquerda e direita
utilização: onblur do objeto, testes em gerais, etc...
exemplo: onclick="JavaScript: ger_trim("   testando  ");";
autor: Jose Rui Viana
*/
function ger_trim(strOrigem) {
	return ger_ltrim(ger_rtrim(strOrigem));
}



/*
função: ger_valida_campos_formularios
objetivo: valida e solicita o preenchimento de todos os campos obrigatórios dos diversos
          formulários de um documento
parâmetros:
retorno: mensagem com o nome do objeto a ser preenchido e foco no mesmo
utilização: onsubmit do form, nota deve se colocar o comando return para anular o comando
			submit caso tenha que preencher um ou mais campos
exemplo: ... onsubmit="JavaScript: return ger_valida_campos_formularios();";
autor: Jose Rui Viana, Jose Rui Viana
*/
function ger_valida_campos_formularios() {

	var intIndForms;
	var intIndObjects;
	var blnRetorno;
	
	var colOptions;
	var intIndOptions;
	var blnOptionCheck;
	var strNmCampoAnterior = "";
	
	blnRetorno = true;

	for (intIndForms=0; intIndForms<document.forms.length; intIndForms++) {
		for (intIndObjects=0; intIndObjects<document.forms(intIndForms).elements.length; intIndObjects++) {

			// Não validar campos disabled ou invisíveis
			if ((!document.forms(intIndForms).elements[intIndObjects].disabled) && (document.forms(intIndForms).elements[intIndObjects].type.toString().toUpperCase()!='HIDDEN')) {
				// Verifica se já verificou o tipo de campo
				if (strNmCampoAnterior != ger_trim(document.forms(intIndForms).elements[intIndObjects].name)) {
					// Pega o nome do elemento anterior			
					strNmCampoAnterior = ger_trim(document.forms(intIndForms).elements[intIndObjects].name);
				
						//Se for uma TEXTAREA, deixa somente o conteúdo igual ao seu maxlength
						if ((document.forms(intIndForms).elements[intIndObjects].type.toString().toUpperCase() == 'TEXTAREA') && (!isNaN(document.forms(intIndForms).elements[intIndObjects].maxLength))) {
							document.forms(intIndForms).elements[intIndObjects].value = document.forms(intIndForms).elements[intIndObjects].value.toString().substr(0, document.forms(intIndForms).elements[intIndObjects].maxLength);
						}
	
					// Se for um campo tipo radio
					if ((document.forms(intIndForms).elements[intIndObjects].type.toString().toUpperCase() == 'RADIO') && (document.forms(intIndForms).elements[intIndObjects].nulo == "N")) {
						// Indica que o option não foi selecionado
						blnOptionCheck = false;
						//alert(document.forms(intIndForms).elements[intIndObjects].nulo);
						
						colOptions = document.forms(intIndForms).elements[document.forms(intIndForms).elements[intIndObjects].name];

						if (!isNaN(colOptions.length)) {
							for(intIndOptions = 0; intIndOptions < colOptions.length; ++intIndOptions) {
								if(colOptions[intIndOptions].checked) {
									blnOptionCheck = true;
									break;
								}
							}
						}
						else {
							if(colOptions.checked) {
								blnOptionCheck = true;
								break;
							}
						}
					
						// Caso não aceite nulo
						if (blnOptionCheck == false) {
							blnRetorno = false;

						        ExibirMensagemPopUp("É obrigatório a seleção de pelo menos um item do grupo que começa com (" + document.forms(intIndForms).elements[intIndObjects].nmcampo + ")!")

//							alert("É obrigatório a seleção de pelo menos um item do grupo que começa com (" + document.forms(intIndForms).elements[intIndObjects].nmcampo + ")!");
						}
					}
					// Caso seja outro tipo de campo
					else {
						// Caso não aceite nulo
						if ((document.forms(intIndForms).elements[intIndObjects].nulo=="N") && (ger_trim(document.forms(intIndForms).elements[intIndObjects].value)=="")) {
								blnRetorno = false;
							
								ExibirMensagemPopUp("O campo \ (" + document.forms(intIndForms).elements[intIndObjects].nmcampo + ") deve ser preenchido!");
								//alert("O campo (" + document.forms(intIndForms).elements[intIndObjects].nmcampo + ") deve ser preenchido!");

						} 
						//valida campos do tipo data
// //						else if ((document.forms(intIndForms).elements[intIndObjects].tipo=="D") && (document.forms(intIndForms).elements[intIndObjects].nulo=="N")) {
						else if (document.forms(intIndForms).elements[intIndObjects].tipo=="D") {
							if (ger_trim(document.forms(intIndForms).elements[intIndObjects].value) != "") {

								// Retira o evento onblur para não provocar erro
								document.forms(intIndForms).elements[intIndObjects].onblur = new Function ("");
							
								if (!isDate(document.forms(intIndForms).elements[intIndObjects].value)) {
									blnRetorno = false;
// //									ExibirMensagemPopUp("O campo (" + document.forms(intIndForms).elements[intIndObjects].nmcampo + ") deve ser preenchido!");
								}

								// Coloca o evento onblur novamente
								document.forms(intIndForms).elements[intIndObjects].onblur = new Function ("ger_valida_campo_data(this);");
							}
						} 
						// coloca os zeros a esquerda para campos do tipo conta corrente
						else if ((document.forms(intIndForms).elements[intIndObjects].tipo=="CCORR")) {
							if(ger_trim(document.forms(intIndForms).elements[intIndObjects].value) != "") {
								complementa_string_caracter(document.forms(intIndForms).elements[intIndObjects], '0', 'E');							
							}
						}
						
						// Verifica se tem limites de range para validação
						if (blnRetorno) {
							// // Verificar aquiiiiiii - trocar validação abaixo para valição de handle de 
							// // erro com try..catch...
							if (document.forms(intIndForms).elements[intIndObjects].value != "-999") {
									if (!ger_valida_range_valor(document.forms(intIndForms).elements[intIndObjects], false)) {
										blnRetorno = false;
										document.forms(intIndForms).elements[intIndObjects].blur();
									}
							}
						}
						
					}
					
					if (blnRetorno == false) {
						document.forms(intIndForms).elements[intIndObjects].focus();
						break;
					}
				}
			}
		}
	}

	return blnRetorno;
}
/*
função: ger_valida_campos_um_formularios
objetivo: valida e solicita o preenchimento de todos os campos obrigatórios de um formulario
          de um documento, individualmente.
parâmetros:identificação do form
retorno: mensagem com o nome do objeto a ser preenchido e foco no mesmo
utilização: onsubmit do form, nota deve se colocar o comando return para anular o comando
			submit caso tenha que preencher um ou mais campos
exemplo: ... onsubmit="JavaScript: return ger_valida_campos_formularios();";
autor: Jose Rui Viana, Jose Rui Viana
*/
function ger_valida_campos_um_formularios(intIndForms) {

return false;
	var intIndObjects;
	var blnRetorno;
	
	var colOptions;
	var intIndOptions;
	var blnOptionCheck;
	var strNmCampoAnterior = "";
	
	blnRetorno = true;

	
		for (intIndObjects=0; intIndObjects<document.forms(intIndForms).elements.length; intIndObjects++) {

			// Não validar campos disabled ou invisíveis
			if ((!document.forms(intIndForms).elements[intIndObjects].disabled) && (document.forms(intIndForms).elements[intIndObjects].type.toString().toUpperCase()!='HIDDEN')) {
				// Verifica se já verificou o tipo de campo
				if (strNmCampoAnterior != ger_trim(document.forms(intIndForms).elements[intIndObjects].name)) {
					// Pega o nome do elemento anterior			
					strNmCampoAnterior = ger_trim(document.forms(intIndForms).elements[intIndObjects].name);
				
						//Se for uma TEXTAREA, deixa somente o conteúdo igual ao seu maxlength
						if ((document.forms(intIndForms).elements[intIndObjects].type.toString().toUpperCase() == 'TEXTAREA') && (!isNaN(document.forms(intIndForms).elements[intIndObjects].maxLength))) {
							document.forms(intIndForms).elements[intIndObjects].value = document.forms(intIndForms).elements[intIndObjects].value.toString().substr(0, document.forms(intIndForms).elements[intIndObjects].maxLength);
						}
	
					// Se for um campo tipo radio
					if ((document.forms(intIndForms).elements[intIndObjects].type.toString().toUpperCase() == 'RADIO') && (document.forms(intIndForms).elements[intIndObjects].nulo == "N")) {
						// Indica que o option não foi selecionado
						blnOptionCheck = false;
						//alert(document.forms(intIndForms).elements[intIndObjects].nulo);
						
						colOptions = document.forms(intIndForms).elements[document.forms(intIndForms).elements[intIndObjects].name];

						if (!isNaN(colOptions.length)) {
							for(intIndOptions = 0; intIndOptions < colOptions.length; ++intIndOptions) {
								if(colOptions[intIndOptions].checked) {
									blnOptionCheck = true;
									break;
								}
							}
						}
						else {
							if(colOptions.checked) {
								blnOptionCheck = true;
								break;
							}
						}
					
						// Caso não aceite nulo
						if (blnOptionCheck == false) {
							blnRetorno = false;

						        ExibirMensagemPopUp("É obrigatório a seleção de pelo menos um item do grupo que começa com (" + document.forms(intIndForms).elements[intIndObjects].nmcampo + ")!")

//							alert("É obrigatório a seleção de pelo menos um item do grupo que começa com (" + document.forms(intIndForms).elements[intIndObjects].nmcampo + ")!");
						}
					}
					// Caso seja outro tipo de campo
					else {
						// Caso não aceite nulo
						if ((document.forms(intIndForms).elements[intIndObjects].nulo=="N") && (ger_trim(document.forms(intIndForms).elements[intIndObjects].value)=="")) {
								blnRetorno = false;
							
								ExibirMensagemPopUp("O campo \ (" + document.forms(intIndForms).elements[intIndObjects].nmcampo + ") deve ser preenchido!");
								//alert("O campo (" + document.forms(intIndForms).elements[intIndObjects].nmcampo + ") deve ser preenchido!");

						} 
						//valida campos do tipo data
// //						else if ((document.forms(intIndForms).elements[intIndObjects].tipo=="D") && (document.forms(intIndForms).elements[intIndObjects].nulo=="N")) {
						else if (document.forms(intIndForms).elements[intIndObjects].tipo=="D") {
							if (ger_trim(document.forms(intIndForms).elements[intIndObjects].value) != "") {

								// Retira o evento onblur para não provocar erro
								document.forms(intIndForms).elements[intIndObjects].onblur = new Function ("");
							
								if (!isDate(document.forms(intIndForms).elements[intIndObjects].value)) {
									blnRetorno = false;
// //									ExibirMensagemPopUp("O campo (" + document.forms(intIndForms).elements[intIndObjects].nmcampo + ") deve ser preenchido!");
								}
								/*
								if(blnRetorno && document.forms(intIndForms).elements[intIndObjects].validadatacorrente=="S"){
									//se data for mairo que data corrente
									
									
									if(Compara_DataCorrente(document.forms(intIndForms).elements[intIndObjects].value)==1){
										blnRetorno = false;
										alert("o campo (" + document.forms(intIndForms).elements[intIndObjects].nmcampo + ") não pode ser maior que a data atual!");
									}
														
								}
								*/
								// Coloca o evento onblur novamente
								document.forms(intIndForms).elements[intIndObjects].onblur = new Function ("ger_valida_campo_data(this);");
							}
						} 
						// coloca os zeros a esquerda para campos do tipo conta corrente
						else if ((document.forms(intIndForms).elements[intIndObjects].tipo=="CCORR")) {
							if(ger_trim(document.forms(intIndForms).elements[intIndObjects].value) != "") {
								complementa_string_caracter(document.forms(intIndForms).elements[intIndObjects], '0', 'E');							
							}
						}
						
						// Verifica se tem limites de range para validação
						if (blnRetorno) {
							// // Verificar aquiiiiiii - trocar validação abaixo para valição de handle de 
							// // erro com try..catch...
							if (document.forms(intIndForms).elements[intIndObjects].value != "-999") {
									if (!ger_valida_range_valor(document.forms(intIndForms).elements[intIndObjects], false)) {
										blnRetorno = false;
										document.forms(intIndForms).elements[intIndObjects].blur();
									}
							}
						}
						
					}
					
					if (blnRetorno == false) {
						document.forms(intIndForms).elements[intIndObjects].focus();
						break;
					}
				}
			}
		}
	

	return blnRetorno;
}


/*
função: replicar_caracter
objetivo: replicar um número determinado de vezes um caracter ou string
parâmetros: pstrCaracter - caracter a ser replicado
						pintNuVezes - número de replicas
retorno: string replicada
utilização: replicação de strings
exemplo: ... alert(replicar_caracter("0", 3)); // 000
autor: Jose Rui Viana
*/
function replicar_caracter(pstrCaracter, pintNuVezes) {
	var intCont;
	var strTemp = "";
	
	for (intCont = 0; intCont < pintNuVezes; intCont++) {
		strTemp += pstrCaracter;
	}
	
	return strTemp;
	
}



/*
função: complementa_string_caracter
objetivo: complementar uma determinada string com um determinado caracter
parâmetros: robjOrigem - objeto de origem e de retorno
						pstrCompletar - string a completar
						pstrLado - lado que string será colocado "D"ireita ou "E"squerda
retorno: objeto com tag value preenchida com o caracter determinado
utilização: evento onblur do objeto
exemplo: onblur="JavaScript: complementa_string_caracter(this, '0', 'E');"
autor: Jose Rui Viana
*/
function complementa_string_caracter(robjOrigem, pstrCompletar, pstrLado) {
	var strTemp = "";

	if(ger_trim(robjOrigem.value) != "") {
		if (robjOrigem.value.toString().length < robjOrigem.maxLength) {
			strTemp = replicar_caracter(pstrCompletar, (robjOrigem.maxLength - robjOrigem.value.toString().length))
		}

		// Complementa à esquerda
		if (pstrLado == "E") {
			robjOrigem.value = strTemp + robjOrigem.value;
		}

		// Complementa à direita
		else if (pstrLado == "D") {
			robjOrigem.value = robjOrigem.value + strTemp;
		}
	}
//alert(strTemp);	
}

	// Complementa à esquerda
//	if (pstrLado == "E") {
//		robjOrigem.value = strTemp + robjOrigem.value;

	// Complementa à direita
//	else if (pstrLado == "D") {
//		robjOrigem.value = robjOrigem.value + strTemp;
//	}



/*
função: não é uma função, mas sim uma classe que agrega duas propriedades
objetivo: facilitar na criação de um vetor com os dois dados da classe
parâmetros: pintIdAgrup - identificador do agrupamento
			pstrUmPreenchido - verificador se está preenchido "S"im ou "N"ão
retorno: 
utilização: criação de vetores, os quais cada item são deste tipo
exemplo: ... vetAgrup[0] = new clsTipoAgrupamento(1, "S"); vetAgrup[0].UmPreenchido = "N";
autor: Jose Rui Viana
*/
function clsTipoAgrupamento(pintIdAgrup, pstrUmPreenchido) {
	this.IdAgrup = pintIdAgrup;
	this.UmPreenchido = pstrUmPreenchido;
}



/*
função: ger_valida_campos_form_agrupados
objetivo: valida se um dos agrupamentos de campos estão preenchidos pedindo que se preenche 
		  o conteúdo dos demais campos do agrupamento.
		  Sua validação não verifica a questão de um campo ser obrigatório ou não, mas
		  sim se um dos campos do agrupamento for preenchido todos os outros devem ser 
		  preenchidos também.
parâmetros:
retorno: mensagem com o nome do objeto a ser preenchido e foco no mesmo
utilização: onsubmit do form, nota deve se colocar o comando return para anular o comando
			submit caso tenha que preencher um ou mais campos
exemplo: ... onsubmit="JavaScript: return ger_valida_campos_form_agrupados();";
autor: Jose Rui Viana
*/
function ger_valida_campos_form_agrupados() {

	var intIndForms;
	var intIndObjects;
	var blnRetorno;
	var intIdAgrupCorr;
	var intIdAgrupAnt;

	var vetAgrup = new Array();
	var intIndVetor = -1;
	
	blnRetorno = true;

	for (intIndForms=0; intIndForms<document.forms.length; intIndForms++) {
		for (intIndObjects=0; intIndObjects<document.forms(intIndForms).elements.length; intIndObjects++) {
			if ((!isNaN(document.forms(intIndForms).elements[intIndObjects].agrupamento)) && (document.forms(intIndForms).elements[intIndObjects].nuncalimpar != "S")) {
				intIdAgrupCorr = document.forms(intIndForms).elements[intIndObjects].agrupamento;
				if (intIdAgrupCorr != intIdAgrupAnt) {
					intIndVetor++;
					intIdAgrupAnt = intIdAgrupCorr;
					if (ger_trim(document.forms(intIndForms).elements[intIndObjects].value)!="") 
						vetAgrup[intIndVetor] = new clsTipoAgrupamento(intIdAgrupCorr, "S");
					else
						vetAgrup[intIndVetor] = new clsTipoAgrupamento(intIdAgrupCorr, "N");
				}
				else {
					if (ger_trim(document.forms(intIndForms).elements[intIndObjects].value)!="") {
						vetAgrup[intIndVetor].UmPreenchido = "S";
					}

					// Coloca os zeros a esquerda para campos do tipo conta corrente
					if ((document.forms(intIndForms).elements[intIndObjects].tipo=="CCORR")) {
						if(ger_trim(document.forms(intIndForms).elements[intIndObjects].value) != "") {
							complementa_string_caracter(document.forms(intIndForms).elements[intIndObjects], '0', 'E');							
						}
					}





				}

			}
		}
	}

	for (intIndVetor=0; intIndVetor<vetAgrup.length; intIndVetor++) {
		if (vetAgrup[intIndVetor].UmPreenchido.toString()=="S") {
			for (intIndForms=0; intIndForms<document.forms.length; intIndForms++) {
				for (intIndObjects=0; intIndObjects<document.forms(intIndForms).elements.length; intIndObjects++) {
					if (!isNaN(document.forms(intIndForms).elements[intIndObjects].agrupamento)) {
						if (document.forms(intIndForms).elements[intIndObjects].agrupamento.toString() == vetAgrup[intIndVetor].IdAgrup.toString()) {
							if (ger_trim(document.forms(intIndForms).elements[intIndObjects].value)=="")  {
								blnRetorno = false;
								break;
							}
						}
					}
				}
				if (blnRetorno==false) break;
			}
		}
		if (blnRetorno==false) break;
	}
	
	if (blnRetorno==false) {
		
		//alert("O campo \(" + document.forms(intIndForms).elements[intIndObjects].nmcampo + ") deve ser preenchido!");
		ExibirMensagemPopUp("O campo \(" + document.forms(intIndForms).elements[intIndObjects].nmcampo + ") deve ser preenchido!");
		document.forms(intIndForms).elements[intIndObjects].focus();
	}

	return blnRetorno;
}



/*
função: ger_limpa_campos_outros_agrupamentos
objetivo: limpa o valor dos campos que não sejam do mesmo agrupamento
					do campo do agrupamento que está sendo editado.
parâmetros: pobjOrigem - objeto que está sendo editado
retorno: limpeza automática do valor dos campos de outros agrupamentos
utilização: onchange do objeto que está sendo editado
exemplo: ... onchange="JavaScript: ger_limpa_campos_outros_agrupamentos(this);";
autor: Jose Rui Viana
*/
function ger_limpa_campos_outros_agrupamentos(pobjOrigem) {

	var intIndForms;
	var intIndObjects;
	var blnRetorno;
	
	blnRetorno = true;
	
	if (!isNaN(pobjOrigem.agrupamento)) {
		for (intIndForms=0; intIndForms<document.forms.length; intIndForms++) {
			for (intIndObjects=0; intIndObjects<document.forms(intIndForms).elements.length; intIndObjects++) {
				if (!isNaN(document.forms(intIndForms).elements[intIndObjects].agrupamento)) {
					if (document.forms(intIndForms).elements[intIndObjects].agrupamento != pobjOrigem.agrupamento) {
					    if(document.forms(intIndForms).elements[intIndObjects].nuncalimpar!="S")
							document.forms(intIndForms).elements[intIndObjects].value = "";
					}
				}
			}
		}
	}

	return blnRetorno;
}



/*
função: ger_validar_cpf
objetivo: executa verificação do preenchimento correto do cpf que foi digitado em um campo
		  formatado
parâmetros: objOrigem - objeto que está sendo editado
retorno: sempre true; caso o campo tenha um conteúdo inválido o mesmo recebe o foco e é 
		 exibida uma mensagem de advertência 
utilização: evento onblur do objeto
exemplo: onblur="JavaScript: ger_validar_cpf(this);"
autor: Jose Rui Viana
*/
function ger_validar_cpf(objOrigem) {
	var strCpf;
	var strDigVerif;
	
	if (ger_trim(objOrigem.value)!="") {
		// Retira formatação
		strCpf = objOrigem.value.substring(0, 3) + objOrigem.value.substring(4, 7) + objOrigem.value.substring(8, 11);
		strDigVerif = objOrigem.value.substring(12, 14);
	
		if (ger_trim(objOrigem.value).length != 14) {
			ExibirMensagemPopUp("Número de dígitos do CPF Inválido !");
	//	alert("Número de dígitos do Cpf inválido!");
			objOrigem.select();
			objOrigem.focus();
		}
		else if (!ger_verifica_cpf(strCpf, strDigVerif)) {
			ExibirMensagemPopUp("CPF Inválido !");
	//		alert("Cpf inválido!");
			objOrigem.select();
			objOrigem.focus();
		} 
	}
	
	return true;
}

/*
função: ger_validar_cpf_gestao
objetivo: executa verificação do preenchimento correto do cpf que foi digitado em um campo
		  formatado
parâmetros: objOrigem - objeto que está sendo editado
retorno: sempre true; caso o campo tenha um conteúdo inválido o mesmo recebe o foco e é 
		 exibida uma mensagem de advertência 
utilização: evento onblur do objeto
exemplo: onblur="JavaScript: ger_validar_cpf(this);"
autor: Jose Rui Viana
*/
function ger_validar_cpf(objOrigem) {
	var strCpf;
	var strDigVerif;
	
	if (ger_trim(objOrigem.value)!="") {
		// Retira formatação
		strCpf = objOrigem.value.substring(0, 3) + objOrigem.value.substring(4, 7) + objOrigem.value.substring(8, 11);
		strDigVerif = objOrigem.value.substring(12, 14);
	
		if (ger_trim(objOrigem.value).length != 14) {
			ExibirMensagemPopUp("Número de dígitos do CPF Inválido !");
	//	alert("Número de dígitos do Cpf inválido!");
			objOrigem.value = "";
			objOrigem.select();
			objOrigem.focus();
		}
		else if (!ger_verifica_cpf(strCpf, strDigVerif)) {
			ExibirMensagemPopUp("CPF Inválido !");
	//		alert("Cpf inválido!");
			objOrigem.value = "";
			objOrigem.select();
			objOrigem.focus();
			
		} 
	}
	
	return true;
}


/*
função: ger_verifica_cpf
objetivo: verifica do preenchimento correto do cpf passado sem formatação
parâmetros: rCpf1 - os nove primeiros dígitos do cpf
			rCpf2DigVerif - dois últimos dígitos do cpf
retorno: true se ok e false caso esteja errado
utilização: verificações dentro de outros funções javascripts
exemplo: ... if (!ger_verifica_cpf(strCpf, strDigVerif)) { ...
autor: BL Inf., alterado por Jose Rui Viana
*/
function ger_verifica_cpf(rCpf1, rCpf2DigVerif){
	d1= 0;
	for (i=0;i<9;i++)
		d1 += rCpf1.charAt(i)*(10-i);
	d1 = 11 - (d1%11);
	if (d1>9) d1=0;
	if (rCpf2DigVerif.charAt(0) != d1)
		return false;
	d1 *= 2;
	for (i=0;i<9;i++)
		d1 += rCpf1.charAt(i)*(11-i);
	d1 = 11 - (d1%11);
	if (d1>9) d1 = 0;
	if (rCpf2DigVerif.charAt(1) != d1)
		return false;
	
	return true;
}



/*
função: ger_validar_cnpj
objetivo: executa verificação do preenchimento correto do cnpj que foi digitado em um campo
		  formatado
parâmetros: objOrigem - objeto que está sendo editado
retorno: sempre true; caso o campo tenha um conteúdo inválido o mesmo recebe o foco e é 
		 exibida uma mensagem de advertência
utilização: evento onblur do objeto
exemplo: onblur="JavaScript: ger_validar_cnpj(this);"
autor: Jose Rui Viana
*/
function ger_validar_cnpj(objOrigem) {
	var strCnpj;

	if (ger_trim(objOrigem.value)!="") {
		// Retira formatação
		strCnpj = objOrigem.value.substring(0, 2) + objOrigem.value.substring(3, 6) + objOrigem.value.substring(7, 10) + objOrigem.value.substring(11, 15) + objOrigem.value.substring(16, 18);
	
		if (ger_trim(objOrigem.value).length != 18) {

			ExibirMensagemPopUp("Número de dígitos no CNPJ Inválido !");
		//	alert("Número de dígitos do Cnpj inválido!");
			objOrigem.select();
			objOrigem.focus();
		}
		else if (!ger_verifica_cgc(strCnpj)) {

			ExibirMensagemPopUp("CNPJ Inválido !");
	//		alert("Cnpj inválido!");
			objOrigem.select();
			objOrigem.focus();
		}
	}
}

/*
função: ger_validar_cnpj_gestao
objetivo: executa verificação do preenchimento correto do cnpj que foi digitado em um campo
		  formatado
parâmetros: objOrigem - objeto que está sendo editado
retorno: sempre true; caso o campo tenha um conteúdo inválido o mesmo recebe o foco e é 
		 exibida uma mensagem de advertência
utilização: evento onblur do objeto
exemplo: onblur="JavaScript: ger_validar_cnpj(this);"
autor: Jose Rui Viana
*/
function ger_validar_cnpj(objOrigem) {
	var strCnpj;

	if (ger_trim(objOrigem.value)!="") {
		// Retira formatação
		strCnpj = objOrigem.value.substring(0, 2) + objOrigem.value.substring(3, 6) + objOrigem.value.substring(7, 10) + objOrigem.value.substring(11, 15) + objOrigem.value.substring(16, 18);
	
		if (ger_trim(objOrigem.value).length != 18) {

			ExibirMensagemPopUp("Número de dígitos no CNPJ Inválido !");
		//	alert("Número de dígitos do Cnpj inválido!");
			objOrigem.value = ""
			objOrigem.select();
			objOrigem.focus();
		}
		else if (!ger_verifica_cgc(strCnpj)) {

			ExibirMensagemPopUp("CNPJ Inválido !");
	//		alert("Cnpj inválido!");
			objOrigem.value = ""
			objOrigem.select();
			objOrigem.focus();
		}
	}
}


/*
função: ger_verifica_cgc
objetivo: verifica do preenchimento correto do cnpj passado sem formatação
parâmetros: valor - todos os dígitos do cnpj
retorno: true se ok e false caso esteja errado
utilização: verificações dentro de outros funções javascripts
exemplo: ... if (!ger_verifica_cgc(strCnpj)) { ...
autor: Brasil Cap TI, adptado por Jose Rui Viana
*/
function ger_verifica_cgc(valor)
{
	if ((isNaN(valor)) && (valor.length != 14))
		return false
		
	Mult1 = "543298765432"
	Mult2 = "6543298765432"
	dig1=0
	dig2=0
		
	for(var i=0;i<=11;i++)   
	{
		ind=valor.charAt(i)
		M=Mult1.charAt(i)
		dig1 += ((parseFloat(ind)) *  (parseFloat(M)))
	}
	
	for( var i=0;i<=12;i++)   
	{
		ind=valor.charAt(i)
		M=Mult2.charAt(i)
		dig2 += ((parseFloat(ind)) *  (parseFloat(M)))
	}
		
	dig1 = (dig1 * 10) % 11
	dig2 = (dig2 * 10) % 11
	
	if (dig1 == 10)
		dig1 = 0
		
	if (dig2 == 10) 
		dig2 = 0

	if (dig1 != (parseFloat(valor.charAt(12))))
		return false
	
	if (dig2 != (parseFloat(valor.charAt(13))))
		return false
		
	return true
}



/*
função: ger_pega_arquivo_str
objetivo: pega o nome do arquivo dentro de uma string de origem
parâmetros: pstrOrigem - string de origem
			pstrBusca - string de busca
retorno: string com somente o nome do arquivo
utilização: buscar nomes de arquivos dentro de urls e paths com nome do arquivo
exemplo: ... JavaScript: alert(ger_pega_arquivo_str("c:\paginas\arq.asp?pint=1", "\")) ...
autor: Jose Rui Viana
*/
function ger_pega_arquivo_str(pstrOrigem, pstrBusca) {
	var intIndStr;
	var intPriPos=-1;
	var intUltPos=-1;
	var strRetorno;
	
	for (intIndStr=0; intIndStr < pstrOrigem.length; intIndStr++) {
		if (pstrOrigem.substr(intIndStr, 1) == pstrBusca) {
			intPriPos = intIndStr;
		}
	}

	for (intIndStr=0; intIndStr < pstrOrigem.length; intIndStr++) {
		if (pstrOrigem.substr(intIndStr, 1) == "?") {
			intUltPos = intIndStr;
			break;
		}
	}
	
	if ((intPriPos != -1) && (intUltPos != -1)) {
		strRetorno = pstrOrigem.substring((intPriPos + 1), intUltPos);
	}
	else if ((intPriPos != -1) && (intUltPos == -1)) {
		strRetorno = pstrOrigem.substr((intPriPos + 1), (pstrOrigem.length - intPriPos));
	}
	else if ((intPriPos == -1) && (intUltPos != -1)) {
		strRetorno = pstrOrigem.substring(0, intUltPos);
	}
	else {
		strRetorno = pstrOrigem;
	}
	
	return strRetorno;
	
}



/*
função: ger_valida_campos_form_agrup_obrigatorio
objetivo: executa a validação dos campos do formulário por agrupamento
				  exigindo ainda que pelo menos um campo seja preenchido
parâmetros:
retorno: true se campos estiverem OK ou false caso contrário
utilização: no evento submit do formulário (obs.: os campos que devem realmente ser 
						preenchidos devem estar com a tag nulo="N")
exemplo: ... onsubmit="JavaScript: return ger_valida_campos_form_agrup_obrigatorio();" ...
autor: Jose Rui Viana
*/
function ger_valida_campos_form_agrup_obrigatorio() {

	var blnHouveErro;
	var intIndForms;
	var intIndObjects;
    var cont;
	blnHouveErro = ger_valida_campos_form_agrupados();
	//alert(blnHouveErro);
	// Se passou pela validação de agrupamento 
	// Executa validação de que pelo menos um dos filtros seja preenchido
	if (blnHouveErro == true) {
	
		for (intIndForms=0; intIndForms<document.forms.length; intIndForms++) {
			blnHouveErro = false;

			// Verifica se tem pelo menos um campo preenchido
			for (intIndObjects=0; intIndObjects<document.forms(intIndForms).elements.length; intIndObjects++) {
				// Caso não seja "SUBMIT", "BUTTON" ou "RESET"
				if ((ger_trim(document.forms(intIndForms).elements[intIndObjects].type.toString().toUpperCase())!="SUBMIT") && (ger_trim(document.forms(intIndForms).elements[intIndObjects].type.toString().toUpperCase())!="BUTTON") && (ger_trim(document.forms(intIndForms).elements[intIndObjects].type.toString().toUpperCase())!="RESET")) {
					// Caso não aceite nulo
					if (ger_trim(document.forms(intIndForms).elements[intIndObjects].nulo.toString().toUpperCase())=="N") {
						// Se for diferente de vazio
						if (ger_trim(document.forms(intIndForms).elements[intIndObjects].value)!=""  &&  document.forms(intIndForms).elements[intIndObjects].nuncalimpar!="S" ) {
							//alert(document.forms(intIndForms).elements[intIndObjects].name);
							blnHouveErro = true;
							break;
						}
					}
				}
			}
		}
		//alert(blnHouveErro);
		if (blnHouveErro == false) {

			ExibirMensagemPopUp("Pelo menos um dos filtros acima deve ser preenchido!");

//			alert("Pelo menos um dos filtros acima deve ser preenchido!");
		}
	}

	return blnHouveErro;
}


	
/*
função: ger_MouseOver
objetivo: altera o cursor e a cor de fundo do objeto passado como parâmetro
parâmetros: objOrigem - objeto de origem
			strCor - string com a cor em hexa
retorno: 
utilização: alterar a cor de um objeto para dar a impressão do mesmo estar selecionado
			utilizado no onmouseover
exemplo: ... <td onmouseover="JavaScript: ger_MouseOver(this, "FFFFFF")" ...
autor: Jose Rui Viana
*/
function ger_MouseOver(objOrigem, strCor) {
	if (!objOrigem.contains(event.fromElement)) {
		objOrigem.style.cursor = 'hand';
		objOrigem.bgColor = strCor;
	}
}



/*
função: ger_MouseOut
objetivo: altera o cursor e a cor de fundo do objeto passado como parâmetro
parâmetros: objOrigem - objeto de origem
			strCor - string com a cor em hexa
retorno: 
utilização: alterar a cor de um objeto para dar a impressão do mesmo estar deselecionado
			utilizado no onmouseout
exemplo: ... <td onmouseout="JavaScript: ger_MouseOut(this, "000000")" ...
autor: Jose Rui Viana
*/
function ger_MouseOut(objOrigem, strCor) {
	if (!objOrigem.contains(event.toElement)) {
		objOrigem.style.cursor = 'default';
		objOrigem.bgColor = strCor;
	}
}



/*
função: ger_MouseClick
objetivo: executa o click de um objeto (ex.: link) que está dentro de uma TD
parâmetros: objOrigem - objeto de origem
retorno: 
utilização: executar o click de um link que está dentro da TD, utiliz. no onclick
exemplo: ... <td onclick="JavaScript: ger_MouseClick(this)" ...
autor: Jose Rui Viana
*/
function ger_MouseClick(objOrigem) {
	if (event.objOrigemElement.tagName=='TD'){
		objOrigem.children.tags('A')[0].click();
	}
}


/*
função: validaAlteracao()
objetivo: Verifica se ocorreu ou não alteração nos campos contidos no formulário
parâmetros: nenhum
retorno:  boolean
autor: Jose Rui Viana
*/
function validaAlteracao(frm){
var cont=0;
	for(i=0;i< frm.elements.length;i++){
		if(frm.elements[i].type=="hidden" &&  frm.elements[i].name.indexOf("VOR")!=-1){
				var nome=frm.elements[i].name;
				nome= nome.replace("VOR","TXT");
				var valAntigo=frm.elements[i].value;
				var frase= 'document.frmDetalhe.'+nome+".value"
				var valNovo= eval(frase);
				if(valNovo!= valAntigo)
					cont++
				
		}
	
	
	}

   
	if(cont==0)
		return false;
	else
		return true;


} 
function ValidaRelatorio(tipo)
{
    if(tipo==1)
	{
		if(ger_valida_campos_formularios())
		{
			erro=0;
			data1=form1.data1.value;
			data2=form1.data2.value ;	    
			if(erro==0)
			{ 
				   if(data1!="" && data2!="")
				   { 
				      if(compara_datas(data1,data2)==1)
					  { 
				         erro=1;
					     alert("Data inicial maior que data final");
				      } 
				   }	  
			}
			if(erro==0){
				return true;
			}
			else
			{
				return false;
			}
		}
		else
		{
		return false
		}
	}
	else if(tipo==2)
	{
	if(!ger_valida_campos_formularios())
		{
		return false
		}
	}
}