﻿var XmlHttp = null;
var XmlParser = null;

function InitializeXml() {
	if(XmlHttp != null && XmlParser != null)
	{
		return(true);
	}

	// Load the Http object
	if(typeof(ActiveXObject) == 'undefined')
	{
		// Not IE
		if(typeof(XMLHttpRequest) != 'undefined')
		{
			try
			{
				XmlHttp = new XMLHttpRequest();
			}
			catch(e)
			{
				XmlHttp = null;
			}
		}

		if(XmlHttp == null && window.createRequest)
		{
			try
			{
				XmlHttp = window.createRequest();
			}
			catch(e)
			{
				XmlHttp = null;
			}
		}
	}
	else
	{
		// IE
		try
		{
			XmlHttp = new ActiveXObject("MSXML2.XMLHTTP.4.0");
		}
		catch(e)
		{
			try
			{
				XmlHttp = new ActiveXObject("MSXML2.XMLHTTP.3.0");
			}
			catch(e)
			{
				try
				{
					XmlHttp = new ActiveXObject("MSXML2.XMLHTTP");
				}
				catch(e)
				{
					try
					{
						XmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
					}
					catch(e)
					{
						XmlHttp = null;
					}
				}
			}
		}
	}


	if(XmlHttp == null)
	{
		return(false);
	}

	if(typeof(ActiveXObject) == 'undefined')
	{
		// Not IE
		if(typeof(document) == 'undefined' || !document.implementation || !document.implementation.createDocument || typeof(DOMParser) == 'undefined')
		{
			return(false);
		}

		XmlParser = new
						(
							function()
							{
								this.createDocument = function()
								{
									return(document.implementation.createDocument("", "", null));
								};
								this.serialize = function(doc)
								{
									return(new XMLSerializer().serializeToString(doc));
								};
								this.parseXml = function(xml)
								{
									var doc = new DOMParser().parseFromString(xml, "text/xml");
									if(doc.documentElement.nodeName == "parsererror")
									{
										throw new Error('XML Parse error');
									}
									return(doc);
								};
							}
						)();
	}
	else
	{
		// IE
		XmlParser = new
						(
							function()
							{
								this.createDocument = function()
								{
									var domNames = ["Msxml2.DOMDocument.6.0", "Msxml2.DOMDocument.3.0", "MSXML2.DOMDocument", "MSXML.DOMDocument", "Microsoft.XMLDOM"];
									for(var idx in domNames)
									{
										try
										{
											return(new ActiveXObject(domNames[idx]));
										}
										catch(e)
										{
										}
									}
									throw new Error('Unable to create DOMDocument');
								};
								this.serialize = function(doc)
								{
									return(doc.xml);
								};
								this.parseXml = function(xml)
								{
									var doc = this.createDocument();
									if(!doc.loadXML(xml))
									{
										throw new Error('XML Parse error');
									}
									return(doc);
								};
							}
						)();
	}

	if(XmlParser == null)
	{
		return(false);
	}

	return(true);
}

function CallWebService(ServiceUrl, MethodToCall, Params) {
	var content = "";

	XmlHttp.open("POST", ServiceUrl + "/" + MethodToCall, false);
	XmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

	for(var idx = 0; idx < Params.length; idx++)
	{
		if(idx > 0)
		{
			content += "&";
		}
		content += Params[idx];
	}

	try
	{
		XmlHttp.send(content);
	}
	catch(e)
	{
	}

	if(XmlHttp.readyState == 4 && XmlHttp.status == 200)
	{
		return(XmlParser.parseXml(XmlHttp.responseText));
	}

	return(null);
}


