
    function makeRequest(url, useFunction) {
        var httpRequest = prepareHTTPRequest()
		if(!httpRequest)
			return false;
        try{
			httpRequest.onreadystatechange = function() { useFunction(httpRequest); };
			httpRequest.open('GET', url, true);
			httpRequest.send(null);
		}catch(e){alert(e)}
    }
	
	function prepareHTTPRequest()
	{
		var HttpRequest;
		if (window.XMLHttpRequest) { // Mozilla, Safari, ...
			HttpRequest = new XMLHttpRequest();
			if (HttpRequest.overrideMimeType) {
				HttpRequest.overrideMimeType('text/xml');
				// See note below about this line
			}
		} 
		else if (window.ActiveXObject) { // IE
			// assume IE6 or older
			var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
											"MSXML2.XMLHTTP.5.0",
											"MSXML2.XMLHTTP.4.0",
											"MSXML2.XMLHTTP.3.0",
											"MSXML2.XMLHTTP",
											"Microsoft.XMLHTTP");
			// try every prog id until one works
			for (var i=0; i<XmlHttpVersions.length && !HttpRequest; i++){
			  try{ 
				// try to create XMLHttpRequest object
				HttpRequest = new ActiveXObject(XmlHttpVersions[i]);
			  }catch (e){} // ignore potential error
			}
		}

		if (!HttpRequest){
			alert('Cannot create an XMLHTTP instance');
			return false;
		}
		return HttpRequest;
	}
	
	function getChildElementText(parentNode, childTagName){
		var out = "";
        try {
			var childTag = parentNode.getElementsByTagName(childTagName);
			out = document.createTextNode(childTag[0].firstChild.nodeValue).data;
			if(out == "undefined")
				out = "";
		}catch(e){
			return false;
		}
		return out;
	}
	
	function removeResults(element)
	{
		var resultPanel = $(element)
		while(resultPanel.childNodes.length > 0){
			resultPanel.removeChild(resultPanel.childNodes[0]);
		}
	}

	function urlencode(str) {
		str = escape(str);
		str = str.replace('+', '%2B');
		str = str.replace('%20', '+');
		str = str.replace('*', '%2A');
		str = str.replace('/', '%2F');
		str = str.replace('@', '%40');
		return str;
	}

