var ajax;
var dadosUsuario;

// --- cria o objeto e faz a requisição --- //

function requisicaoHTTP(tipo, url, assinc, func){
	if(window.XMLHttpRequest){
		ajax = new XMLHttpRequest();
	} else if(window.ActiveXObject){
		ajax = new ActiveXObject("Msxml2.XMLHTTP");
		if(!ajax){
			ajax = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	// Caso a variavel ajax esteja carregada, chama iniciaRequisicao
	if(ajax){
		iniciaRequisicao(tipo, url, assinc, func);
	} else {
		alert("Seu navegador não possui suporte a essa aplicação!");
	}
}

// --- inicializa o objeto criado e envia os dados(caso existam) --- //

function iniciaRequisicao(tipo, url, bool, func){
	if(func == null){
		func = trataResposta;		
	}
	
	ajax.onreadystatechange = func;
	ajax.open(tipo, url, bool);
	ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
	// ajax.overrideMimeType("text/XML"); // para o Mozilla
	ajax.send(dadosUsuario);
}

// --- inicia requisição com envio de dados --- //

function enviaDados(url){
	criaQueryString();
	requisicaoHTTP("POST", url, true);
}

// --- cria a string a ser enviada, formato campo1=valor1&campo2=valor2... --- //

function criaQueryString(){
	dadosUsuario = "";
	var frm = document.forms[0];
	var numElementos = frm.elements.length;
	for(var i = 0; i < numElementos; i++){
		if(i < numElementos - 1){
			dadosUsuario += frm.elements[i].name + "=" +
				encodeURIComponent(frm.elements[i].value) + "&"; 
		} else {
			dadosUsuario += frm.elements[i].name + "=" +
				encodeURIComponent(frm.elements[i].value);
		}
		if(frm.elements[i].type == "radio" && frm.elements[i].checked){
			dadosUsuario += frm.elements[i].name + "=" +
				encodeURIComponent(frm.elements[i].value) + "";
		}		
	}
}

// --- trata a resposta do servidor --- //

function trataResposta(){
	if(ajax.readyState == 4){
		if(ajax.status == 200){
			trataDados();
		} else {
			alert("Problema na comunicação com o objeto XMLHttpRequest.");
		}
	}
}
