/* Criando uma lista com os objetos XMLHTTP encontrados no IE */
var xmlHttpRequest_IE = new Array("Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.5.0","Msxml2.XMLHTTP.4.0",
																	"Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP");

	/* Fila de requisições */
	var Fila = [];
	var iFila = 0;
	/* Variável que define a função a ser executada após o retorno do objeto ajax */
	var funcao = "";
	/* Variável que recebe a resposta no formato XML */
	var xmlObj = null;

/* Função que cria o objeto XmlHttpRequest procurando a melhor versão no IE */
function criaXmlHttpRequest() {
	/* Variável de instância do objeto */
	var oXmlHttp = null;
	
	if (window.XMLHttpRequest != null) {
		/* Criando o objeto para outros navegadores */
		oXmlHttp = new window.XMLHttpRequest();
	} else if (window.ActiveXObject != null) {
		/* Criando o objeto para o InternetExplorer */
		var bCriado	= false;
		for (var i=0; i<xmlHttpRequest_IE.length && !bCriado; i++) {
			/* Buscando pela versão mais recente */
			try {
				/* Tentando criar o objeto da lista */
				oXmlHttp = new ActiveXObject(xmlHttpRequest_IE[i]);
				bCriado = true;
			} catch(ex) {}
		}
	}
	
	/* Tratamento de erro caso não encontre nenhum objeto */
	if (oXmlHttp == null) alert('Não foi possível criar o objeto XmlHttpRequest!');
	
	/* retornando o objeto, mesmo que não criado */
	return oXmlHttp;
}

/* Executa a próxima conexão da fila */
function ajaxRun(){

		/* Objeto XmlHttpRequest de solicitações */
		var xmlhttp = criaXmlHttpRequest();

		/* Configurando o método */
		if ((Fila[iFila][3] != "GET") && (Fila[iFila][3] != "POST") && (Fila[iFila][3] != "REQUEST") && (Fila[iFila][3] != "FILE")) {
			Fila[iFila][3] = "GET";
		}
		
		/* Configurando a url da requisição */
		var requisicao = "controler.php";
		
		/* Configurando valores de postagem */
		var post = null;
		if (Fila[iFila][3] == "POST") {
			/* POST */
			var now = new Date();
			post = "reqNum="+now.getMilliseconds()+"&pg="+Fila[iFila][1]+"&"+Fila[iFila][2];
		} else {
			/* GET e REQUEST */
			var now = new Date();
			requisicao += "?reqNum="+now.getMilliseconds()+"&pg="+Fila[iFila][1]+"&"+Fila[iFila][2];
		}

		/* Abre a conexão */
    xmlhttp.open(String(Fila[iFila][3]), requisicao, true);
		xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

    /* Função para tratamento do retorno */
    xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState==4){
						/* Obtendo a reposta em formato XML */
						xmlObj = null;
						if (xmlhttp.responseXML) { xmlObj = xmlhttp.responseXML; }
            /* Decodificando o documento recebido */
            retorno = unescape(xmlhttp.responseText.replace(/\+/g," "));
						/* Exibindo a resposta caso o destino seja informado */
						if (Fila[iFila][0] != "") {
	            document.getElementById(Fila[iFila][0]).innerHTML = retorno;
						}
						/* Executando a função */
						if (funcao != "") { 
							/* Trocando o valor #resposta da função pela resposta do objeto xmlHttpRequest */
							funcao = String(funcao).replace("#", "'"+retorno+"'");
							setTimeout(funcao, 100); 
						}
            /* Roda o próximo */
            iFila++;
            if(iFila < Fila.length) setTimeout("ajaxRun()", 20);
        }
    }
    /* Executa */
    xmlhttp.send(post);
}

/* Insere a solicitação na fila de solicitações */
function carrega_url(url, params, destino, metodo) {
	/* Configurando parâmetros */
	if (destino == null) { destino = ""; }
	if (metodo == null) { metodo = "GET"; }	
	
	if (destino != "") {
		/* Limpando o DIV de resposta */
		var h = document.getElementById(destino).offsetHeight;
		var w = document.getElementById(destino).offsetWidth;
		document.getElementById(destino).innerHTML = "<div >Carregando...</div>";
	}

  /* Adicionando requisição à fila */
  Fila[Fila.length] = [destino, url, params, metodo];
  /* Se não há conexões pendentes, executa */
  if ((iFila + 1) == Fila.length) ajaxRun();
}



