
	/***********************************************
	
	SCRIPT AJAX 
	
	************************************************/
	
	//VARIÁVEIS GLOBAIS
	
	//Objeto Ajax
	var Ajax = false;
	//Modo de execucao ajax
	var async_ajax = true;
	//Variavel de conteudo Ajax TXT
	var objTXT = "";
	//Div de carregamento do Ajax
	var divTxtAjax = 'divTxtRodape';
	//Icone de carregamento
	var icoAguarde = '<img src="../imagens/ico_aguarde.gif" style="margin-left:3px; margin-top:5px;_margin-top:3px;">';
	//Icone de erro
	var icoErro = '<img src="../imagens/ico_aguarde_erro.gif" style="margin-left:2px;">';
	
	//Fila de conexoes
	var fila = [];
	var ifila = 0;	
	
	
	/***********************************************
	
	FUNÇÕES DE CRIAÇÃO DO OBJETO AJAX E TRATAMENTO 
	DO RETORNO DE DADOS
	
	************************************************/
	
	//Instanciamento do objeto ajax
	function AjaxRequest() {

		if(window.XMLHttpRequest) {
			Ajax = new XMLHttpRequest();
		}
		else if(window.ActiveXObject) {
			try {
				Ajax = new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch (e) {
				try {
					Ajax = new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch (e) {}
			}
		}
	}
	
	//Criação da fila de requisições
	function filaAjax(url,id_div_result,metodo,modo,parametros,funcao){
		
		//define o modo padrão (TXT)
		//if(typeof(modo)=="undefined") modo = 'TXT';
		//define o metodo padrão (GET)
		//if(typeof(metodo)=="undefined") modo = 'GET';				
		
		ocultaExibeDivProcessando('E');
		
		//limpaDiv('divJanelaAvisoConteudo');
		//limpaDiv('divJanelaPadraoConteudo');
		//limpaDiv('divJanelaPequenaConteudo');
		
		//document.getElementById('divProcessando').style.display="block";	
		//document.getElementById(divTxtAjax).innerHTML = icoAguarde;		
		//Adiciona a fila
		fila[fila.length]=[url,id_div_result,metodo,modo,parametros,funcao]
		//Se nao ha conexoes pendentes, executa
		if((ifila+1) == fila.length) 
			if(async_ajax === true) rodaAjax();
			else if(async_ajax === false) rodaAjaxSync();
	
	}
	

	//FUNÇÃO QUE ABRE UMA PÁGINA AJAX ASSINCRONO POR GET OU POST - MODO TXT OU XML
	function rodaAjax() {

		//define o assincronismo padrão (TRUE)
		/*if(typeof(fila[ifila][6])=="undefined") async_ajax = true;
		else async_ajax = false;*/
		
		//alert(fila[ifila][6]);
		
		//define o div padrão de conteudo
		//if(typeof(id_div_result)=="undefined") id_div_result = divResult;
		
		//url = antiCacheRand(fila[ifila][0]);
		url = fila[ifila][0];
		
		AjaxRequest();
		if(!Ajax) {
			document.getElementById(divTxtAjax).innerHTML = icoErro;
			return;
		}
		
		Ajax.onreadystatechange = function(){

			if(Ajax.readyState == 1) {
				
				ocultaExibeDivProcessando('E');
			}
			
			if(Ajax.readyState == 4) {
				if(Ajax.status == 200) {
			
					if(fila[ifila][2] == 'GET') {	
						//MODO TEXTO
						if(fila[ifila][3] == 'TXT') {
							
							if((fila[ifila][1]) && (fila[ifila][1] != 'undefined')) {
								//VERIFICA SE O RESULTADO SERÁ JOGADO EM DIV OU INPUT - DEFINIDO PELO '.value'
								if(fila[ifila][1].indexOf(".value") > 0) {
									var div_txt = fila[ifila][1].split('.value');
									document.getElementById(div_txt[0]).value = Ajax.responseText;
									
								}
								
								else if((fila[ifila][1] == 'divMsgAviso')) {
									

																	
									abrePagina('sys_view','controle=FLG_EXIBE_JANELA_ALERTA&div_bloqueio=divBloqueio2&msg_alerta='+Ajax.responseText,'divJanelaAvisoConteudo');
									ocultaExibeObj('divJanelaAviso');
									ocultaExibeObj('divBloqueio2');									
								}								
							
								else {
									document.getElementById(fila[ifila][1]).innerHTML = Ajax.responseText;
									
									
									if(fila[ifila][1] == 'divJanelaPadraoConteudo') {
										ocultaExibeObj('divJanelaPadrao');
										ocultaExibeObj('divBloqueio');
									}
									if(fila[ifila][1] == 'divJanelaPequenaConteudo') {
										ocultaExibeObj('divJanelaPequena');
										ocultaExibeObj('divBloqueio');
									}
									if(fila[ifila][1] == 'divJanelaAvisoConteudo') {
										
																		
										ocultaExibeObj('divJanelaAviso');
										//if(document.getElementById('divBloqueio').style.display == 'block') {
											//ocultaExibeObj('divBloqueio2');
										//}
										//else ocultaExibeObj('divBloqueio');
										ocultaExibeObj('divBloqueio2');
									}
						
								}
									
							}
							else {
								//div de result nao informado
								objTXT = ""+Ajax.responseText;
								//alert(objTXT);
							}
						}
						//MODO DE RETORNO DE VALOR
						else if(fila[ifila][3] == 'RESULT') {
							
							objTXT = ""+Ajax.responseText;
							//alert(objTXT);
							//testeXML(Ajax.responseXML);
						}						
						//MODO XML
						else if(fila[ifila][3] == 'XML') {
							objXML = Ajax.responseXML;
							//testeXML(Ajax.responseXML);
						}
					}
					else if(fila[ifila][2] == 'POST') {
						
						if(!fila[ifila][4]) alert('parametros do post não definidos');	
						
						if((fila[ifila][1]) && (fila[ifila][1] != 'undefined')) {
							document.getElementById(fila[ifila][1]).innerHTML = Ajax.responseText;
							
						}
						else {						
							objTXT = ""+Ajax.responseText;
						}
								
					}
					
					//Executa função pós-chamada ajax
					if(typeof(fila[ifila][5]) != 'undefined' && fila[ifila][5]) {
						
						var funcao = fila[ifila][5];
						
						//NÃO EXECUTA FUNCAO DE RETORNO CHAMADA INTERNAMENTE - FLAG = '@'
						if(funcao.charAt(0) != '@') {
							while (funcao.indexOf('#') != -1) {
								funcao = funcao.replace('#',"'");
							}							
						}
						else funcao = funcao.substr(1,funcao.length);

						eval(funcao);
					}
							
					ocultaExibeDivProcessando('O');
					//async_ajax = true;
					
					//Roda o proximo da fila
					ifila++;
					if(ifila < fila.length){
						
						setTimeout("rodaAjax()",20)		
					}					
				}
			}
		}

		Ajax.open(fila[ifila][2], url, true);
		if(fila[ifila][2] == 'GET') {
			Ajax.setRequestHeader("Content-Type", "text/html; charset=ISO-8859-1");
			Ajax.send(null);
		}
		else if(fila[ifila][2] == 'POST') {
			Ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			Ajax.send(fila[ifila][4]);			
		}	
		
		
		//document.getElementById(id_div_result).innerHTML = '&nbsp;';		
		//document.getElementById(divTxtAjax).innerHTML = icoAguarde;
		//exibe a dica do sistema ao carregar
		//document.getElementById(divEsperaSistema).style.display="block";

	}	

	//FUNCAO QUE REMOVE O CACHE DE REQUISIÇÕES RECEM-ENVIADAS
	function antiCacheRand(aurl) {
    	var dt = new Date();
    	if(aurl.indexOf("?")>=0){// já tem parametros
        	return aurl + "&" + encodeURI(Math.random() + "_" + dt.getTime());
    	}
		else { 
		return aurl + "?" + encodeURI(Math.random() + "_" + dt.getTime());}
	}
	

	/***********************************************
	
	FUNÇÕES DE ENVIO DE DADOS AO OBJETO AJAX
	
	************************************************/

	//FUNÇÃO QUE ABRE UMA PAGINA AJAX
	function abrePagina(arquivo,GET,id_div_result,funcao){
		
		//if(id_div_result.indexOf('divJanela') != -1
		
		var url; 
		url = arquivo+'.php?'+GET;
		filaAjax(url,id_div_result,'GET','TXT',null,funcao);
	}

	//FUNÇÃO QUE ABRE UMA PAGINA AJAX COM VERIFICAÇÃO DE RETORNO
	function abrePaginaRetorno(arquivo,GET,id_div_result,status_retorno,funcao){
		
		//if(id_div_result.indexOf('divJanela') != -1
		
		var url; 
		url = arquivo+'.php?'+GET;
		//filaAjax(url,id_div_result,'GET','TXT',null,funcao);
		
		filaAjax(url+'&verifica_retorno_ajax=1',null,'GET','TXT',null,'@verificaRetorno(\''+url+'\',\''+id_div_result+'\',\''+status_retorno+'\',\'\',\'\',\''+funcao+'\')');
	}


	//FUNÇÃO QUE ENVIA DADOS DO FORMULÁRIO NA PÁGINA BASE E TRATA RETORNO
	function enviaForm(arquivo,GET,id_div_janela,id_form,id_div_alerta,status_retorno,funcao) {
		
		if(typeof(status_retorno) == 'undefined') alert('status de retorno não definido');

		var url = arquivo+'.php?'+GET;
		var parametros = retornaParamsForm(document.getElementById(id_form));
			
		filaAjax(url,null,'POST','TXT',parametros,'@verificaRetorno(\'\',\'\',\''+status_retorno+'\',\''+id_div_janela+'\',\''+id_div_alerta+'\',\''+funcao+'\')');
	
	}

	
	//CAPTURA OS PARAMETROS DO FORMULARIO
	function retornaParamsForm(obj){ 

		var valores = new Array(); 
		var indices = new Array(); 
		var parametros = ""; 
		for(var i = 0; i < obj.length; i++){ 
			if (obj.elements[i].type == "radio" || obj.elements[i].type == "checkbox"){
				if (obj.elements[i].checked == true) {
					indices[i] = obj.elements[i].id; 
					valores[i] = obj.elements[i].value; 
				}
			}
			else {
				indices[i] = obj.elements[i].id; 
				valores[i] = obj.elements[i].value.replaceAll('&','%(e)%');
			}
			if(i > 0 && i < obj.length){ 
				parametros += "&"; 
			} 
			parametros += indices[i] + '=' + valores[i]; 
		} 
		return parametros; 
	} 		
	
	/***********************************************
	
	FUNÇÕES DE TRATAMENTO DE ERRO E RETORNO DE 
	DADOS ENVIADOS PELAS FUNCOES DE REQUISICAO
	
	************************************************/

	function verificaRetorno(url,id_div_result,status_retorno,id_div_janela,id_div_alerta,funcao) {
		
		//var retorno = objTXT.split('*');
		var exibe_msg_janela_alerta = 0;
		
		//VERIFICA SE O RETORNO DA REQUISICAO É A ESPERADA CONFORME FLAG DE STATUS_RETORNO
		if(objTXT.trim() == status_retorno) {
			
			//SE FOI INFORMADO O ID DA JANELA ENTAO FECHA ELA - METODO enviaForm
			if(id_div_janela && typeof(id_div_janela) != 'undefined') {
				
				ocultaExibeObj('divBloqueio');
				ocultaExibeObj(id_div_janela);
			
			}
			//EXECUTA FUNCAO PÓS-CHAMADO CASO O RETORNO SEJA VÁLIDO
			if(typeof(funcao) != 'undefined') {
				
				var func = funcao;
				
				while (func.indexOf('#') != -1) {
					func = func.replace('#',"'");
					
				}

				eval(func);
			}
			
			//DEFINICAO DE RETORNO PARA FUNCAO abrePaginaRetorno
			if(url && typeof(url) != 'undefined') {
				
				if(id_div_result && typeof(id_div_result) != 'undefined') {
					filaAjax(url,id_div_result,'GET','TXT',null,funcao);	
				}
				else {
					alert('div_result não informado');
				}
				
			}

		}
		//SE O RETORNO NÃO É O ESPERADO, ENTAO EMITE MENSAGEM DE AVISO
		else {
			
			//DEFINICAO DE RETORNO PARA FUNCAO abrePaginaRetorno
			if(url && typeof(url) != 'undefined') {
				
				exibe_msg_janela_alerta = 1;
				
			}			
			//EMITE MENSAGEM DE AVISO NO DIV DE ALERTA INDICADO - //METODO enviaForm
			else if((id_div_alerta)&&(id_div_alerta != 'undefined')) {
				
				document.getElementById(id_div_alerta).innerHTML = objTXT;
				
			}
			//SE NAO FOI INDICADO UM DIV DE ALERTA, ENTAO FAZ COM A JANELA DE MSG DE AVISO
			else {
				exibe_msg_janela_alerta = 1;
			}
		}
		
		if(exibe_msg_janela_alerta == 1) {		
		
			//abrePagina('sys_view','controle=FLG_EXIBE_JANELA_ALERTA&div_bloqueio=divBloqueio2&msg_alerta='+objTXT,'divJanelaAvisoConteudo');
			document.getElementById('divJanelaAvisoConteudo').innerHTML = '<div align="center" class="divJanelaAviso" style="background-color:#D4D0C8; height:100"><br><p><div style="height:40px;overflow:auto;width:380px;font-size:11px"><img src="../imagens/ico_aguarde_erro.gif">'+objTXT+'</div></p><div style="width:70"><a class="btnFormJanela" href="javascript:ocultaExibeObj(\'divJanelaAviso\');ocultaExibeObj(\'divBloqueio2\');">OK</a></div></div>';				
			
			//VERIFICAR EXIBICAO DAS JANELAS
			
			ocultaExibeObj('divJanelaAviso');
			ocultaExibeObj('divBloqueio2');
			
		}
	
	}
	
	/***********************************************
	
	FUNÇÕES DE MANIPULAÇÃO DE OBJETOS 
	
	************************************************/


	function ocultaExibeDivProcessando(param) {
		if(param == 'E') {
			//document.getElementById('divProcessando').style.display="block";	
			document.getElementById(divTxtAjax).innerHTML = icoAguarde;							
		}
		else if(param=='O') {
			//document.getElementById('divProcessando').style.display="none";	
			document.getElementById(divTxtAjax).innerHTML = '&nbsp;';						
		}
	}
	
	function ocultaExibeObj(nome,x) {
		
		var obj = document.getElementById(nome);
		
		/*if(nome.indexOf('divBloqueio')!=0){
			
			var selects = document.getElementsByTagName('select');
			
			for(i=0;i<selects.length;i++){
				selects[i].style.display = obj.style.display;
			}
		}*/		
		
		if(typeof(x)!="undefined")  {

			if(x == 'o') {

				if(obj.style.visibility) obj.style.visibility="hidden";
				else obj.style.display="none";
				
			}
			else if(x == 'e') {
				
				if(obj.style.visibility) obj.style.visibility="visible";
				else obj.style.display="block";
				
			}
		}
		else {
			if(obj.style.display) {
				if (obj.style.display=="block") {
					obj.style.display="none";
				}
				else {
					if (obj.style.display=="none") {
						obj.style.display="block";
					}
				}
				
			}
			else if(obj.style.visibility) {
				if(obj.style.visibility=="visible") {
					obj.style.visibility="hidden";
				}
				else if(obj.style.visibility=="hidden") {
					obj.style.visibility="visible";
				}
			}
		}
	}
	


	String.prototype.trim = function() {
		return this.replace(/^\s+|\s+$/g,'') ;
	}
	
	String.prototype.replaceAll = function(de, para){
		var str = this;
		var pos = str.indexOf(de);
		while (pos > -1){
			str = str.replace(de, para);
			pos = str.indexOf(de);
		}
		return (str);
	}	

	

	
	

