var xhr;
var parametros;
var idTimeOut;

// ------- cria o objeto e faz a requisição -------
function requisicaoHTTP(tipo,url,assinc){
	if(window.XMLHttpRequest) xhr = new XMLHttpRequest();
	else if (window.ActiveXObject) {	// IE
		xhr = new ActiveXObject("Msxml2.XMLHTTP");
		if (!xhr) xhr = new ActiveXObject("Microsoft.XMLHTTP");
    }      
	if(xhr) iniciaRequisicao(tipo,url,assinc);
	else return "Navegador sem suporte para consulta!";
	return false;
}

function outOfTime() {
	xhr.abort();
	erroJx("Tempo de consulta esgotado!");
}
// ------- Inicializa o objeto criado e envia os dados (se existirem) -------
function iniciaRequisicao(tipo,url,bool){
  try {
	xhr.onreadystatechange=trataResposta;
	xhr.open(tipo,url,bool);
	idTimeOut = setTimeout(outOfTime,15000);
	xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
	//xhr.overrideMimeType("text/XML");   /* usado somente no Mozilla */
	xhr.send(parametros);
  } catch (err) { erroJx("Houve erro no servidor: "+err); }
}

// ------- Inicia requisição com envio de dados -------
function enviaDados(frm,url){
	criaQueryString(frm);
	return requisicaoHTTP("POST",url,true);
}

// ------- Cria a string a ser enviada, formato campo1=valor1&campo2=valor2... -------
function criaQueryString(frm){
	parametros="enviou="+frm.id+'&';
	var numElementos = frm.elements.length;
	for(var i = 0; i < numElementos-1; i++) parametros += frm.elements[i].name+"="+encodeURIComponent(frm.elements[i].value)+"&";
	parametros += frm.elements[i].name+"="+encodeURIComponent(frm.elements[i].value);
}

// ------- Trata a resposta do servidor -------
function trataResposta(){
  try {
	if(xhr.readyState == 4){
	  clearTimeout(idTimeOut);
	  if(xhr.status == 200) trataDados();  
	  else erroJx("Houve erro no servidor: "+xhr.status);
	}
  } catch (err) { erroJx("Houve erro no servidor: "+err);}
}
