req = new Array();

function ahah(url,target,append,message,callback,done) {
	if (append == undefined) append = false;
	if (message == undefined) message = false;
	if (callback == undefined) callback = false;
	if (done == undefined || done == false) {
		if (message) document.getElementById(message).style.display = '';
	   // native XMLHttpRequest object
		if (window.XMLHttpRequest) {
			req[target] = new XMLHttpRequest();
			req[target].onreadystatechange = function() { ahah(url,target,append,message,callback,true); };
			req[target].open("GET",url,true);
			req[target].setRequestHeader("X-AHAH",target);
			req[target].send(null);
		// IE/Windows ActiveX version
		} else if (window.ActiveXObject) {
			req[target] = new ActiveXObject("Microsoft.XMLHTTP");
			if (req[target]) {
				req[target].onreadystatechange = function() { ahah(url,target,append,message,callback,true); };
				req[target].open("GET",url,true);
				req[target].setRequestHeader("X-AHAH",target);
				req[target].send();
			}
		}
	} else {
		if (req[target].readyState == 4) { // only if req is "loaded"
			if (req[target].status == 200 || req[target].status == 304) { // OK
				if (message) document.getElementById(message).style.display = 'none';
				if (!append) document.getElementById(target).innerHTML = req[target].responseText;
				else document.getElementById(target).innerHTML += req[target].responseText;
				if (callback) eval (callback);
			} else document.getElementById(target).innerHTML="ahah error:\n" + req[target].statusText;
		}
	}
}

