var http_requests = new Array();
var free_requests = new Array();

function request(url, callback, data) {
	//alert(free_requests.length);
	/*if (free_requests.length) {
		// var i = free_requests.pop();
	}
	else {*/
		http_requests.push(false);
		var i = http_requests.length-1;
		if (window.XMLHttpRequest) { // Mozilla, Safari,...
			http_requests[i] = new XMLHttpRequest();
			if (http_requests[i].overrideMimeType) {
				http_requests[i].overrideMimeType('text/xml');
			}
		}
		else if (window.ActiveXObject) { // IE
			try {
				http_requests[i] = new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch(e) {
				try {
					http_requests[i] = new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch (e) {}
			}
		}

		if (!http_requests[i]) {
			throw new Error('XMLHttp (AJAX) not supported');
			return false;
		}
	//}

	http_requests[i].onreadystatechange = function() {
		if(http_requests[i].readyState == 4) {
			if (http_requests[i].status == 200) {
				var xmldoc = http_requests[i].responseXML.documentElement;
				callback(xmldoc);
			}
			else {
				throw new Error(status + ' There was a problem with the request.');
			}
			http_requests[i] = null;
			free_requests.push(i);
    	}
	};

	http_requests[i].open('POST', url, true);
	if(data){
		http_requests[i].setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	}
	else {
		data = null;
	}
	http_requests[i].send(data);
}
