var objAjaxRetornoCompletar;
/*
*
* para debugar utilize a extensao do firefox, firebug ou esse componente
* <textarea id='status_area' rows="50" style="width: 500; "></textarea>
*/




/**
* Metodo para realizar execucao ajax
*
* @param strComponente - componente onde se localiza a classe
* @param strClasse - Nome da classe
* @param strMetodo - Metodo da classe
* @param arrParametros - array de parametros
* @param strMetodoCarregando - assinatura do metodo que sera executado
* antes e depois da execucao ajax
* @param strMetodoAposExecucao - Metodo chamado apos a execucao ajax
* @param strMetodoErro - Metodo executado se acontecer algum erro, se não for passado
* o erro é exibido por um alert
* @since 07/06/2006
* @author Adaptado por Erix Henrique Morato <emorato@unibh.br>
* @access public
*/
function requisicaoMetodoAjax(strComponente,strClasse,strMetodo,arrParametrosMetodoRequisicao,strMetodoCarregando,strMetodoAposExecucao,strMetodoErro,bolAjax)
{
	// convertendo informações para o padrao URI
	var arrParametrosRequisicao = cloneObject(arrParametrosMetodoRequisicao,true);
	//arrParametrosRequisicao = retirarEspeciaisHtml(arrParametrosRequisicao);

	//converte os parametros
	var objBase64 = new Base64();
	var strParametros = converterArrayJsPhp(arrParametrosRequisicao,true);

	strParametros = objBase64.encode(strParametros);
	
	if (bolAjax ==undefined)
		bolAjax = false;

	// Criando objAjaxRequest
	var objAjax = new AjaxRequest("POST","/phpxml/classes/ajax/class.RequisicaoAjax.php", "strComponente="+strComponente+"&strClasse="+strClasse+"&strMetodo="+strMetodo+"&strParametros="+strParametros,strMetodoCarregando,strMetodoAposExecucao,strMetodoErro,bolAjax);
	return objAjax;
}

/************************** EXECUTA ACAO E PREENCHE COMBOS *******************************/

/**
* Metodo para preencher combo usando ajax
*
* @param objCombo - objeto combo 
* @param strComponente - componente onde se localiza a classe
* @param strClasse - Nome da classe
* @param strMetodo - Metodo da classe
* @param arrParametros - array de parametros
* @param strMascara - Mascara usada no combo
* @param strMetodoCarregando - assinatura do metodo que sera executado
* antes e depois da execucao ajax
* @param strValorSelecionado - Valor que devera ser selecionado
* @param strNomCampo - Nome do campo
* @since 07/06/2006
* @author Adaptado por Erix Henrique Morato <emorato@unibh.br>
* @access public
*/
function preencherComboAjax(objCombo,strComponente,strClasse,strMetodo,arrParametros,strMascara,strMetodoCarregando,strValorSelecionado,strNomCampo,strMetodoErro,strFuncaoCallback,strFiltro)
{
	if (!strFiltro)
	{
		strFiltro = '';
	}
	preencherComboAjaxPadrao(objCombo,strComponente,strClasse,strMetodo,arrParametros,strMascara,strMetodoCarregando,strValorSelecionado,strNomCampo,strMetodoErro,strFuncaoCallback,strFiltro);	
}


function preencherComboAjaxMetodoCarregando(objCombo,strComponente,strClasse,strMetodo,arrParametros,strMascara,strMetodoCarregando,strValorSelecionado,strNomCampo,strMetodoErro,strFuncaoCallback,strFiltro)
{
	if (!strFiltro)
	{
		strFiltro = '';
	}
	preencherComboAjaxPadrao(objCombo,strComponente,strClasse,strMetodo,arrParametros,strMascara,strMetodoCarregando,strValorSelecionado, strNomCampo,strMetodoErro,strFuncaoCallback,strFiltro);
}


function preencherComboAjaxPadrao(objCombo,strComponente,strClasse,strMetodo,arrParametros,strMascara,strMetodoCarregando,strValorSelecionado, strNomCampo,strMetodoErro,strFuncaoCallback,strFiltro)
{	
	strId = objCombo.id;
	strParametros = '';
	
	if (strValorSelecionado != '')
	{
		if (strNomCampo != '')
		{
			strParametros = ', "'+ strValorSelecionado + '", "' +strNomCampo + '"';
		}
	}
	
	if (strFiltro!='')
	{
		arrParametros[PROPRIEDADE_ELEMENTO_FILTRO] = strFiltro;
	}
	
	//requisicao ajax
	requisicaoMetodoAjax(strComponente,strClasse,strMetodo,arrParametros,strMetodoCarregando,'preencherDadosComboAjax(objRetornoAjax, "'+strId+'", "'+strMascara+'","'+strFuncaoCallback+'"'+strParametros+')',strMetodoErro);
	
	//limpa combo
	limparValoresComboNaoNulos(objCombo);
}

/**
* Metodo para realizar execucao ajax
*
* @param objRetornoAjax - Objeto de retorno do ajax
* @param strIdCombo - Id do combo
* @param strMascara - Mascara usada
* @param strValor - Valor para selecionar
* @param strNomCampo - Nome do campo do array para preecher o combo
* @since 07/06/2006
* @author Adaptado por Erix Henrique Morato <emorato@unibh.br>
* @access public
*/
function preencherDadosComboAjax(objRetornoAjax, strIdCombo, strMascara,strFuncaoCallback, strValor, strNomCampo)
{
	// recuperando combo 	
	objComboAjax = $(strIdCombo);
		
	//recuperando array de dados
	arrRetorno = objRetornoAjax.getArrayRetorno();
	
	//preeenche combo
	for (z=0; z<arrRetorno.length; z++)
	{
		//strArrayDados = arrRetorno[z];
		arrItensAjax = arrRetorno[z];//converterArrayPhpJs(strArrayDados);
		strArrayDados = converterArrayJsPhp(arrItensAjax);			
		strCampo = '';
		strItemMascara = strMascara;
		
		//alert(strNomCampo)
		bolSelecionado = false;
		for (strCampo in arrItensAjax)
		{
			if (!eNumero(strCampo))
			{
				if (strCampo == strNomCampo)
				{
					if (arrItensAjax[strCampo] == strValor)
						bolSelecionado=true;
				}				
				//alert(strCampo+' e '+arrItensAjax[strCampo]+' e tbm: '+gstrMascaraCombo);
				strItemMascara = strItemMascara.replace(strCampo,arrItensAjax[strCampo]);
			}
		}
		inserirItemComboNoFinal(strItemMascara,strArrayDados,objComboAjax);
		if (bolSelecionado)
		{
			objComboAjax.selectedIndex = objComboAjax.length - 1;
		}
	}
	if(strFuncaoCallback)
	{
		eval(strFuncaoCallback);
	}
}

/**************************************************************************************************************/

/**
* Metodo para carregar imagem ajax
*/
function carregarLogoAjax(indStatus,strIdImagemAjax)
{
	objImagem = $(strIdImagemAjax);
	objImagem.style.visibility = 'visible';
	objImagem.style.display = 'block';
	if(objImagem!=undefined)
	{
		if (indStatus=='I')
		{		
			objImagem.style.visibility = 'visible';
		}
		else
		{	
			objImagem.style.visibility = 'hidden';
			objImagem.style.display = 'none';
		}			
	}
}



/**
* Metodo para preecher array retorno ajax
*
* @param strComponente - componente onde se localiza a classe
* @param strClasse - Nome da classe
* @param strMetodo - Metodo da classe
* @param arrParametros - array de parametros
* @param strMetodoCarregando - assinatura do metodo que sera executado
* antes e depois da execucao ajax
* @param strMetodoAposExecucao - Metodo chamado apos a execucao ajax
* @param strMetodoErro - Metodo executado se acontecer algum erro, se não for passado
* o erro é exibido por um alert
* @since 07/06/2006
* @author Adaptado por Erix Henrique Morato <emorato@unibh.br>
* @access public
*/
function preencherArrayAjax(strComponente,strClasse,strMetodo,arrParametros,strMetodoAposExecucao,objImagemAjax,strMetodoErro)
{
	strMetodoCarregando = '';
	if (objImagemAjax)
	{
		strMetodoCarregando = 'carregarLogoAjax(indStatus,"'+objImagemAjax.id+'")';
	}
	
	preencherArrayAjaxPadrao(strComponente,strClasse,strMetodo,arrParametros,strMetodoAposExecucao,strMetodoCarregando,strMetodoErro)
}

/**
* Metodo para preecher array retorno ajax
*
* @param strComponente - componente onde se localiza a classe
* @param strClasse - Nome da classe
* @param strMetodo - Metodo da classe
* @param arrParametros - array de parametros
* @param strMetodoCarregando - assinatura do metodo que sera executado
* antes e depois da execucao ajax
* @param strMetodoAposExecucao - Metodo chamado apos a execucao ajax
* @param strMetodoErro - Metodo executado se acontecer algum erro, se não for passado
* o erro é exibido por um alert
* @since 07/06/2006
* @author Adaptado por Erix Henrique Morato <emorato@unibh.br>
* @access public
*/
function preencherArrayAjaxPadrao(strComponente,strClasse,strMetodo,arrParametros,strMetodoAposExecucao,strMetodoCarregando,strMetodoErro)
{
	//caso o parametro seja passado via string
	if (!is_array(arrParametros))
	{
		arrParametros = converterArrayPhpJs(arrParametros,true);
	}
	
	//requisicao ajax
	requisicaoMetodoAjax(strComponente,strClasse,strMetodo,arrParametros,strMetodoCarregando,strMetodoAposExecucao,strMetodoErro);
}


/************ FUNCOES PARA PREENCHIMENTO AUTOMATICO ESTILO GOOGLE SUGGEST *******************/

/**
* Metodo para executar acao sem chamado do metodo apos execucao
*
* @param strComponente - componente onde se localiza a classe
* @param strClasse - Nome da classe
* @param strMetodo - Metodo da classe
* @param arrParametros - array de parametros
* @param strMetodoCarregando - assinatura do metodo que sera executado
* antes e depois da execucao ajax
* @param strMetodoAposExecucao - Metodo chamado apos a execucao ajax
* @param strMetodoErro - Metodo executado se acontecer algum erro, se não for passado
* o erro é exibido por um alert
* @since 07/06/2006
* @author Erix Henrique Morato <emorato@unibh.br>
* @access public
*/
function executarAcaoAjax(strComponente,strClasse,strMetodo,arrParametrosAcaoAjax,strMetodoCarregando,strMetodoAposExecucao,strMetodoErro,bolAjax)
{
	//requisicao ajax	
	requisicaoMetodoAjax(strComponente,strClasse,strMetodo,arrParametrosAcaoAjax,strMetodoCarregando,strMetodoAposExecucao,strMetodoErro,bolAjax);
}



/***************************** AUTO COMPLETAR ************************************************/

//elemento padrao utilizado pela funcao de autoCompletar caso nenhum elemento seja definido, criado dinamicamente
var objElementoPadraoAutoCompletar = null;
var gintTempoRetornoAutoCompletar = null;

/**
* Metodo para realizar a busca de AutoCompletars via ajax
*/
function gerarDadosAutoCompletarAjax(
	strComponente,
	strClasse,
	strMetodo,
	arrParametros,
	strMetodoCarregando,
	strMetodoErro,
	strDivConteudoAutoCompletar,
	strTxtAutoCompletar,
	strHidCodAutoCompletar,
	strClassDivPrincipal,
	strClassDivItem,
	strClassDivSelecionado,
	strCampoCodigo,
	strCampoMascara,
	intTamIniCaracteres,
	intMaxItens,
	event,strMetodoAcaoSelecionado,intTempoEsperaExecucao)
{
	
	//busca a tecla
	var teclaCode;
	if (event.keyCode) teclaCode = event.keyCode;
	else if (event.which) teclaCode = event.which;
	
	var bolMouseFocoDivAutoCompletar = false;	
		
	//caso o usuaio nao informe, cria dinamicamente o elemento de autocompletar
	if (!strDivConteudoAutoCompletar)
	{
		//verificar se um elemento auto-completar já foi criado
		objElementoPadraoAutoCompletar = $('elementoPadraoAutoCompletar');
		
		//caso nao, cria um novo elemento
		if (!objElementoPadraoAutoCompletar)
		{
			//cria e insere elemento na tela
			var objElementoPadraoAutoCompletar = document.createElement('div');
			objElementoPadraoAutoCompletar.id = 'elementoPadraoAutoCompletar'
			strDivConteudoAutoCompletar = objElementoPadraoAutoCompletar.id;
					
			//adiciona no form
			$(strTxtAutoCompletar).form.appendChild(objElementoPadraoAutoCompletar);			
		}
		else
		{
			//caso sim define o elemento padrao como esse
			strDivConteudoAutoCompletar = objElementoPadraoAutoCompletar.id;	
		}
	}
	
	//busca elemento auto-completar
	var divConteudoAutoCompletar = document.getElementById(strDivConteudoAutoCompletar);
	
	//adiciona funcoes padroes no elemento text para verificacao do foco
	document.getElementById(strDivConteudoAutoCompletar).onmouseover = function()
	{
		bolMouseFocoDivAutoCompletar = true;
	}
	document.getElementById(strDivConteudoAutoCompletar).onmouseout = function()
	{
		bolMouseFocoDivAutoCompletar = false;			
	}	
	
	//funcao na hora de selecionar - clicar
	$(strTxtAutoCompletar).onblur = function(){	
		
		if (($(strHidCodAutoCompletar).value=='') && !(bolMouseFocoDivAutoCompletar) )
		{
			document.getElementById(strDivConteudoAutoCompletar).style.visibility = 'hidden';
			document.getElementById(strDivConteudoAutoCompletar).style.display = 'none';
			$(strTxtAutoCompletar).value = '';
			$(strHidCodAutoCompletar).value = '';
		}
		else
		{
			controlaPosicaoAutoCompletar(
				teclaCode,
				strDivConteudoAutoCompletar,
				strTxtAutoCompletar,
				strHidCodAutoCompletar,
				strClassDivItem,
				strClassDivSelecionado,strMetodoAcaoSelecionado);
		}
		return false;
	}
	
	//se teclas de navegacao, navega entre os itens buscados
	if(teclaCode == 13 || teclaCode==40 || teclaCode == 38 || teclaCode == 9){ /* enter, seta abaixo, seta acima, tab */
	controlaPosicaoAutoCompletar(
		teclaCode,
		strDivConteudoAutoCompletar,
		strTxtAutoCompletar,
		strHidCodAutoCompletar,
		strClassDivItem,
		strClassDivSelecionado,strMetodoAcaoSelecionado);			
		return false;
	}
	
	//se esta digitando, faz as buscas
	if (keyNumerico(event) || keyAlfabetico(event) || teclaCode==32 || teclaCode==222 ) { /* + espaço e apostofro */
		// cria conteudo AutoCompletar
		objAutoCompletar = document.getElementById(strTxtAutoCompletar);
		// recuperando AutoCompletar digitada
		strAutoCompletar = objAutoCompletar.value;
		
		//se passou do limite, pode buscar
		if(strAutoCompletar.length>=intTamIniCaracteres)
		{
			objImagemAjax = document.getElementById('imgCarregando');
			strMetodoAposExecucao = "controlarComponenteAutoCompletar(objRetornoAjax,"+intMaxItens+",'"+strCampoCodigo+"','"+strCampoMascara+"','"+strDivConteudoAutoCompletar+"','"+strHidCodAutoCompletar+"','"+strTxtAutoCompletar+"','"+strClassDivPrincipal+"','"+strClassDivItem+"','"+strClassDivSelecionado+"','"+strMetodoAcaoSelecionado+"')";
			
			if (intTempoEsperaExecucao<0)
			{
				preencherArrayAjaxPadrao(strComponente, strClasse, strMetodo, arrParametros, strMetodoAposExecucao, strMetodoCarregando);
			}
			else
			{
				arrTeste = new Array();
				arrTeste['oi'] = 'ei';
				arrParametros['teste'] = arrTeste;
				
				//executa busca temporizada
				var strParametros = converterArrayJsPhp(arrParametros,true);
				var strAcao = "preencherArrayAjaxPadrao('"+strComponente+"','"+strClasse+"',\""+strMetodo+"\",\""+strParametros+"\",\""+strMetodoAposExecucao+"\",'"+strMetodoCarregando+"');";
				var objBase64 = new Base64();
				strAcaoCodificada = objBase64.encode(strAcao);
				temporizarEvento($(strTxtAutoCompletar),strAcaoCodificada,intTempoEsperaExecucao);
			}
			
			//define o top do elemento		
			$(strDivConteudoAutoCompletar).style.top = getPosition($(strTxtAutoCompletar)).y+$(strTxtAutoCompletar).offsetHeight+'px';
			$(strDivConteudoAutoCompletar).style.left = getPosition($(strTxtAutoCompletar)).x+'px';
			
			//define o width do elemento
			$(strDivConteudoAutoCompletar).style.width = $(strTxtAutoCompletar).offsetWidth+'px';
		}
		else
		{
			//se nao, esconde tudo
			$(strDivConteudoAutoCompletar).style.visibility='hidden';
			$(strDivConteudoAutoCompletar).style.display='none';			
			$(strHidCodAutoCompletar).value = '';			
		}
	}
}
	
/**
* Metodo para contralar a posicao dos itens da AutoCompletar
*/

function controlaPosicaoAutoCompletar(
	teclaCode,
	strDivConteudoAutoCompletar,
	strIdTxtAutoCompletar,
	strHidAutoCompletar,
	strClassDivItem,
	strClassDivSelecionado,strMetodoAcaoSelecionado)
{
	
	// recuperando hidden que armazena a posicao corrente da AutoCompletar
	objHidPosSelecionado = document.getElementById('hidPosSelecionado'); 	
	if(objHidPosSelecionado)
	{
		// recuperando objetos de manipulacao das AutoCompletars
		objDivAutoCompletar = document.getElementById(strDivConteudoAutoCompletar);
		objAutoCompletar = document.getElementById(strIdTxtAutoCompletar);
		objHidCodAutoCompletar = document.getElementById(strHidAutoCompletar);
		// recuperando posicao
		intPos = parseInt(objHidPosSelecionado.value);
		// recuperando item da AutoCompletar
		objDivItemAutoCompletar = document.getElementById('divAutoCompletar_'+intPos);
		// retornado item selecionado
		objDivItemAutoCompletar.className = strClassDivItem;
		
		// pressionando tecla para baixo
		if(teclaCode==40)
		{
			intPos++;
			objDivItemAutoCompletar = document.getElementById('divAutoCompletar_'+intPos);
			if(objDivItemAutoCompletar!='' && objDivItemAutoCompletar!=undefined)
			{
				objDivItemAutoCompletar.className = strClassDivSelecionado;
				objHidPosSelecionado.value = intPos;
			}
		}
		// pressionando tecl para cima
		else if(teclaCode==38)
		{
			intPos--;
			objDivItemAutoCompletar = document.getElementById('divAutoCompletar_'+intPos);
			if(objDivItemAutoCompletar!='' && objDivItemAutoCompletar!=undefined)
			{
				objDivItemAutoCompletar.className = strClassDivSelecionado;
				objHidPosSelecionado.value = intPos;
			}
		}
		// pressionando enter
		else if(teclaCode==13)
		{
			arrItens = new Array();
			if(objDivItemAutoCompletar.objRetornoAjax)
			{
				arrRetornoAjax = objDivItemAutoCompletar.objRetornoAjax.getArrayRetorno();
				arrItens = arrRetornoAjax[intPos];
			}
			objDivItemAutoCompletar = document.getElementById('divAutoCompletar_'+intPos);
			selecionarItemAutoCompletar(objDivItemAutoCompletar,objAutoCompletar,strMetodoAcaoSelecionado,arrItens);
		}		
	}
	else
	{		
		objDivAutoCompletar = document.getElementById(strDivConteudoAutoCompletar);
		objDivAutoCompletar.style.visibility = 'hidden';
		objDivAutoCompletar.style.display = 'none';					
	}
}

/**
* Metodo para controlar componente obter AutoCompletar
*/
function controlarComponenteAutoCompletar(
	objAjaxRetorno,
	maxItens,
	strCampoCodigo,
	strCampoMascara,
	strDivConteudoAutoCompletar,
	strHidAutoCompletar,
	strTxtAutoCompletar,
	strClassDivPrincipal,
	strClassDivItem,
	strClassDivSelecionado,
	strMetodoAcaoSelecionado
)
{
	//alert('gintTempoRetornoAutoCompletar: '+gintTempoRetornoAutoCompletar);
	//alert('getTempoInicialAjax: '+objAjaxRetorno.getTempoInicialAjax());
	if (gintTempoRetornoAutoCompletar == null)
	{
		gintTempoRetornoAutoCompletar = objAjaxRetorno.getTempoInicialAjax();
	}
	else
	{
		if (gintTempoRetornoAutoCompletar > objAjaxRetorno.getTempoInicialAjax())
		{			
			return false;
		}
		else
		{
			gintTempoRetornoAutoCompletar = objAjaxRetorno.getTempoInicialAjax();
		}
	}
	
	// recuperando array de retorno
	arrRetorno = objAjaxRetorno.getArrayRetorno();
	objAjaxRetornoCompletar = objAjaxRetorno;
	
	// criando div AutoCompletars
	objDivAutoCompletar = document.getElementById(strDivConteudoAutoCompletar);
	
	objDivAutoCompletar.style.visibility = 'visible';
	objDivAutoCompletar.style.display = 'block';
	objDivAutoCompletar.className = strClassDivPrincipal;
	
	objDivAutoCompletar.innerHTML = '';
	
	// recuperando AutoCompletar
	objAutoCompletar = document.getElementById(strTxtAutoCompletar);
	
	// recuperando hidden codigo da AutoCompletar
	objHidCodigo = document.getElementById(strHidAutoCompletar);
	
	quantItens = 0;
	if(maxItens > arrRetorno.length)
	{
		quantItens = arrRetorno.length;
	}
	else
	{
		quantItens = maxItens;
	}
	
	// recuperando AutoCompletars buscadas
	for (var i=0; i<quantItens; i++)
	{
		// recuperando conteudo array
		//strArrayDados = arrRetorno[i];
		//arrItensAjax = converterArrayPhpJs(strArrayDados);
		arrItensAjax = arrRetorno[i];//converterArrayPhpJs(strArrayDados);
		//strArrayDados = converterArrayJsPhp(arrItensAjax);
		
		intCodAutoCompletar = arrItensAjax[strCampoCodigo];		
		strNomAutoCompletar = arrItensAjax[strCampoMascara];
		
		//criando itens AutoCompletar
		objDivItemAutoCompletar = document.createElement('div');
		objDivItemAutoCompletar.id = 'divAutoCompletar_'+i;
		
		// criando itens codigos AutoCompletar
		objHidAutoCompletar = document.createElement('input');
		objHidAutoCompletar.id = 'hidAutoCompletarCodigo_'+objHidCodigo.name+"_"+i;
		objHidAutoCompletar.type = 'hidden'
		objHidAutoCompletar.value = intCodAutoCompletar;
		objDivAutoCompletar.appendChild(objHidAutoCompletar);
		
		// criando eventos dos itens AutoCompletars
		if (i==0){
			objDivItemAutoCompletar.className = strClassDivSelecionado;
			
			objHidPosSelecionado = document.createElement('input');
			objHidPosSelecionado.id = 'hidPosSelecionado';
			objHidPosSelecionado.type = 'hidden'
			objHidPosSelecionado.value = i;
			objDivAutoCompletar.appendChild(objHidPosSelecionado);
		}
		else{
			objDivItemAutoCompletar.className = strClassDivItem;
		}
		objDivAutoCompletar.appendChild(objDivItemAutoCompletar);
		objDivItemAutoCompletar.innerHTML = strNomAutoCompletar;
		
		// criando eventos nos itens divs
		objDivItemAutoCompletar.onmouseover = function()
		{
			this.className = strClassDivSelecionado;
		}
		objDivItemAutoCompletar.onmouseout = function()
		{
			this.className = strClassDivItem;
		}

		objDivItemAutoCompletar.objRetornoAjax = objAjaxRetorno;
		defineOnClickAutoCompletar(this,objAutoCompletar,strMetodoAcaoSelecionado,arrItensAjax);

		// caso exista apenas 1 elemento ja preenche o valor
		if(arrRetorno.length == 1)
		{
			selecionarItemAutoCompletar(objDivItemAutoCompletar,objAutoCompletar,strMetodoAcaoSelecionado,arrItensAjax)
		}
	}
}
function defineOnClickAutoCompletar(objDivAutoCompletar,objAutoCompletar,strMetodoAcaoSelecionado,arrItemSelecionado)
{
		objDivItemAutoCompletar.onclick = function()
		{						
			selecionarItemAutoCompletar(this,objAutoCompletar,strMetodoAcaoSelecionado,arrItemSelecionado)
		}
}

function selecionarItemAutoCompletar(objDivItemAutoCompletar,objAutoCompletar,strMetodoAcaoSelecionado,arrItensAjax)
{
	objAutoCompletar.value  = objDivItemAutoCompletar.innerHTML;	
	strNomCampo = objDivItemAutoCompletar.id;
	arrItemCodAutoCompletar = strNomCampo.split('_');
	strValor = arrItemCodAutoCompletar[1];
	objHidden = document.getElementById("hidAutoCompletarCodigo_"+objHidCodigo.name+"_"+strValor);
	objHidCodigo.value = objHidden.value;
	
	objAutoCompletar.arrItemSelecionado = arrItensAjax;
	objDivAutoCompletar.style.visibility = 'hidden'
	objDivAutoCompletar.style.display = 'none';		
	if (strMetodoAcaoSelecionado)
	{
		eval(strMetodoAcaoSelecionado);
	}
}


/************************************************************************************************/
/**
* Eval executado no escopo global
* Adaptado de: http://www.maubi.net/~waterson/blog/OpensocialReference.js.txt
*/
var objGlobalContext = this
function globalEval(a)
{
    if(objGlobalContext.execScript) 
    {
        objGlobalContext.execScript(a,"JavaScript")
    }
    else if(objGlobalContext.eval) 
	 {
	    objGlobalContext.eval(a)
	 }
         else 
	 {
            var b = objGlobalContext.document,c = b.createElement("script")
            c.type = "text/javascript"
            c.defer = false
            c.text = a
            b.body.appendChild(c)
            b.body.removeChild(c)
        }
}
/**
* Roda scripts que se encontram dentro de um código HTML
* necessario para rodar os scripts que são colocados dentro de um innerHTML
* Os scripts que são executados aqui estariam no escopo da funcao 
(ou seja, se for criado uma variaval var x; esta variavel nao será visivel fora da funcao)
*/
function rodaScript(strHtml,bolEscopoGlobal) {
 // RegExp from prototype.sonio.net
 var ScriptFragment = '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)'; 
 var match = new RegExp(ScriptFragment,'img');
 var scripts  = strHtml.match(match);

 if(scripts) {
	       var js = '';
	       for(var s = 0; s < scripts.length; s++) {
		       var match = new RegExp(ScriptFragment, 'im');
		       js += scripts[s].match(match)[1];
	       }
	       var strSearch = '(["])(?:\\\\?[\\s\\S])*?\\1';
	       var objSearch = new RegExp(strSearch, 'gm');
		   
	           var objMatch = js.match(objSearch);
		   
		   if (objMatch != null)
		   {
			   for (i=0; i < objMatch.length; i++)
			   {
				strText = objMatch[i];
				strText = strText.replace(/\n/g, '\\\\n');
				js = js.replace(objMatch[i], strText);
			   }
		   }
		   		   
		   if(bolEscopoGlobal)
		   {
			   globalEval(js);
		   }else
		   {
			   eval(js);
		   }
		   var objScript = document.createElement("script");
		   var arrScripts =  document.getElementsByTagName('script');
		   for(var intI=0;intI<arrScripts.length;intI++)
		   {
		   		var strSrc = arrScripts[intI].src;
		   		var arrSrc = strSrc.split('/');
		   		strSrc = '';
		   		for(var intJ=3; intJ<arrSrc.length;intJ++)
		   		{
		   			strSrc += arrSrc[intJ];
		   		}			   			   	
		   		if(strSrc == 'phpxmlscriptstemptemp.js' )
		   		{
		   			document.getElementsByTagName('head')[0].removeChild(arrScripts[intI]);		   			
		   			break;
		   		}
		   }
		   document.getElementsByTagName('head')[0].appendChild(objScript);
		   objScript.src = '/phpxml/scripts/temp/temp.js';
       }
}

/************* FUNCOES JANELA AJAX ************/

//movimenta mouse
document.onmousemove = mouseMoveAjax;
document.onmouseup   = mouseUpAjax;

//objeto drag
var objJanelaDrag = null;
//objeto posicao elemento
var mouseOffset = null;

function janelaAjax(strEndereco,strParametros)
{
	// Criando objAjaxRequest
	var objAjax = new AjaxRequest("POST",strEndereco,strParametros,null,'exibirJanelaAjax(objRetornoAjax)');
}

function exibirJanelaAjax(objRetornoAjax)
{
	//alert('oba oba');
	var objJanelaAjax = document.createElement('div');
	var objJanelaAjax_Titulo = document.createElement('div');
	objJanelaAjax_Titulo_Fechar = document.createElement('div');
	objJanelaAjax_Titulo_Mover = document.createElement('div');
	objJanelaAjax_Titulo_Separador = document.createElement('div');
	var objJanelaAjax_Conteudo = document.createElement('div');
	
	document.documentElement.appendChild(objJanelaAjax);
	objJanelaAjax.appendChild(objJanelaAjax_Titulo);
	objJanelaAjax_Titulo.appendChild(objJanelaAjax_Titulo_Fechar);
	objJanelaAjax_Titulo.appendChild(objJanelaAjax_Titulo_Separador);
	objJanelaAjax_Titulo.appendChild(objJanelaAjax_Titulo_Mover);
	objJanelaAjax.appendChild(objJanelaAjax_Conteudo);
	
	//titulo
	objJanelaAjax_Titulo_Mover.innerHTML = 'MOVER'
	objJanelaAjax_Titulo_Separador.innerHTML = '|'
	objJanelaAjax_Titulo_Fechar.innerHTML = 'FECHAR'
	objJanelaAjax_Titulo.className = 'tituloJanelaAjax';
	objJanelaAjax_Titulo_Mover.className = 'tituloMoverJanelaAjax';
	objJanelaAjax_Titulo_Separador.className = 'tituloSeparadorJanelaAjax';
	objJanelaAjax_Titulo_Fechar.className = 'tituloFecharJanelaAjax';
	
		objJanelaAjax_Titulo_Mover.onmousedown = function(ev){
		objJanelaDrag = this.parentNode.parentNode;
		mouseOffset = getMouseOffset(this.parentNode,ev);
		return false;
	}
	
	objJanelaAjax_Titulo_Fechar.onclick = function(ev){
		this.parentNode.parentNode.style.display = 'none';
		return false;	
	}
	
	//conteudo
	objJanelaAjax_Conteudo.className = 'conteudoJanelaAjax';
	objJanelaAjax_Conteudo.innerHTML = objRetornoAjax.getStringRetorno();
	
	//janela
	objJanelaAjax.className = 'janelaAjax';	
	objJanelaAjax.style.top = ((document.body.clientHeight+document.body.scrollTop)/2)-(objJanelaAjax.clientHeight/2)+'px';
	objJanelaAjax.style.zIndex = '1'
}

function mouseUpAjax(ev)
{
	objJanelaDrag = null;
}

function mouseMoveAjax(ev){
	ev           = ev || window.event;
	var mousePos = mouseCoords(ev);
	
	if(objJanelaDrag)
	{
		objJanelaDrag.style.position = 'absolute';
		objJanelaDrag.style.display = 'block';
		objJanelaDrag.style.top      = mousePos.y - mouseOffset.y;
		objJanelaDrag.style.left     = mousePos.x - mouseOffset.x;
		return false;
	}
}
/*************************************************************************************************/


/************************** ACESSA UM ENDERECO E RETORNA CONTEUDO *******************************/

//chama uma tela (endereco) e nao uma acao
function retornarCodigoHtmlAjax(strEndereco,arrParametros,strElementoRetorno,strMetodoCarregando,strMetodoAposExecucao,bolRodarScripts,bolRemoverForm)
{
	// convertendo informações para o padrao URI
	//arrParametros = retirarEspeciaisHtml(arrParametros);

	//converte os parametros
	var objBase64 = new Base64();
	if (is_array(arrParametros))
	{
		var strParametros = converterArrayJsPhp(arrParametros, true);
	}
	else
	{
		var strParametros = arrParametros;
	}
	strParametros = objBase64.encode(strParametros);
	strParametros = "strParametros="+strParametros; 
	
	retornarHtmlAjax(strEndereco,strParametros,strElementoRetorno,strMetodoCarregando,strMetodoAposExecucao,bolRodarScripts,bolRemoverForm);
	
}

function retornarHtmlAjax(strEndereco,strParametros,strElementoRetorno,strMetodoCarregando,strMetodoAposExecucao,bolRodarScripts,bolRemoverForm)
{
	// Criando objAjaxRequest
	var objAjax = new AjaxRequest("POST",strEndereco,strParametros,strMetodoCarregando,'retornarHtmlAjax_retorno(objRetornoAjax,"'+strElementoRetorno+'","'+strMetodoAposExecucao+'",'+bolRodarScripts+','+bolRemoverForm+')');
}

function retornarHtmlAjax_retorno(objRetornoAjax,strElementoRetorno,strMetodoAposExecucao,bolRodarScripts,bolRemoverForm)
{
	var strRetorno = objRetornoAjax.getStringRetorno();
	if(bolRemoverForm)
	{
		//remove qualquer tag <form ...> existente
		strRetorno = trocarTodosExpressao(strRetorno,"<form[0-9a-zA-Z()'\"= ]*>","");
		//remove </form>
		strRetorno =  trocarTodos(strRetorno,"</form>","");
	}
	if(bolRodarScripts)
	{
		rodaScript(strRetorno);
	}
	
	//document.write(strRetorno);
	//alert(strRetorno);
	$(strElementoRetorno).innerHTML = strRetorno;
	if(strMetodoAposExecucao)
	{
		eval(strMetodoAposExecucao);
	}

	
}
/*************************************************************************************************/



/************************** GERA TABELA AJAX *******************************/

/**
* Metodo de paginacao de tabela ajax
* objSubmit - botao da paginacao que executa submit
*/
function gerarTabelaAjax(objSubmit,strIdTabela,strSiglaTela, strCodigoTela)
{		 	
	var arrParametros = new Array();
	arrParametros["INDGERAHTML"] = "S";	
	//converte os parametros
	var objBase64 = new Base64();
	var strParametros = converterArrayJsPhp(arrParametros, true);
	strParametros = objBase64.encode(strParametros);
	var strParametro = "paginacao=S&strIdTabela="+strIdTabela+"&strSiglaTela="+strSiglaTela+"&strCodigoTela="+strCodigoTela+"&"+objSubmit.name+"="+objSubmit.value+"&strParametros="+strParametros;	
	var objAjax = new AjaxRequest("POST","/phpxml/classes/ajax/class.RequisicaoAjax.php", strParametro,"","preencherTabela(objRetornoAjax)","");				
}

/**
* Metodo de paginacao de tabela ajax
*/
function preencherTabela(objRetornoAjax)
{	
	arrRetorno = objRetornoAjax.getArrayRetorno();	
	if(arrRetorno["IDTABELA"]!=undefined)
	{		
		rodaScript(objRetornoAjax.getStringRetorno());		
		$(arrRetorno["IDTABELA"]).parentNode.innerHTML = objRetornoAjax.getStringRetorno();		
	}
}

/**
* Metodo gerar tabela ajax
*/
function preencherTabelaAjax(strIdTabela,strSiglaTela, strCodigoTela,arrParametros,strMetodoAposExecucao,strComponente,strClasse,strMetodo,strMetodoCarregando,strMetodoErro,strFiltroTabela)
{
	// convertendo informações para o padrao URI
	//arrParametros = retirarEspeciaisHtml(arrParametros);
	arrParametros["INDGERAHTML"] = "S";
	
	//converte os parametros
	var objBase64 = new Base64();
	var strParametros = converterArrayJsPhp(arrParametros, true);
	strParametros = objBase64.encode(strParametros);

	if (!strFiltroTabela)
	{
		strFiltroTabela = "";
	}
	
	// Criando objAjaxRequest
	if(!strComponente)
	{
		var objAjax = new AjaxRequest("POST","/phpxml/classes/ajax/class.RequisicaoAjax.php", "strIdTabela="+strIdTabela+"&strSiglaTela="+strSiglaTela+"&strCodigoTela="+strCodigoTela+"&strParametros="+strParametros+"&strFiltroTabela="+strFiltroTabela,strMetodoCarregando,strMetodoAposExecucao,strMetodoErro);		
	}
	else
	{
		var objAjax = new AjaxRequest("POST","/phpxml/classes/ajax/class.RequisicaoAjax.php", "strIdTabela="+strIdTabela+"&strSiglaTela="+strSiglaTela+"&strCodigoTela="+strCodigoTela+"&strComponente="+strComponente+"&strClasse="+strClasse+"&strMetodo="+strMetodo+"&strFiltroTabela="+strFiltroTabela+"&strParametros="+strParametros,strMetodoCarregando,strMetodoAposExecucao,strMetodoErro);	
	}		
}

function preencherTabelaAjaxElemento(strElementoRetorno,strIdTabela,strSiglaTela, strCodigoTela,arrParametros,strFiltro)
{
	preencherTabelaAjax(strIdTabela,strSiglaTela, strCodigoTela,arrParametros,'preencherTabelaAjaxElemento_retorno(objRetornoAjax,"'+strElementoRetorno+'")','','','','','',strFiltro);
}

function preencherTabelaAjaxElemento_retorno(objRetornoAjax,strElementoRetorno)
{
	retornarHtmlAjax_retorno(objRetornoAjax,strElementoRetorno);
}



/*************************************************************************************************/



/**
* Metodo que busca uma acao e retorna um determinado valor a um determinado campo
*/
function preencherValorCampoConsultaAjax(strIdCampo,strNomeCampoArray,arrParametros,strComponente,strClasse,strMetodo,strMetodoCarregando)
{
	//apenas executar xmls
	arrParametros[PROPRIEDADE_AJAX_INDICADOR_PREENCHIMENTO_COMBO] = 'S';
	
	requisicaoMetodoAjax(strComponente,strClasse,strMetodo,arrParametros,strMetodoCarregando,'preencherValorCampoConsultaAjax_retorno(objRetornoAjax,"'+strIdCampo+'","'+strNomeCampoArray+'")');
}

function preencherValorCampoConsultaAjax_retorno(objRetornoAjax,strIdCampo,strNomeCampo)
{
	arrDados = objRetornoAjax.getArrayRetorno();
	if (arrDados.length>0)
	{
		$(strIdCampo).value = arrDados[0][strNomeCampo];
	}
}
