function load_text_get ( url, callback, debug ) {
	var cb	= function ( req ) {
		var content	= req.responseText;
		if (content) {
			callback( content, req );
		} else {
			if (debug) {
				alert("Response did not yield any content.");
			}
		}
	};
	load_xmlhttprequest( url, false, cb, debug );
}

function load_text_post ( url, data, callback, debug ) {
	var post = '';
	for (key in data) post += (key + '=' + escape(data[key]) + "&");
	var cb	= function ( req ) {
		var content	= req.responseText;
		if (content) {
			callback( content, req );
		} else {
			if (debug) {
				alert("Response did not yield any content.");
			}
		}
	};
	load_xmlhttprequest( url, post, cb, debug );
}

function load_xml_get ( url, callback, debug ) {
	var cb	= function ( req ) {
		var dom	= req.responseXML;
		if (dom) {
			callback( dom, req );
		} else {
			if (debug) {
				alert("Response did not yield a DOM object." + req.responseText);
			}
		}
	};
	load_xmlhttprequest( url, false, cb, debug );
}

function load_xml_post ( url, data, callback, debug ) {
	var post = '';
	for (key in data) post += (key + '=' + escape(data[key]) + ";");
	var cb	= function ( req ) {
		var dom	= req.responseXML;
		if (dom) {
			callback( dom, req );
		} else {
			if (debug) {
				alert("Response did not yield a DOM object." + req.responseText);
			}
		}
	};
	load_xmlhttprequest( url, post, cb, debug );
}

function load_json_get ( url, callback, debug ) {
	var cb	= function ( text, req ) {
		var obj	= JSON.parse(aJSONtext);
		callback( obj, req );
	};
	load_text_get( url, cb, debug );
}

function load_xmlhttprequest ( url, data, callback, debug ) {
	var req;
	var handler	= function ( ) {
		if (req.readyState == 4) {
			if (req.status  > 199 && req.status < 300) {
				callback( req );
			} else {
				if (debug) {
					alert("There was a problem retrieving the XML data: " + req.status + ' : ' + req.statusText);
				}
			}
		}
	};
	req = create_request();
	if (req) {
		req.onreadystatechange = handler;
		if (data) {
			req.open("POST", url, true);
			req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			req.setRequestHeader("Content-length", data.length);
			req.setRequestHeader("Connection", "close");
			req.send(data);
		} else {
			req.open("GET", url, true);
			// Hack for IE
			if (window.ActiveXObject) {
				req.send(null);
			} else {
				req.send(data);
			}
		}
	}
}

function create_request ( ) {
	var request;
	try {
		request = new XMLHttpRequest();
	} catch (trymicrosoft) {
		try {
			request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (othermicrosoft) {
			try {
				request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (failed) {
				request = false;
			}
		}
	}
	if (!request) {
		alert("Error initializing XMLHttpRequest!");
	} else {
		return request;
	}
}
