/* **********************************************************************************************
 *									AJAX				   										*
 * **********************************************************************************************
 +																								+
 +	Contém funções para manipular a classe ajaxlib.js. Inclui funções para submeter formulário,	+
 +	manipular o carregamento de combo box (<select>) relacionadas, etc.							+								+
 +																								+
 ********************************************************************************************** */	

// OBS: Esse arquivo depende do ajaxlib.js para funcionar. 

var a; // variável global utilizada para instanciar a classe ajax.

/*  
  *	Função: fInstanciaAjax
  *	Descrição: Instancia a classe ajax .
  *	Argumentos:
  *		[obrigatório] sync : Boolean (true, false) - define se o tempo de execução da requisição será síncrono ou assíncrono.
  */
 function fInstanciaAjax(sync){
	a = new Ajax();			// instancia a classe ajax.
	a.set_async(sync); 		// tempo de execução assíncrono.
 }

/* 
  *	Função: fVarreForm
  *	Descrição: Varre um formulário, recupera os objetos e seus respectivos valores para submete-los.
  *	Argumentos:
  *		[obrigatório] idResultado : Atributo 'id' do elemento html que receberá o conteúdo resultante da requisição.
  *		[obrigatório] dsUrl : Endereço do arquivo de resultado com os nomes dos campos do formulário.
  *		[obrigatório] noForm : Nome do formulário que contem os campos.
  */
 function fVarreForm(idResultado,dsUrl,noForm){
		
	// monta lista de objetos do formulário para submit.
	a.set_receive_handler(
    	function(c) {
      		var o = document.getElementById(idResultado);
      		o.innerHTML = c;
    	}
    );
	
	a.set_method('POST'); 		// método de envio
	a.set_timeout(30); 			// timeout para o request
	a.send_all(dsUrl,noForm); 	// submete os objetos do formulário
}

function enviaGET(idResultado,dsUrl,method){
		
	// monta lista de objetos do formulário para submit.
	a.set_receive_handler(
    	function(c) {
      		var o = document.getElementById(idResultado);
      		o.innerHTML = c;
    	}
    );
	
	a.set_method(method); 		// método de envio
	a.set_timeout(30); 			// timeout para o request
	a.send(dsUrl); 	// envia a url
}

/* 
  * 	Função: fComboAjax
  * 	Descrição: Filtra o conteúdo de uma combo box utilizando ajax. Ao buscar o novo conteúdo, desabilita a combo e substitiu o texto do 1o. option por "carregando...".
  * 	Argumentos:
  *		[obrigatório] idResultado : String, valor do atributo id de um elemento html para descarregar a nova combo box.
  *		[obrigatório] dsUrl: String, endereço da página de ação.
  *		[obrigatório] noForm : String, nome do formulário.
  *		[obrigatório] idCombo : String, valor do atributo id do objeto select de um formulário html.
  *	 Exemplo de utilização:
  *	
  */
 function fComboAjax(idResultado,dsUrl,noForm,idCombo){
	document.getElementById(idCombo).disabled="true"; 					// Desabilita a combo box.
  	document.getElementById(idCombo).options[0].text="carregando..."; 	//  Substitiu o conteúdo do option pela mensagem 'carregando...'.
  	fInstanciaAjax(true); 												// instância a classe ajax com o tempo de execução assíncrono
	fVarreForm(idResultado,dsUrl,noForm); 								// varre o formulário e recupera os objetos e seus respectivos valores para envio a página de ação.
 }
 
/*
  *	Função: fVoltarAjax
  *	Descrição: Faz o redirecionamento de uma página passando parâmetros via método POST
  * 	Argumentos:
  *		[obrigatório] idResultado : String, valor do atributo id de um elemento html para descarregar a nova combo box.
  *		[obrigatório] dsUrl: String, endereço da página de ação.
  *		[obrigatório] noForm : String, nome do formulário.  
  */
 function fVoltarAjax(idResultado,dsUrl,noForm){
	fInstanciaAjax(true); 		// instância a classe ajax com o tempo de execução assíncrono
	fVarreForm(idResultado,dsUrl,noForm);  	// varre o formulário e recupera os objetos e seus respectivos valores para envio a página de ação
  }

/*
   *	Função: fExcluirAjax
   *	Descrição: Exclui uma linha de registro em uma listagem. 
   *	Argumentos:
   *		[obrigatório] idResultado : String, valor do atributo id de um elemento html para descarregar a nova combo box.
   *		[obrigatório] dsUrl: String, endereço da página de ação.
   *		[obrigatório] noForm : String, nome do formulário.  
   *		[obrigatório] idBtn: String, atributo 'id' do botão html de exclusão.  
   */
 function fExcluirAjax(idResultado,dsUrl,noForm,idBtn){
 	
	/* inicio : desabilita o botão de ação */
	vlBtn=document.getElementById(idBtn).value;
	document.getElementById(idBtn).disabled="true";
	document.getElementById(idBtn).value="Aguarde ...";
	/* fim : desabilita o botão de ação */	
		
  	fInstanciaAjax(true); 		// instância a classe ajax com o tempo de execução assíncrono
	fVarreForm(idResultado,dsUrl,noForm); 	// varre o formulário e recupera os objetos e seus respectivos valores para envio a página de ação
 }  
 
/*
  *	Função: fSubmeterAjax
  *	Descrição: Submete um formulário para uma página de ação utilizando AJAX (Método POST).
  *	Argumentos:
  *		[obrigatório] id  	 = atributo 'id' do <div> que receberá a resposta ajax.  
  *		[obrigatório] dsUrl  = endereço de ação do formulário  
  *		[obrigatório] noForm = nome do formulário que será submetido 
  *		[obrigatório] idBtn  = atributo 'id' do botão de ação do formulário a ser submetido.  
  *	Exemplo de uso:	
  *	
  */
 function fSubmeterAjax(idResultado,dsUrl,noForm,idBtn) {
	
	// inicio : desabilita o botão de ação, e mostra a mensagem de "Aguarde" no própio botão de ação. 
	vlBtn=document.getElementById(idBtn).value; // guarda o conteúdo do botão na variável vlBtn para quando a requisição for 'complete', restaurar o valor inicial do botão de ação.
	document.getElementById(idBtn).disabled="true";
	document.getElementById(idBtn).value="Aguarde ...";
	// fim.
		
  	fInstanciaAjax(true); 												// instância a classe ajax com o tempo de execução assíncrono
	fVarreForm(idResultado,dsUrl,noForm); 								// varre o formulário e recupera os objetos e seus respectivos valores para envio a página de ação	
	window.setInterval("fVerificaEstado('"+idBtn+"','"+vlBtn+"')",10);	// verifica o estado da requisição para habilitar o botão que fez a requisição
 }
 
 /*
  *	Função: fBuscarAjax
  *	Descrição: Acessa outra página via ajax.
  *	Argumentos:
  *		[obrigatório] id  	 = atributo 'id' do <div> que receberá a resposta ajax.  
  *		[obrigatório] dsUrl  = endereço de ação do formulário  
  *		[obrigatório] noForm = nome do formulário que será submetido 
  *	Exemplo de uso:	
  *	
  */
 function fBuscarAjax(idResultado,dsUrl,noForm) {
  	fInstanciaAjax(true); 				  // instância a classe ajax com o tempo de execução assíncrono
	fVarreForm(idResultado,dsUrl,noForm); // varre o formulário e recupera os objetos e seus respectivos valores para envio a página de ação	
 }
 
/* 
  *	Função: fVerificaEstado
  *	Descrição: Faz o controle de resposta ajax. Ex: estado 4 = Complete 
  *	Argumentos:
  *		[obrigatório] id  	 = String, atributo 'id' do <div> que receberá a resposta ajax.  
  *		[obrigatório] vlBtn  = String, conteúdo do botão de ação antes de ser desabilitado.
  */
 function fVerificaEstado(idBtn,vlBtn){
	if(a.get_ajax().readyState == 4){ 				// verifica se o estado da requisição foi completo.
		document.getElementById(idBtn).value=vlBtn; // restaura o valor inicial do botão de ação.
		document.getElementById(idBtn).disabled=""; // habilita o botão de ação.
	}
 }
 
 
 /*
  *
  * Descrição: Exibe imagem 'carregando' enquanto uma operação é efetuada;
  * Argumentos:
  *		[obrigatório] idLocal = String, atributo 'id' do objeto html que receberá a imagem 'carregando'.   
  *		[obrigatório] img = String, caminho da imagem 'carregando'.   
  */
  function fCarregando(idLocal,img){
  	document.getElementById(idLocal).innerHTML="<img src='"+img+"' />";
  }