function XMLObject()
{
	var args = arguments;
	var protocol = "GET";
	var async = false;
	var headers = "";
	var object = this;
	
	object.XMLHttpRequester = Create_XMLHttpRequester();
	object.RequestURL = "";
	object.XMLText = "";
	object.XMLDocument = null;
	object.doAfterXMLLoad = function () {}
	
	for(var a = 0; a < args.length; a++)
	{
		switch(a)
		{
		case 0:
			object.RequestURL = args[a];
			break;
		case 1:
			protocol = args[a];
			break;
		case 2:
			async = args[a];
			break;
		case 3:
			headers = args[a];
			break;
		case 4:
			object.doAfterXMLLoad = args[a];
			break;
		default:
			break;
		}
	}
	
	if(object.RequestURL != "")
	{
		// If the request is to be made asynchronously then set the readystatechange function 
		if(async) // false by default
		{
			object.XMLHttpRequester.onreadystatechange = function () {
				if(object.XMLHttpRequester.readyState == 4 && object.XMLHttpRequester.status == 200)
				{
					object.XMLText = object.XMLHttpRequester.responseText;
					object.XMLDocument = Parse_XML(object.XMLHttpRequester.responseText);
					object.doAfterXMLLoad();
				}
			};
		}
	
		object.XMLHttpRequester.open(protocol, object.RequestURL, async);
	
		if(protocol == "POST") // false by default
		{
			object.XMLHttpRequester.setRequestHeader("Content-type","application/x-www-form-urlencoded");
		}
	
		object.XMLHttpRequester.send(headers);	
		if(!async) // true by default
		{
			object.XMLText = object.XMLHttpRequester.responseText;
			object.XMLDocument = Parse_XML(object.XMLHttpRequester.responseText);
			object.doAfterXMLLoad();
		}
	}
}

function Create_XMLHttpRequester()
{
	var xmlHttpRequest;
	
	if(window.XMLHttpRequest)
	{ // Mozilla, Safari, ...
		xmlHttpRequest = new XMLHttpRequest();
		if (xmlHttpRequest.overrideMimeType)
		{
			xmlHttpRequest.overrideMimeType("text/xml");
		}
		
		return xmlHttpRequest;
	} 
	else if(window.ActiveXObject)
	{ // IE
		try
		{
			xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
			return xmlHttpRequest;
		}
		catch(e)
		{
			try
			{
				xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
				return xmlHttpRequest;
			}
			catch(e)
			{
				return null;
			}
		}
	}
	
	return null;
}

function Parse_XML(strXMLDocument)
{
	var strXMLDoc = strXMLDocument;
	
	if(window.DOMParser)
	{
		var parser = new DOMParser();
		xmlDoc = parser.parseFromString(strXMLDoc, "text/xml");
	}
	else // Internet Explorer
	{
		try
		{
			xmlDoc = new ActiveXObject("Msxml2.DOMDocument.6.0");
			xmlDoc.async = "false";
			xmlDoc.loadXML(strXMLDoc);
		}
		catch(e)
		{
			xmlDoc.loadXML(strXMLDoc);
			xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
			xmlDoc.async = "false";
			xmlDoc.loadXML(strXMLDoc);
		}
	}
	
	return xmlDoc;
}
