// cria a fila
var fila=[];
var ifila=0;
var http_request = false;

setHTTPRequest();

function enviaAJAX(d) {
	var kDados = d?d:null;
	http_request.open("POST","ajax.php",true);

	http_request.onreadystatechange = function() {
		if (http_request.readyState==4) {
			var xHTML = http_request.responseText;
			eval(xHTML);
			return;
		}
	}

	http_request.setRequestHeader('Content-Type','application/x-www-form-urlencoded;');
	http_request.send(kDados);
}

function setHTTPRequest()
{
	http_request = false;
	if (window.XMLHttpRequest) { // Mozilla, Safari,...
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType) {
			// set type accordingly to anticipated content type
			//http_request.overrideMimeType('text/xml');
			http_request.overrideMimeType('text/html');
		}
	} else if (window.ActiveXObject) { // IE
		try {
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}
}

// funcao que carrega uma pagina dentro de um objeto qualquer
function carrega(url, destino){
    // coloca o texto "carregando" no objeto de carregamento
    document.getElementById(destino).innerHTML="Carregando";

    // adiciona o item na fila
    fila[fila.length]=[url,destino];

    // se a fila estiver vazia, inicia a execução
    if((ifila+1)==fila.length)
      ajaxRun();
}


// função que le todos os campos de um form e envia!
function enviaForm(frmNome, url, destino){
	// Captura o form
	f = document.getElementById(frmNome);
	// inicializa nova URL
	var query=url;
	//Percorre elementos do formulario
	for (i = 0; i < f.elements.length; i++) {
		// se for a primeira variavel adiciona o "?" senao adiciona "&"
    	//alert ('oi '+f.elements[i].tagName+' '+f.elements[i].value);
    	query += i==0 ? '?' : '&';
    	// concatena a variavel na query
    	if (f.elements[i].tagName == 'TEXTAREA')
    		query += f.elements[i].name + '=' + escape(f.elements[i].innerText);
    	else if (f.elements[i].tagName == 'INPUT' && f.elements[i].type == 'checkbox' && f.elements[i].checked == false)
    		query += f.elements[i].name + '=0';
    	else
    		query += f.elements[i].name + '=' + escape(f.elements[i].value);
	}
	// envia o formulario
	//alert ('query: '+query);
	carrega(query, destino);
	

}

//Executa a próxima conexão da fila
function ajaxRun(){
	// carrega os dados da pagina da fila
  url        = fila[ifila][0];
  destino    = fila[ifila][1];

  // carrega a pagina
  http_request.open("POST", url, true);

  // headers
  http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=iso-8859-1");
  http_request.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate");
  http_request.setRequestHeader("Cache-Control", "post-check=0, pre-check=0");
  http_request.setRequestHeader("Pragma", "no-cache");

  // ao completar o carregamento
  http_request.onreadystatechange=function() {
      if (http_request.readyState==4){
          // coloca o valor no objeto requisitado
          texto=unescape(http_request.responseText.replace(/\+/g," "));
          document.getElementById(destino).innerHTML=texto;

          // executa a proxima requisição da lista (se existir)
          ifila++;
          if(ifila<fila.length)setTimeout("ajaxRun()",20);
      }
  }

  // executa
  http_request.send(url);
}

