function create_request (fcn)
{
	var xmlHttp;

	displayLoading("visible");

	try {
		// Firefox, Opera 8.0+, Safari
		xmlHttp=new XMLHttpRequest();
	} catch (e) {
		// Internet Explorer
		try {
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
				alert("Your browser does not support AJAX!");
				return false;
			}
		}
	}
	xmlHttp.onreadystatechange=function()
		{
			if (xmlHttp.readyState==4) {
				displayLoading("hidden");
				if (xmlHttp.responseXML) {
					//alert("xml\n"+xmlHttp.responseXML);
					fcn(xmlHttp.responseXML);
				} else {
					//alert("txt\n"+xmlHttp.responseText);
					fcn(xmlHttp.responseText);
				}
			}
		}
	
	return xmlHttp;
}

function execute_request (url, fcn) {
	var req = create_request(fcn);
	req.open("GET", url, true);
	req.send(null);
}

function displayLoading (status) {
	var elems = document.getElementsByName('loading');
	for (var i=0; i < elems.length; i++)
		elems[i].style.visibility = status;
}

