function envia_requisicao(metodo, url, usaXml, dados, metodoRetorno){
		
		var httpRequest;
			
		if (window.XMLHttpRequest){           //Navegadores sem ActiveX
			httpRequest = new XMLHttpRequest();
			if (usaXml && httpRequest.overrideMimeType){
				httpRequest.overrideMimeType('text/xml');
			}
		}else if (window.ActiveXObject){     //Internet Explorer
			try{
				httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
			}catch(e){
				try{
					httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
				}catch(f){
					try{
						httpRequest = new ActiveXObject("MSXML2.XMLHTTP.3.0");
					}catch(g){
					
					}
				}
			}
		}
		
		if (!httpRequest){
			alert("Não foi possível encontrar a api Ajax");
			return false;
		}
		//alert("metodo: "+metodo+" url: "+url); 
		httpRequest.open(metodo, url, true); //O ultimo parâmetro indica se a chamada será assincrona
		
		if (metodoRetorno != null){
			httpRequest.onreadystatechange = function(){
				retorna_requisicao(metodo, url, httpRequest, metodoRetorno);
			}
		}
		
		if (metodo == 'POST' && dados != null){
			httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		}
		
		httpRequest.setRequestHeader('Content-length', dados.length);
		httpRequest.send(dados);
	}
	
	function retorna_requisicao(metodo, url, httpRequest, metodoRetorno){
		if (httpRequest.readyState == 4){
			if (httpRequest.status == 200){
					metodoRetorno(httpRequest);
			}else if(httpRequest.status==0){
				
			}else{
				alert('Erro na recepção dos dados: Status '+httpRequest.status+'\n'+metodo+' '+url);
			}
		}
	}