var ajax;
var dadosUsuario;

// ------- cria o objeto e faz a requisição -------
function requisicaoHTTP(tipo,url,assinc){
	if(window.XMLHttpRequest){	  // Mozilla, Safari,...
		ajax = new XMLHttpRequest();
	} 
	else if (window.ActiveXObject){	// IE
		ajax = new ActiveXObject("Msxml2.XMLHTTP");
		if (!ajax) {
			ajax = new ActiveXObject("Microsoft.XMLHTTP");
		}
    }      
    
	if(ajax)	// iniciou com sucesso
		iniciaRequisicao(tipo,url,assinc);
	else
		alert("Seu navegador nao possui suporte a essa aplicacao!");
}

// ------- Inicializa o objeto criado e envia os dados (se existirem) -------
function iniciaRequisicao(tipo,url,bool)
{
try{	
	ajax.onreadystatechange=trataResposta;
	ajax.open(tipo,url,bool);
	ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
	//ajax.overrideMimeType("text/XML");   /* usado somente no Mozilla */
	ajax.send(dadosUsuario);
}catch(err){
	alert("Não foi possivel estabelecer conexao com o servidor no momento.");
}
}


// ------- Inicia requisição com envio de dados -------
function enviaDados(url,form){
	criaQueryString(form);
	requisicaoHTTP("POST",url,true);
}


// ------- Cria a string a ser enviada, formato campo1=valor1&campo2=valor2... -------
function criaQueryString(form){
	dadosUsuario="";
	var frm = document.forms[form];
	var numElementos =  frm.elements.length;
	
	for(var i = 0; i < numElementos; i++)  
	{
		// se o elemento for um checkbox
		if(frm.elements[i].type == "checkbox")
		{
			// se o elemento estiver selecionado
			if(frm.elements[i].checked)
			{
				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);
				}
			}
		}else{ // se não for um checkbox
			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);
			}
		}
	}// fim do loop
}

// ------- Trata a resposta do servidor -------
function trataResposta(){
try{
		if(ajax.readyState == 4){
		if(ajax.status == 200){
			// tudo OK
			trataDados();  // criar essa função no seu programa
		} else {
			alert("Problema na comunicacao com o programa servidor.");
		}
	}
}catch(err){
	alert("O servidor nao esta disponivel no momento. Tente mais tarde. \nErro: "+err.message);
}
}
