var xmlhttp;
var timeoutId; //Id para almacenar timeout y poder cancelarlo
var timeToWait = 10000; //Timeout (Si pasa de 10s se aborta la petición)

function loadXMLDoc(url, asynchronous, uniqueId, postData) {
	if (window.ActiveXObject) { // code for IE
		xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
	}
	else if (window.XMLHttpRequest) { // code for Mozilla, etc.
		xmlhttp=new XMLHttpRequest();	  
	} else {
		alert('Your browser cannot handle this script');
	}
	doRequest(url, uniqueId, postData);
}

//Se llamara si hay que cancelar una peticion (servidor ocupado/crash?)
function timeUp(){
	xmlhttp.abort();
}

function doRequest(url, uniqueId, postData){
		timeoutId = setTimeout(timeUp,timeToWait);
		// Crida sincrona
		if(postData!="" && postData!=undefined){ //POST
			xmlhttp.open("POST", url, false);
			xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=ISO-8859-1");
			xmlhttp.send(postData);
		}
		else{	//GET
			xmlhttp.open("GET", url, false);
			xmlhttp.send(null);
		}
		var result = xmlhttp.responseXML;
		genericFunction(result, uniqueId);		
}

function genericFunction(result, uniqueId){	
	var specificFunction = "genericFunction"+uniqueId+"('"+uniqueId+"', result)";
	eval(specificFunction);
}