//Tenta criar o objeto xmlHTTP
try{
    xmlhttp = new XMLHttpRequest();
}catch(ee){
    try{
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    }catch(e){
        try{
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }catch(E){
            xmlhttp = false;
        }
    }
}

//Fila de conexões
fila=[]
ifila=0

//Carrega via XMLHTTP a url recebida e coloca seu valor
//no objeto com o id recebido
function ajax(url, id, metodo, prioridade, atualiza){
    
    /*
    Para facilitar a programação, as variáveis método, atualiza e prioridade não são obrigatórias.
	
	URL = pagina com as variáveis que serão passadas para a pagina de ação (mesmo que decida utilizar o 
	método post, estas variavéis devem ser passadas na url);
	
	ID = nome do DIV que deverá receber a pagina de ação;
	
	METODO = define se as variáveis devem ser passadas por GET ou POST. Deafult true;
	
	PRIORIDADE = se for igual a true, várias requisições podem ser feitas ao mesmo tempo, se for marcado como false,
	o brownser deve parar de executar qualquer ação (isso vale para comandos javascript) até que receba a página 
	de ação. Default true;
	
	ATUALIZA = Define se o brownser deve carregar a pagina de ação em todas as solicitações, ou pode simplesmente 
	utilizar o seu cache se a pagina for solicitada uma segunda vez. True (default) obriga que a página seja 
	carregada sempre, false permite a utilização do cache do brownser.    
    */
	
    // define os valores default para as variáveis que não são obrigatórias
    if(metodo == undefined){var metodo = 'GET';}
    if(prioridade == undefined){var prioridade = true;}
    if(atualiza == undefined){var atualiza = true;}
    
    // Caso a página deva ser carrega sempre, será inserida uma varivel ramdonica
    if(atualiza == true){
    	url = url +'&hora=' + Math.random(); //Essa variavel randomica é necessária, pois em alguns brownser o conteudo não esta sendo atualizado
    }
    
    // Se for o metodo POST as variavéis devem ser passadas separadamente
    if(metodo == 'POST'){
    	var posicao = url.indexOf('?') + 1;
		var variaveis = url.substring(posicao,url.length);
		url = url.substring(0,posicao-1);
    }else{
    	var variaveis = 'null';
    }
        
    //Carregando...
    document.getElementById(id).innerHTML="<img src='encomendas/prazo/img/carregando.gif' width='16' height='16'>&nbsp;Carregando..."
	//Adiciona à fila
    fila[fila.length]=[id,url]
        
    //Se não há conexões pendentes, executa
    if((ifila+1)==fila.length)ajaxRun(metodo, prioridade, variaveis)
}

//Executa a próxima conexão da fila
function ajaxRun(metodo, prioridade, variaveis){
    //Abre a conexão
    xmlhttp.open(metodo,fila[ifila][1],prioridade);
    if(metodo == 'POST'){
	    xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    }   
    //Função para tratamento do retorno
    xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState==4){
            //Mostra o HTML recebido
            retorno=unescape(xmlhttp.responseText.replace(/\+/g," "))
            document.getElementById(fila[ifila][0]).innerHTML=retorno
            //Roda o próximo
            ifila++
            if(ifila<fila.length)setTimeout("ajaxRun()",20)
        }
    }
    //Executa
    xmlhttp.send(variaveis)
}
