// Holds an instance of XMLHttpRequest
var xmlHttp = createXmlHttpRequestObject();

// display error messages (true) or degrade to non-AJAX Behvaior (false)
var showErrors = false;

// contains the link or form clicked or submitted by the visitor
var actionObject = '';

// Creates an XMLHttpRequest instance
function createXmlHttpRequestObject()
{
	// Will store the XMLHttpRequest object
	var xmlHttp;

	// create the XMLHttpRequest object
	try
	{
		// try to create native XMLHttpRequest object
		xmlHttp = new XMLHttpRequest();
	}
	catch(e)
	{
		// Assume IE 6 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 id until one works
		for( var i=0; i < XmlHttpVersions.length && !xmlHttp; i++ )
		{
			try
			{
				xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
			}
			catch(e) {} // ignore potential errors
		}
	}

	if(!xmlHttp)
	{
		handleError("Error creating the XMLHttpRequest object.");
	}

	return xmlHttp;
}

// Display am error messahe or degrades to non-AJAX behavior
function handleError($message)
{
	actionObject = (event.target) ? event.target : event.srcElement;

	// ignore errors if show error is false
	if(showErrors)
	{
		// Display error message
		alert("Error encountered: \n" + $message);
		return false;
	}
	// Fall back to non-AJAX behvaior
	else if(!actionObject.tagName)
	{
		return true;
	}
	// Fall back to non-AJAX behavior by following the link
	else if( actionObject.tagName == 'A' )
	{
		window.location = actionObject.href;
	}
	else if( actionObject.tagName == 'FORM' )
	{
		actionObject.submit();
	}

	return true;
}
