//============================================================================
// SCRIPTS DE USO GERAL
//============================================================================

var
	// ========================================================================
	// CONSTANTES																					
	// ========================================================================
	LANCE_SEPARADOR = '###',			// Separador de campos no histórico/navegações/botões
	LANCE_SEPARADOR2 = '^^^',			// Separador de campos no histórico/navegações/botões
	LANCE_FIM_PARAMETRO = '@@@',		// Separador de históricos/navegações/botões
	
	TRUE = SIM = sim = true,
	FALSE = NAO = nao = false,
	NULL = null,
		
	CARAC_DECIMAL_SERVIDOR	= '.',
	CARAC_DECIMAL_MSC			= ',',
	CARAC_MILHAR_MSC			= '.',

	ZEROS       =  '00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'+
						'00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
	BRANCOS     =  '                                                                                                                                '+
						'                                                                                                                                ',
	
	MENU_CSS = 'lance_frame_menu.css',
	
	// ========================================================================
	// VARIÁVEIS GLOBAIS
	// ========================================================================
	TEMPORIZADOR = 1000,		// Tempo para refazer uma função
	TEMPORIZADOR_TECLA=750,

	g_timeout = null,			// Temporizador
	g_timeoutFiltro = null,	
	g_conectando = false,	// Está conectando com o servidor? Quando TRUE, nada pode ser clicado
	g_teclado = '',			// Conjunto de caracteres teclados em um folheamento, para pesquisas incrementais
	g_tecladoOriginal = '', // idem, mas como a tela começa
	g_teveTeclado = false,
	g_chaveDeBusca = '',		// Campos da Chave de busca para digitação em folheamento
	g_nomeChaveDeBusca = '',// Nome da Chave de busca para digitação em folheamento
	g_temFlutuante = false,		// Menu flutuante já está aberto?
	g_maxFlutuante = 0,
	g_indFlutuante = 0,
	g_abrindoFlutuante = false,
	g_deveLocalizar = false,

	g_opcaoAtual = '',		// Seletor da mais recente opção de menu escolhida
	g_ligOpcaoAtual = 0,		// LigAtual da mais recente opção de menu escolhida
	g_proxOpcaoAtual = '',	// Seletor da próxima opção de menu escolhida
	g_proxLigOpcaoAtual = 0,// LigAtual da próxima opção de menu escolhida
	g_vetOpcaoAtual = null,	// Ponteiro para a opção de menu escolhida	

	g_usuarioAtual = '',		// Ligado com o cadastro de Usuários
	g_loginAtual = '',		// Login do Usuário Atual
	g_grupoAtual = 0,			// Grupo do Usuário Atual
	g_estePhp = '',			// Nome do Php que gerou a página atual
	g_esteArquivo = '',		// Nome do Arquivo atualmente em folheamento
	g_acaoAtual = '',			// Acao sendo executada
		EM_CONSULTA = 'Consultar',
		EM_INCLUSAO = 'Incluir',
		EM_ALTERACAO = 'Alterar',
		EM_FOLHEAMENTO = 'Folhear',
		
	g_tipoArquivo = '',		// Tipo do Arquivo
	g_perfilArquivo = "0",	// Perfil dos usuários do arquivo atual
	g_idRegAtual = 0,			// Identificador do registro atual
	g_idShiftEnter = '',		// Identificador dos registros atualmente com Shift_Enter
	g_idShiftDel = 0,			// Identificador do registro atualmente com Shift_Del
	g_filtroAtual = '',		// Filtro atual do arquivo
	g_ordemAtual = '',		// Ordenação atual do arquivo
	g_campoNavAtual = '',	// Campo por onde navegou para o arquivo atual
	g_campoNavValor = '',	// Valor do campo por onde navegou
	g_campoAtual = null,		// Campo atualmente sendo digitado
	
	g_campoTrazer = '',		// Se folheando arquivo por Navegação para Pai, Campo a Trazer é ...

	g_emFolheamento = false,	// Está folheando registros?
	g_primRegPag = 0,				// Número do primeiro registro na página atual de um folheamento
		
	g_temFormAberto = false,	// Tem algum formulário aberto?
	g_vetFormsSelecao = '',		// Vetor com os formulários complementares de um arquivo
	g_vetFormsIniciais = '',	// Iniciais que devem ser destacadas nos nomes destes forms
	g_vetFormsAcesso = '',		// O formulário é visível?
	g_formAtual = '',				// Formulário atualmente aberto
	
	g_vetBotoes = '',				// Vetor com os botões que deverão aparecer no frame "Botoes"

	g_querFocar1oCampo = true,	// Quer focar no 1o campo do formulário sempre que entrar na página?
	
	g_temMenuAberto = false,	// Tem algum menu aberto?
	g_frameDoMenu = null, 		// Qual é o frame atual onde o menu está aberto
	g_lastFrameDoMenu = null;	// Qual é o frame onde o último menu estava aberto

//============================================================================
// Frames
//============================================================================

var FRAME_SISTEMA_STR = 'parent.sistema.';
var FrameSistema		 = parent.sistema;
var FrameMenu			 = parent.menu;
var FrameBotoes		 = parent.botoes;
var FrameNavegacao	 = parent.navegacao;

//============================================================================
// Funçõs para validar o tipo de uma variável
//	http://www.crockford.com/javascript/remedial.html
//============================================================================

function isAlien(a)
{
	return( isObject(a) && typeof a.constructor != 'function' );
}

function isArray(a)
{
	return( isObject(a) && a.constructor == Array );
}

function isBoolean(a)
{
	return( typeof a == 'boolean' );
}

function isEmpty(o) 
{
	var i, v;
 	if( isObject(o) ) 
 	{
		for( i in o )
		{
			v = o[i];
			if( isUndefined(v) && isFunction(v) ) 
				return( false );
		}
	}
	return( true );
}

function isFunction(a)
{
	return( typeof a == 'function' );
}

function isNull(a)
{
	return( typeof a == 'object' && !a );
}

function isNumber(a)
{
	return( typeof a == 'number' && isFinite(a) );
}

function isObject(a)
{
	return( ( a && typeof a == 'object' ) || isFunction(a) );
}

function isString(a)
{
	return( typeof a == 'string' );
}

function isDefined(a)
{
	return( typeof a != 'undefined' );
} 

function isUndefined(a)
{
	return( typeof a == 'undefined' );
} 

//============================================================================
// Finds the (x,y) coordinates of an object on screen
//	http://www.quirksmode.org/js/findpos.html
//============================================================================
function findObjectPosition( p_obj ) 
{
	var l_curleft = l_curtop = 0;
	if( p_obj.offsetParent )
	{
		l_curleft = p_obj.offsetLeft
		l_curtop = p_obj.offsetTop
		while( p_obj = p_obj.offsetParent )
		{
			l_curleft += p_obj.offsetLeft
			l_curtop += p_obj.offsetTop
		}
	}
	return( [l_curleft, l_curtop] );
}

//============================================================================
// Nova função para caçar um valor em um array
// (http://4umi.com/web/javascript/array.htm)
// p_valor = valor a ser buscado na array
//	p_ini = (opcional) primeira posição onde começar a busca (default=0)
//	p_igual = (opcional) número e cadeia são iguais? (default=true)
//============================================================================
Array.prototype.indexOf = function( p_valor, p_ini, p_igual ) 
{
	var l_ini = +p_ini || 0;
	for( var i = l_ini, l = this.length; i < l; i++ ) 
	{
		if( ( this[i]==p_valor && !p_igual ) || this[i]===p_valor )
			return( i );
	}
	return( -1 );
}

// --------------------------------------------------
// Name: lastIndexOf Array Value
// Description: Returns the index number of the last instance of 'value'
// http://squidfingers.com/code/snippets/
// --------------------------------------------------
Array.prototype.lastIndexOf = function( p_valor, p_ini, p_igual )
{
	var i = +p_ini || this.length;
	while( --i )
	{
		if( ( this[i]==p_valor && !p_igual ) || this[i]===p_valor )
			return( i );
	}
	return( -1 );
}

//============================================================================
Array.prototype.contains = function( p_valor, p_ini, p_igual ) 
{
	if( isArray( p_valor ) )
	{
		for( var i=0; i<p_valor.length; i++ )
		{
			if( this.indexOf( p_valor[i], p_ini, p_igual ) != -1 )
				return( true );
		}
		return( false );
	}
	else
		return( this.indexOf( p_valor, p_ini, p_igual ) != -1 );
}

//============================================================================
// Clonar um objeto
//============================================================================
Object.prototype.clone = function() 
{
	var o = new Object(), p;
	for( p in this )
		o[p] = this[p];
	return( o );
}

//============================================================================
// Transforma " em \", e vice-versa
//============================================================================
function addslashes( p_str ) 
{
	p_str = p_str.replace(/\\/g,'\\\\');
	p_str = p_str.replace(/\'/g,'\\\'');
	p_str = p_str.replace(/\"/g,'\\"');
	p_str = p_str.replace(/\0/g,'\\0');
	return( p_str );
}

function stripslashes( p_str ) 
{
	p_str= p_str.replace(/\\0/g,'\0');
	p_str= p_str.replace(/\\"/g,'"');
	p_str= p_str.replace(/\\'/g,'\'');
	p_str= p_str.replace(/\\\\/g,'\\');
	return( p_str );
}

//============================================================================
// Compara duas variáveis
//============================================================================
function ehIgual( p_v1, p_v2 )
{
	return( p_v1.toString() == p_v2.toString() )
}
//============================================================================
//	Converte string para numérico
//============================================================================
function strTOnum( p_str )
{
	return( p_str == '' ? 0 : parseFloat( p_str ) );
}

//============================================================================
//	Troca a imagem de um item em MouseOver / MouseOut
//============================================================================
function troca( p_quem, p_de, p_por, p_tipoCursor )
{
	p_quem.style.cursor = p_tipoCursor;
	return( p_de.substring( 0, p_de.lastIndexOf( '_' )+1 ) + p_por );
}

//============================================================================
//	Troca a classe de um item em MouseOver / MouseOut
//============================================================================
function classOver( p_quem )
{
	var l_className = p_quem.className;
	l_className = l_className.substring( l_className.lastIndexOf( ' ' ), l_className.length );
	p_quem.className += '  ' + l_className + '_over';
	p_quem.style.cursor = 'hand';
}

//----------------------------------------------------------------------------
function classOut( p_quem )
{
	p_quem.className = p_quem.className.substring( 0, p_quem.className.indexOf( '  ' ) );
	p_quem.style.cursor = 'arrow';
}

//----------------------------------------------------------------------------
function imgOver( p_quem )
{
	p_quem.src = troca( p_quem, p_quem.src, 'over.gif', 'hand' );
}

//----------------------------------------------------------------------------
function imgOut( p_quem )
{
	p_quem.src = troca( p_quem, p_quem.src, 'out.gif', 'arrow' );
}

//============================================================================
//	Troca a cor e o fundo de um item
//============================================================================
function mudaCorCampo( p_quem, p_cor, p_fundo )
{
	p_quem.style.color = p_cor;
	p_quem.style.backgroundColor = p_fundo;
}

//============================================================================
// Lê a folha de estilos associada à página e pega um parágrafo
//============================================================================
function getStyle( p_queCss, p_queStyle )
{
	if( !document.styleSheets ) 
		return( '' );
	var l_achouEm = -1;
	for( var i=0,l=document.styleSheets.length; i<l; i++ )
	{
		var l_styleSheet = document.styleSheets[ i ];

		if( l_styleSheet.title == p_queCss )
		{
			l_achouEm = i;
			break;
		}
	}

	if( l_achouEm == -1 )
		return( '' );

	var l_cssRule;
	if( l_styleSheet.cssRules ) 
		l_cssRule = l_styleSheet.cssRules;
	else 
	if( l_styleSheet.rules ) 
		l_cssRule = l_styleSheet.rules;

	if( l_cssRule ) 
	{
		var i = 0;
		while( true )
		{
			if( l_cssRule[i].selectorText == '.' + p_queStyle )
				return( l_cssRule[i].style );
			i++; 
		}
	}
	
	return( '' );
}

//============================================================================
// Lê o estilo desejado de um elemento (ver http://dhtmlkitchen.com/learn/js/setstyle/index4.jsp)
//============================================================================
function getElementStyle( p_element, p_style )
{
	if( !document.getElementById )
		return;

	var l_valor = p_element.style[ p_style ];	// Tenta o estilo atribuido diretamente como atributo
	if( !l_valor )	// Se falhar...
	{
		if( document.defaultView )	// Tenta o valor vindo da folha de estilos, já calculado visualmente
			l_valor = document.defaultView.getComputedStyle( p_element, '' ).getPropertyValue( p_style )
		else 
		if( p_element.currentStyle )  // Se falhar (=IE), pega da folha, mas podendo vir com valores tipo "100%".
			l_valor = p_element.currentStyle[ p_style ];
	}

	return( l_valor );
}

//============================================================================
// Tratamento de Cookies
//============================================================================
function setCookie( p_nome, p_valor, p_diasExpira )
{
	if( p_diasExpira )
	{
		var l_date = new Date();
		l_date.setTime( l_date.getTime() + ( p_diasExpira * 24 * 60 * 60 * 1000 ) );
		var l_expiraEm = '; expires=' + l_date.toGMTString();
	}
	else
		l_expiraEm = '';
	document.cookie = p_nome + '=' + p_valor + l_expiraEm + '; path=/';
}

//============================================================================
function readCookie( p_nome )
{
	var l_nomeIgual = p_nome + '=';
	var l_vetCookie = document.cookie.split( ';' );
	for( var i=0,l=l_vetCookie.length; i<l; i++ )
	{
		var l_umCookie = l_vetCookie[ i ];
		while( l_umCookie.charAt( 0 ) == ' ' ) 
			l_umCookie = l_umCookie.substring( 1, l_umCookie.length );
		if( l_umCookie.indexOf( l_nomeIgual ) == 0 ) 
			return( l_umCookie.substring( l_nomeIgual.length, l_umCookie.length ) );
	}
	return( null );
}

//============================================================================
function eraseCookie( p_nome )
{
	setCookie( p_nome, '', -1 );
}

//============================================================================
function salvarParametro( p_nome )
{
	// Se tem campos de formulário para enviar, seta-os como cookies
	var l_camposForm = document.all['LANCE_FORM'];
	var l_strCookie = '';

	for( var i=0,l=l_camposForm.length; i<l; i++ )
	{
		with( l_camposForm[ i ] )
		{
			if( name.indexOf( 'LANCE_' ) == -1  &&  name.indexOf( 'mce_' ) == -1  &&  !getAttribute( 'manterIgual' ) )
				l_strCookie += '[[[' + name.toUpperCase() + ']]]' + eval( name ).DeMscParaServidor( value );
		}
	}
	setCookie( p_nome, escape(l_strCookie), 0 );
}

//============================================================================
// Exibe uma Mensagem 
//============================================================================
function conectando( p_simNao )
{
	FrameSistema.g_conectando = p_simNao;
	if( FrameMenu ) FrameMenu.g_conectando = p_simNao;
	if( FrameBotoes ) FrameBotoes.g_conectando = p_simNao;
	if( FrameNavegacao ) FrameNavegacao.g_conectando = p_simNao;
}
	
//============================================================================
// Exibe uma Mensagem 
//============================================================================
function mensagem( p_msg )
{
	var l_janAguarde = FrameSistema.document.getElementById( "JanAguarde" )
	if( l_janAguarde != null )
	{
		var l_iFrm = FrameSistema.document.getElementById( "JanAguarde_iframe" ).style;
		if( p_msg == '' )
		{
			l_iFrm.visibility = "hidden";
			l_janAguarde.style.visibility = "hidden";
			conectando( false );
		}
		else
		{
			var l_body = FrameSistema.document.body;
			l_janAguarde.innerHTML = "<img src='" + g_dirGif + "wait.gif' border='0' align='middle'>&nbsp;&nbsp;" + p_msg;
			var l_top = Math.ceil( ( l_body.clientHeight - l_janAguarde.offsetHeight ) / 2 );
			var l_left = Math.ceil( ( l_body.clientWidth - l_janAguarde.offsetWidth ) / 2 );
			var l_style = l_janAguarde.style;
			l_style.top = l_top;
			l_style.left = l_left;
			l_style.visibility = "visible";
			l_style.zIndex = 10;
			l_iFrm.width = l_janAguarde.offsetWidth;
			l_iFrm.height = l_janAguarde.offsetHeight;
			l_iFrm.top = l_top;
			l_iFrm.left = l_left;
			l_iFrm.zIndex = l_style.zIndex - 1;
			l_iFrm.visibility = "visible";
			conectando( true );
		}
	}
}

//============================================================================
// Mensagem de "Aguarde... Processando"
//============================================================================
function aguarde( p_msg )
{
	trocarCursor( "wait", p_msg );
	mensagem( p_msg );
}

//============================================================================
// Abre uma nova janela na área de dados
//============================================================================
function abriuJanela( p_pagAbrir, p_resize, p_novaAltura, p_novoTopo, p_novaLargura, p_novoEsquerda )
{
	if( !p_pagAbrir )
		return( false );

	var l_novaAltura = p_novaAltura && p_novaAltura != 0 ? p_novaAltura : Math.floor( document.body.clientHeight * 0.8 );
	var l_novoTopo = p_novoTopo && p_novoTopo != 0 ? p_novoTopo : document.body.clientTop;
	
	var l_novaLargura = p_novaLargura && p_novaLargura != 0 ? p_novaLargura : Math.floor( document.body.clientWidth * 0.8 );
	var l_novoEsquerda = p_novoEsquerda && p_novoEsquerda != 0 ? p_novoEsquerda : document.body.clientLeft + document.body.clientWidth - l_novaLargura;

	var l_novaJan = window.open( p_pagAbrir, '_blank', 
		'menubar=no,directories=no,location=no,status=yes,scrollbars=yes,resizable=' + ( p_resize ? 'yes,' : 'no,' ) +
			'height=' + l_novaAltura + ',' +
			'top=' + l_novoTopo + ',' +
			'width=' + l_novaLargura + ',' +
			'left=' + l_novoEsquerda );
	return( true );
}

//============================================================================
// Transforma todos os campos do formulário em DeMscParaServidor antes de transmitir
//============================================================================
function converteCampos()
{
	for( var i=0,l=LANCE_FORM.length; i<l; i++ )
	{
		with( LANCE_FORM[ i ] )
		{
			if( name  &&  name.indexOf( 'LANCE_' ) == -1  &&  name.indexOf( 'mce_' ) == -1  &&  !getAttribute( 'manterIgual' ) )
			{
				var l_campo = eval( name );
				if( !l_campo.EhCalculado  &&  l_campo.CampoLigado == null )
					value = l_campo.DeMscParaServidor( value );
			}
		}
	}
}

//=================================================================================
function UnLoadAllFrames()
{
//	if( FrameMenu && FrameMenu.Menu_1 )
//		FrameMenu.UnLoaded();
		
	if( FrameSistema.Menu_1 ) 
		FrameNavegacao.UnLoaded();
}	

//============================================================================
// Executa uma ação selecionada
//============================================================================
function chamar( p_Historico, p_HistoricoNovo, p_idRegAtual,
	p_queTipo, p_quePhp, p_queObjeto, p_queNome, p_queAcao, p_queLigado, p_queValorLigado , 
	p_queFiltro, p_queOrdem, p_queColuna, p_queSentido, p_quePosParm, p_pularAntes, p_converteMsc )
{
	aguarde( "Aguarde... Processando" );

	if( typeof( p_Historico ) == 'undefined' || p_queTipo == '' )
	{
		// Final do Sistema - ???AFAZER - Chamar PRE_LOGOUT
		parent.location.href = parent.location.href;
	}
	else
	{
		var l_time = new Date().getTime();	

		if( p_converteMsc )
			converteCampos();
		with( LANCE_FORM )
		{
			LANCE_QUE_HISTORICO.value		= escape( p_Historico );
			LANCE_QUE_HISTORICO_NOVO.value= escape( p_HistoricoNovo );
			LANCE_QUE_REGISTRO.value		= escape( p_idRegAtual );
			LANCE_QUE_TIPO.value				= escape( p_queTipo );
			LANCE_QUE_PHP.value				= escape( p_quePhp );
			LANCE_QUE_OBJETO.value			= escape( p_queObjeto );
			LANCE_QUE_NOME.value				= escape( p_queNome );
			LANCE_QUE_ACAO.value				= escape( p_queAcao );
			LANCE_QUE_LIGADO.value			= escape( p_queLigado );
			LANCE_QUE_VALOR_LIGADO.value	= escape( p_queValorLigado );
			LANCE_QUE_FILTRO.value			= escape( p_queFiltro );
			LANCE_QUE_ORDEM.value			= escape( p_queOrdem );
			LANCE_QUE_COLUNA.value			= escape( p_queColuna );
			LANCE_QUE_SENTIDO.value			= escape( p_queSentido );
			LANCE_QUE_POSPARM.value			= escape( p_quePosParm );
			LANCE_QUE_PULAR.value			= escape( p_pularAntes );
			
			LANCE_QUE_OPCAOATUAL.value		= escape( g_opcaoAtual );
			LANCE_QUE_LIGOPCAOATUAL.value	= escape( g_ligOpcaoAtual );
			LANCE_QUE_CAMPOTRAZER.value	= escape( g_campoTrazer );
			LANCE_DEVE_LOCALIZAR.value		= escape( g_deveLocalizar ? 1 : 0 );
			
			if( g_estePhp == p_quePhp )
			{
				LANCE_QUE_TECLADO.value			= escape( g_teclado );
				LANCE_QUE_TECLADO_ORIGINAL.value	= escape( g_tecladoOriginal );
				LANCE_QUE_BUSCA.value			= escape( g_chaveDeBusca );
				LANCE_QUE_NOMEBUSCA.value		= escape( g_nomeChaveDeBusca );
			}
			LANCE_RESOLUCAO.value			= escape( g_resolucao );
			LANCE_TIME.value				 	= escape( l_time );
/*
alert(LANCE_QUE_HISTORICO.value);			
alert(LANCE_QUE_HISTORICO_NOVO.value);		
alert(LANCE_QUE_REGISTRO.value);
alert(LANCE_QUE_TIPO.value);
alert(LANCE_QUE_PHP.value);
alert(LANCE_QUE_OBJETO.value);
alert(LANCE_QUE_NOME.value);
alert(LANCE_QUE_ACAO.value);
alert(LANCE_QUE_LIGADO.value);
*/
			submit();
			disabled = true;
		}
	}
}

// ========================================================================
function chamarPhp( p_arquivoPhp, p_historico, p_outrosParms )
{
	//g_ligOpcaoAtual = 0;		
	if( p_outrosParms )
		LANCE_FORM.LANCE_OUTROS_PARMS.value = escape( p_outrosParms );
	if( !p_historico )
		p_historico = '';

	chamar( g_historico, p_historico, g_idRegAtual,
		'5', p_arquivoPhp, g_esteArquivo, g_esteCabecalho,
		'', '', '', '', '', g_ultColOrdem, g_ultSentido, '', g_primRegPag ); 
}


// ========================================================================
function chamarPhpSemHistorico( p_arquivoPhp, p_outrosParms )
{
	chamarPhp( p_arquivoPhp, '', p_outrosParms );
}


// ========================================================================
function chamarPhpComHistorico( p_arquivoPhp, p_cabec, p_outrosParms )
{
	var l_historicoNovo = 
		g_deOndeVeio[POS_NAV_TIPO] + LANCE_SEPARADOR +
		g_deOndeVeio[POS_NAV_PHP] + LANCE_SEPARADOR +
		g_deOndeVeio[POS_NAV_ARQ] + LANCE_SEPARADOR +
		g_deOndeVeio[POS_NAV_TEXTO] + LANCE_SEPARADOR +
		g_deOndeVeio[POS_NAV_ACAO] + LANCE_SEPARADOR +
		g_deOndeVeio[POS_NAV_LIG] + LANCE_SEPARADOR +
		g_deOndeVeio[POS_NAV_FILTRO] + LANCE_SEPARADOR +
		g_deOndeVeio[POS_NAV_ORDEM] + LANCE_SEPARADOR +
		g_deOndeVeio[POS_NAV_CHAVEBUSCA] + LANCE_SEPARADOR +
		g_deOndeVeio[POS_NAV_NOMECHAVEBUSCA] + LANCE_SEPARADOR +
		g_ultColOrdem + LANCE_SEPARADOR +
		g_ultSentido + LANCE_SEPARADOR +
		g_deOndeVeio[POS_NAV_LIGVAL] + LANCE_SEPARADOR +
		SubstituiInterrogacao( g_deOndeVeio[POS_NAV_LIGOPCAOATUAL] ) + LANCE_SEPARADOR +
		( g_teveTeclado ? -2 : g_primRegPag ) + LANCE_SEPARADOR + 
		g_deOndeVeio[POS_NAV_POSPARM] + LANCE_SEPARADOR +
		p_cabec + LANCE_SEPARADOR + 
		'' + LANCE_SEPARADOR +
		g_opcaoAtual + LANCE_SEPARADOR +
		0;

	chamarPhp( p_arquivoPhp, l_historicoNovo, p_outrosParms );
}

//============================================================================
// Focaliza o primeiro campo Input da tela
//============================================================================
function Lance_Focus1oCampo()
{
	document.body.focus();
	if( g_querFocar1oCampo  &&  document.forms.length > 0 )
	{
		var l_field = document.forms[0];
		for( var i = 0, l=l_field.length; i < l; i++ )
		{
			var l_elem = l_field.elements[ i ]; 
			var l_elemType = l_elem.type;
			if( !l_elem.disabled && ( ( l_elemType == 'text' ) || ( l_elemType == 'textarea' ) || 
				( l_elemType == 'radio' )  ||  ( l_elemType.toString().charAt( 0 ) == 's' ) ) )
			{
				l_elem.focus();
				break;
			}
		}
	}
}

//============================================================================
// Pausa a execução durante alguns milissegundos
//============================================================================
function Pause( p_tempo )
{
	var l_date = new Date(); //today's date
	while( true )
	{
		var l_date2 = new Date(); // Date Now
		var l_tempo = l_date2 - l_date; //difference in milliseconds
		if( l_tempo > p_tempo ) 
			break;
	}
}

//============================================================================
// Rotinas úteis
//============================================================================
function soDigitos( p_valor )
{
	return( !/^\d+?$/.test(p_valor) ? false : true )
}

//============================================================================
function soDigitosEDecimais( p_valor )
{
	return( !/^\d+(\,\d+)?$/.test(p_valor) ? false : true )
}

//============================================================================
function VerificaCpfCnpj( p_numero, p_ate, p_digitos )
{
	var l_zero = '0'.charCodeAt( 0 );
	var l_total = 0;
	for( var i = 0; i < p_ate; i++ )
		l_total += p_digitos[i] * ( p_numero.charCodeAt( i ) - l_zero );
	var l_resto = l_total % 11;
	return( 
		( l_resto <= 1  &&  p_numero.charAt( p_ate ) == '0' )  ||
		( ( p_numero.charCodeAt( p_ate ) - l_zero ) == ( 11 - l_resto ) ) 
	);
}

//============================================================================
function CpfOk( p_cpf )
{
	p_cpf = p_cpf.toString();
	return( p_cpf.length == 11  &&  
		VerificaCpfCnpj( p_cpf,  9, [10,9,8,7,6,5,4,3,2,1] )  &&  
		VerificaCpfCnpj( p_cpf, 10, [11,10,9,8,7,6,5,4,3,2] ) );
}

//============================================================================
function CnpjOk( p_cnpj )
{
	p_cnpj = p_cnpj.toString();
	return( p_cnpj.length == 14  &&  
		VerificaCpfCnpj( p_cnpj, 12, [5,4,3,2,9,8,7,6,5,4,3,2,1] )  &&  
		VerificaCpfCnpj( p_cnpj, 13, [6,5,4,3,2,9,8,7,6,5,4,3,2] ) );
}


function dvEAN13( p_codigo )
//-------------------------------------------------------
// Gera DV para um código, segundo o Código de Barras EAN-13
//		p_codigo = código com até 12 dígitos a ser representado
//-------------------------------------------------------
{
	p_codigo = p_codigo + '';	// Transforma código em cadeia, se fosse object
	if( p_codigo.length >= 13 )
		return( p_codigo.substr( 12, 1 ) );

	var l_soma = 0, i = 0;

	p_codigo = ZEROS.substr( 0, 12-p_codigo.length ) + p_codigo;

	for( i = 1; i <= 12; i+=2 )
		l_soma += p_codigo.substr( i, 1 )*3;
	for( i = 0; i <= 12; i+=2 )
		l_soma += p_codigo.substr( i, 1 )*1;
	var l_dv = 10 - ( l_soma % 10 );
	return( l_dv == 10 ? 0 : l_dv );
}


function dvEAN13num( p_numero )
//-------------------------------------------------------
// Gera DV para um número, segundo o Código de Barras EAN-13
//		p_numero = número de até 12 dígitos a ser representado
//-------------------------------------------------------
{
	return( dvEAN13( (0+p_numero).toString() ) );
}


function ValidarEAN13( p_numero )
//-------------------------------------------------------
// Valida o DV de um código de 13 dígitos segundo o Código de Barras EAN-13
//-------------------------------------------------------
{
	var l_strnum = p_numero + '';
	return( dvEAN13( l_strnum.substr( 0, 12 ) ) == l_strnum.substr( 12, 1 ) );
}


function ValidarEAN13num( p_numero )
//-------------------------------------------------------
// Valida o DV de um número de 13 dígitos segundo o Código de Barras EAN-13
//-------------------------------------------------------
{
	return( ValidarEAN13( ( p_numero + 0 ).toString() ) );
}


function dvCODE39( p_codigo )
//-------------------------------------------------------
// Gera DV para um código, segundo o Código de Barras CODE 39
//		p_codigo = código a ser representado
//-------------------------------------------------------
{
	var letras = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%';
	var tot = 0;
	
	p_codigo = p_codigo.toUpperCase();
	
	for( i=0; i<p_codigo.length; i++ )
	{
		tot += letras.indexOf( p_codigo.substr( i, 1 ) );
	}
	
	return( letras.substr( tot % 43, 1 ) );
}


function ValidarCODE39( p_codigo )
//-------------------------------------------------------
// Valida o DV de um código segundo o Código de Barras CODE 39
//-------------------------------------------------------
{
	var l = p_codigo.length;
	return( dvCODE39( p_codigo.substr( 0, l-1 ) ) == p_codigo.substr( l-1, 1 ) );
}


function GrupoAtualEm()
//============================================================================
//	Verifica se g_grupoAtual é um dos informados como argumento da função
//============================================================================
{
	if( g_grupoAtual == 0 )
		return( true );
		
	for( var i = 0, l = arguments.length; i < l; i++ ) 
	{
		if( arguments[i]==g_grupoAtual )
			return( true );
	}
	return( false );
}

function GrupoAtualNaoEm()
//============================================================================
//	Verifica se g_grupoAtual não é um dos informados como argumento da função
//============================================================================
{
	if( g_grupoAtual == 0 )
		return( true );
		
	for( var i = 0, l = arguments.length; i < l; i++ ) 
	{
		if( arguments[i]==g_grupoAtual )
			return( false );
	}
	return( true );
}	

function strTOreal( p_str )
//============================================================================
// Retorna uma cadeia como um número real (com ponto decimal )
//============================================================================
{
	p_str = p_str.toString().replace( /\./g, "" );
	p_str = p_str.toString().replace( /,/g, "." );
	var l_result = parseFloat( p_str );
	return( isNaN( l_result ) ? 0 : l_result );
}

function realTOstr( p_real, p_casas )
//============================================================================
// Retorna um número real como uma cadeia de p_casas
//============================================================================
{
	var l_result = Math.round( p_real * Math.pow( 10, p_casas ) ).toString();
	if( p_casas > 0 )
	{
		if( l_result == 0 )
		{
			l_result = '0,' + ZEROS;
			return( l_result.substr( 0, p_casas+2 ) );
		}

		return( l_result.substring( 0, l_result.length - p_casas ) + ',' + 
				  l_result.substring( l_result.length - p_casas, l_result.length ) );
	}
	else
		return( l_result );
}

//============================================================================
function trocarCursor( p_cursor, p_msg )
{
//açert(p_cursor+" m=",$p_ms+' d='+document.body.style.cursor);
	document.body.style.cursor = p_cursor;
	window.status = p_msg;
	mensagem( p_msg );
}

//============================================================================
function estaContido( p_oque, p_onde )
{
	return( p_onde.contains( p_oque ) );
}

//============================================================================
function tiraAcento( p_str )
{
	var COM_ACENTOS = 'áäâàãéëêèíïîìóöôòõúüûùçñýÿÁÄÂÀÃÉËÊÈÍÏÎÌÓÖÔÒÕÚÜÛÙÇÑÝ';
	var SEM_ACENTOS = 'aaaaaeeeeiiiiooooouuuucnyyAAAAAEEEEIIIIOOOOOUUUUCNY';
	
	for( var i = 0, l = COM_ACENTOS.length; i < l; i++ )
		p_str = p_str.replace( COM_ACENTOS.charAt(i), SEM_ACENTOS.charAt(i) );
	return( p_str );
}

//============================================================================
function rTrim( p_str )
{
	return( p_str.replace(/(.*?)\s*$/, "$1") ); 
} 

//============================================================================
function lTrim( p_str )
{
	return( p_str.replace(/^\s*(.*)/, "$1") ); 
} 

//============================================================================
function trim( p_str )
{
	return( rTrim( lTrim( p_str ) ) );
} 

//=================================================================================
function cad0( p_num, p_qtd )
{
	p_num = p_num.toString();
	return( ZEROS.substring( 0, p_qtd - p_num.length ) + p_num );
}

//=================================================================================
function pontoMilhar( p_num )
{
	p_num += '';
	var i = 3;
	var l=p_num.length;
	while( l > i )
	{
		p_num = p_num.substr( 0, l-i ) + '.' + p_num.substr( l-i, l );
		i += 4;
	}
	return( p_num );
}

//=================================================================================
function AlterarBufferTeclado( p_teclado )
{
	g_teclado = p_teclado;
	if( parent.rodape && parent.rodape.RodapeTecla )
		parent.rodape.RodapeTecla.innerHTML = p_teclado;
	if( p_teclado == '' )
		clearTimeout( g_timeoutFiltro );
	else
		g_teveTeclado = true;
}

//=================================================================================
function AlterarCabBuscarPor( p_novaChave, p_novoNomeChave )
{
	g_chaveDeBusca = p_novaChave;
	g_nomeChaveDeBusca = p_novoNomeChave;

	if( parent.sistema.CabChaveDeBusca )
		CabChaveDeBusca.innerHTML = p_novaChave &&  p_novoNomeChave ? ' - buscar por ' + p_novoNomeChave : '';
}

//=========================================================================
function FazTeclaLida( p_code, p_ctrl, p_ctrlL, p_shift, p_shiftL, p_alt, p_altL )
{
	if( p_alt && ! p_altL )
		p_ctrl = false;

	var l_strCode = String.fromCharCode( p_code ).toUpperCase();
	var l_letraValida = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%¨&*()-+=_[]{}<>;:/?\|'.indexOf( l_strCode ) != -1;

	if( p_ctrl )
	{
		if( p_shift )
		{
			if( p_shiftL )
				// Controle para as opções de histórico das navegações
				return( g_historico == ''  ||  '0123456789'.indexOf( l_strCode ) == -1  ||  !Lance_ClickHistorico( parseInt( l_strCode, 10 ) ) );
			else
				// Controle para as opções de formulários
				return( g_vetFormsSelecao == ''  ||  !l_letraValida  ||  !Lance_FezCaracterSelecaoForm( l_strCode ) );
		}
		else
		{
			// Controle para as opções do menu
			// CtrlLeft = MenuPrincipal / CtrlRight = MenuNavegação
			g_frameDoMenu = p_ctrlL ? FrameMenu : FrameNavegacao;
			return( !l_letraValida  ||  !g_frameDoMenu.FezCaracterMenuPrinc( l_strCode ) );
		}
	}
	else
	{
		if( g_frameDoMenu && g_temMenuAberto )
			// Controle para as opções do submenu
			return( ( !l_letraValida  ||  !g_frameDoMenu.FezCaracterMenuAtual( l_strCode ) )  &&  
						 !g_frameDoMenu.FezTecla( p_code ) );
		else
		if( g_emFolheamento && !g_temFormAberto )
		{
			// Controle do folheamento
			return( !Lance_FezTeclaFolheamento( p_code, p_alt && !p_altL, p_shift ) );
		}
		else
		if( g_temFormAberto || g_temFlutuante )
			return( !Lance_FezTeclaForm( p_code, p_shift ) );
		else
		if( g_vetBotoes != '' )
			return( !Lance_ClickBotao( p_code ) );
	}
	return( true );
}

//=========================================================================
function FazCaracterLido( p_code )
{
	if( g_emFolheamento && !g_temFormAberto )
		// Controle do folheamento para filtragem automatica
		return( !Lance_FezFiltragemFolheamento( String.fromCharCode( p_code ).toUpperCase() ) )

	return( false );
}

//============================================================================
function FazTeclaBuffer( p_menuNormal, p_teclas )
{ 
	FazTeclaLida( p_teclas[0].charCodeAt(0), true, p_menuNormal, false, false, false, false );
	for( var i=1; i<p_teclas.length; i++ )
		FazTeclaLida( p_teclas[i].charCodeAt(0), false, false, false, false, false, false );
}

//=================================================================================
function PodeExecutar( p_Condicao )
{
//alert(p_Condicao+' t='+Situacao);
	return( p_Condicao == ''  ||  eval( p_Condicao ) );
}

//=================================================================================
function ultimaLigOpcao()
{
	return( g_ligOpcaoAtual );
}

//=================================================================================
function ExecutarOpcaoMenu( p_tipoMenu )
{
	var s = '';
	for( var i = 1, l = arguments.length; i < l; i++ ) 
		s += '"' + arguments[i] + '",';
	s = '[' + s.substring( 0, s.length-1 ) + ']';
	setTimeout( 'FazTeclaBuffer( ' + p_tipoMenu + ', ' + s +  ' )', 200 );
}

//=================================================================================
function Lance_Tempo( p_tempoPhp, p_inicioJs, p_horaQueChamou )
{
	var l_tempoPhp = Math.round( p_tempoPhp * 100 ) / 100;
	var l_agora = new Date().getTime();
	var l_tempoJs = Math.round( ( l_agora - p_inicioJs )/10 ) / 100;
	var l_tempoTotal = Math.round( ( l_agora - p_horaQueChamou )/10 ) / 100;
	var l_tempoComunic = Math.round( ( l_tempoTotal - l_tempoPhp - l_tempoJs ) * 100 ) / 100;
	document.write( '<div class="tempos">',
		'<span class="umTempo">Servidor: ', l_tempoPhp, ' seg</span>',
		'<span class="umTempo">Comunicação: ', l_tempoComunic, ' seg</span>',
		'<span class="umTempo">Local: ', l_tempoJs, ' seg</span>',
		'<span class="umTempo">Total: ', l_tempoTotal, ' seg</span>',
		'</div>' );
}

//=================================================================================
function TrocaEnterPorTab()
{
	var code = window.event.keyCode;
	if( code == 13 ) window.event.keyCode = 9;
	return( true );
}

//=================================================================================
function Lance_ValidarLogin( p_botao, p_loginNome, p_senhaNome )
{
	valorAnt = p_botao.value;
	p_botao.disabled = true;
	p_botao.value = "Aguarde";
	
	with( LANCE_FORM )
	{
		if( LANCE_LOGIN_LOGIN.value == ""  ||  LANCE_LOGIN_SENHA.value == "" )
		{
			alert( p_loginNome + " e " + p_senhaNome + " são campos de preenchimento obrigatório" );
			p_botao.disabled = false;
			p_botao.value = valorAnt;
			return( false );
		}
		LANCE_LOGIN_LOGIN.value = LANCE_LOGIN_LOGIN.value.toUpperCase();
		LANCE_LOGIN_SENHA.value = LANCE_LOGIN_SENHA.value.toUpperCase();
		LANCE_LOGIN_MD5.value = hex_md5( rTrim( LANCE_LOGIN_LOGIN.value ) + hex_md5( rTrim( LANCE_LOGIN_SENHA.value ) ) + LANCE_LOGIN_AGORA.value );
		LANCE_LOGIN_SENHA.value = "";
		submit();
		disabled = true;
	}
	return( true );
}
