// XMLHttp constants
var XMLHTTP_UNINITIALIZED = 0;
var XMLHTTP_LOADING = 1;
var XMLHTTP_LOADED = 2;
var XMLHTTP_INTERACTIVE = 3;
var XMLHTTP_COMPLETE = 4;

/* Creates and returns a browser-independent XMLHttpRequest object used for Ajax operations */
function createXMLHttp ( ) {
	if (typeof XMLHttpRequest != 'undefined') {
		return new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		// use the most recent version of XMLHttp for MSIE
		var aVersions = ['MSXML2.XMLHttp.5.0', 'MSXML2.XMLHttp.4.0', 'MSXML2.XMLHttp.3.0', 'MSXML2.XMLHttp'];
		for (var i = 0; i < aVersions.length; i++) {
			try {
				var oXmlHttp = new ActiveXObject(aVersions[i]);
				return oXmlHttp;
			} catch (oError) {
				// do nothing
			}
		}
	}
	throw new Error('Ajax failed.');
}

/* Creates an Ajax mock object by connecting to sURL using the sMethod (GET or POST) and displaying results in sLocation. */
function Ajax (sUrl, sLocation, sMethod) {
	var oXMLHttp = createXMLHttp();
	oXMLHttp.open(sMethod, sUrl, true);
	oXMLHttp.onreadystatechange = function () {
		if (oXMLHttp.readyState == XMLHTTP_COMPLETE) {
			if (oXMLHttp.status == 200)
				displayContent(oXMLHttp.responseText, sLocation);
			else
				displayContent('Cannot be displayed.', sLocation);
		} else if (oXMLHttp.readyState == XMLHTTP_LOADING) {
			displayContent('<img src="/layout/loading.gif" alt="Loading..." title="Loading..." />', sLocation);
		}
	}
	oXMLHttp.send(null);
}

/* Displays sContent in the element sDisplayLocation */
function displayContent (sContent, sDisplayLocation) {
	document.getElementById(sDisplayLocation).innerHTML = sContent;
}