var zXml = 
    {
    useActiveX : (typeof ActiveXObject!="undefined"),
	useDom : document.implementation && document.implementation.createDocument,
	useXmlHttp : (typeof XMLHttpRequest!="undefined")
	};
zXml.ARR_XMLHTTP_VERS = ["MSXML2.XmlHttp.6.0","MSXML2.XmlHttp.3.0"];
zXml.ARR_DOM_VERS = ["MSXML2.DOMDocument.6.0","MSXML2.DOMDocument.3.0"];
function zXmlHttp(){}
zXmlHttp.createRequest = function()
{
    if (zXml.useXmlHttp)
	{
	    return new XMLHttpRequest();
	}
	else if (zXml.useActiveX)
	{
	    if (!zXml.XMLHTTP_VER)
		{
		    for (var i=0;i<zXml.ARR_XMLHTTP_VERS.length;i++)
			{
			    try
				{
				    new ActiveXObject(zXml.ARR_XMLHTTP_VERS[i]);
					zXml.XMLHTTP_VER=zXml.ARR_XMLHTTP_VERS[i];
					break;
				}
				catch(oError){;}
			}
		}
		if (zXml.XMLHTTP_VER)
		{
		    return new ActiveXObject(zXml.XMLHTTP_VER);
		}
		else
		{
		    throw new Error("Could not create XML HTTP Request.");
		}
	}
	else
	{
	    throw new Error("Your browser doesn't support an XML HTTP Request.");
	}
};
zXmlHttp.isSupported=function()
{
    return zXml.useXmlHttp||zXml.useActiveX;
};
function zXmlDom(){}
zXmlDom.createDocument = function()
{
    if (zXml.useDom)
	{
	    var oXmlDom=document.implementation.createDocument("","",null);
		oXmlDom.parseError = 
		{
		    valueOf : function()
			          {
			              return this.errorCode;
			          },
			toString : function()
			          {
			              return this.errorCode.toString()
			          }
		};
		oXmlDom.__initError__();
		oXmlDom.addEventListener("load",
		                         function()
		                         {
								     this.__checkForErrors__();
									 this.__changeReadyState__(4);
								 },
								 false);
		return oXmlDom;;
	}
	else if (zXml.useActiveX)
	{
	    if (!zXml.DOM_VER)
		{
		    for (var i=0;i<zXml.ARR_DOM_VERS.length;i++)
			{
			    try
				{
				    new ActiveXObject(zXml.ARR_DOM_VERS[i]);
					zXml.DOM_VER=zXml.ARR_DOM_VERS[i];
					break;
				}
				catch(oError){;}
			}
		}
		if (zXml.DOM_VER)
		{
		    return new ActiveXObject(zXml.DOM_VER);
		}
		else
		{
		    throw new Error("Could not create XML DOM document.");
		}
	}
	else
	{
	    throw new Error("Your browser doesn't support an XML DOM document.");
	}
};
zXmlDom.isSupported = function()
                      {
					      return zXml.useDom||zXml.useActiveX;
					  };
var oMozDocument=null;
if (typeof XMLDocument!="undefined")
{
    oMozDocument=XMLDocument;
}else if (typeof Document!="undefined")
{
    oMozDocument=Document;
}
if (oMozDocument&&!window.opera)
{
    oMozDocument.prototype.readyState=0;
	oMozDocument.prototype.onreadystatechange=null;
	oMozDocument.prototype.__changeReadyState__ = function(iReadyState)
	                                              {
												      this.readyState=iReadyState;
													  if (typeof this.onreadystatechange=="function")
													  {
													      this.onreadystatechange();
													  }
												  };
	oMozDocument.prototype.__initError__ = function()
	                                       {
										       this.parseError.errorCode=0;
											   this.parseError.filepos=-1;
											   this.parseError.line=-1;
											   this.parseError.linepos=-1;
											   this.parseError.reason=null;
											   this.parseError.srcText=null;
											   this.parseError.url=null;
										   };
    oMozDocument.prototype.__checkForErrors__ = function()
	                                            {
												    if(this.documentElement.tagName=="parsererror")
													{
													    var reError=/>([\s\S]*?)Location:([\s\S]*?)Line Number(\d+),Column(\d+):<sourcetext>([\s\S]*?)(?:\-*\^)/;
														reError.test(this.xml);
														this.parseError.errorCode=-999999;
														this.parseError.reason=RegExp.$1;
														this.parseError.url=RegExp.$2;
														this.parseError.line=parseInt(RegExp.$3);
														this.parseError.linepos=parseInt(RegExp.$4);
														this.parseError.srcText=RegExp.$5;
													}
												};
	oMozDocument.prototype.loadXML = function(sXml)
	                                 {
									     this.__initError__();
										 this.__changeReadyState__(1);
										 var oParser=new DOMParser();
										 var oXmlDom=oParser.parseFromString(sXml,"text/xml");
										 while (this.firstChild)
										 {
										     this.removeChild(this.firstChild);
										 }
										 for (var i=0;i<oXmlDom.childNodes.length;i++)
										 {
										     var oNewNode=this.importNode(oXmlDom.childNodes[i],true);
											 this.appendChild(oNewNode);
										 }
										 this.__checkForErrors__();
										 this.__changeReadyState__(4);
									  };
	oMozDocument.prototype.__load__=oMozDocument.prototype.load;oMozDocument.prototype.load=function(sURL){this.__initError__();this.__changeReadyState__(1);this.__load__(sURL);};Node.prototype.__defineGetter__("xml",function(){var oSerializer=new XMLSerializer();return oSerializer.serializeToString(this,"text/xml");});Node.prototype.__defineGetter__("text",function(){var sText="";for(var i=0;i<this.childNodes.length;i++){if(this.childNodes[i].hasChildNodes()){sText+=this.childNodes[i].text;}else{sText+=this.childNodes[i].nodeValue;}}return sText;});}function zXslt(){}zXslt.transformToText=function(oXml,oXslt){if(typeof XSLTProcessor!="undefined"){var oProcessor=new XSLTProcessor();oProcessor.importStylesheet(oXslt);var oResultDom=oProcessor.transformToDocument(oXml);var sResult=oResultDom.xml;if(sResult.indexOf("<transformiix:result")>-1){sResult=sResult.substring(sResult.indexOf(">")+1,sResult.lastIndexOf("<"));}return sResult;;}else if(zXml.useActiveX){return oXml.transformNode(oXslt);}else{throw new Error("No XSLT engine found.");}};function zXPath(){}zXPath.selectNodes=function(oRefNode,sXPath,oXmlNs){if(typeof XPathEvaluator!="undefined"){oXmlNs=oXmlNs||{};var nsResolver=function(sPrefix){return oXmlNs[sPrefix];};var oEvaluator=new XPathEvaluator();var oResult=oEvaluator.evaluate(sXPath,oRefNode,nsResolver,XPathResult.ORDERED_NODE_ITERATOR_TYPE,null);var aNodes=new Array;if(oResult!=null){var oElement=oResult.iterateNext();while(oElement){aNodes.push(oElement);oElement=oResult.iterateNext();}}return aNodes;}else if(zXml.useActiveX){if(oXmlNs){var sXmlNs="";for(var sProp in oXmlNs){sXmlNs+="xmlns:"+sProp+"=\'"+oXmlNs[sProp]+"\' ";}oRefNode.ownerDocument.setProperty("SelectionNamespaces",sXmlNs);};return oRefNode.selectNodes(sXPath);}else{throw new Error("No XPath engine found.");}};zXPath.selectSingleNode=function(oRefNode,sXPath,oXmlNs){if(typeof XPathEvaluator!="undefined"){;oXmlNs=oXmlNs||{};var nsResolver=function(sPrefix){return oXmlNs[sPrefix];};var oEvaluator=new XPathEvaluator();var oResult=oEvaluator.evaluate(sXPath,oRefNode,nsResolver,XPathResult.FIRST_ORDERED_NODE_TYPE,null);if(oResult!=null){return oResult.singleNodeValue;}else{return null;};}else if(zXml.useActiveX){if(oXmlNs){var sXmlNs="";for(var sProp in oXmlNs){sXmlNs+="xmlns:\'"+sProp+"="+oXmlNs[sProp]+"\' ";}oRefNode.ownerDocument.setProperty("SelectionNamespaces",sXmlNs);};return oRefNode.selectSingleNode(sXPath);}else{throw new Error("No XPath engine found.");}};function zXMLSerializer(){}zXMLSerializer.prototype.serializeToString=function(oNode){var sXml="";switch(oNode.nodeType){case 1:sXml="<"+oNode.tagName;for(var i=0;i<oNode.attributes.length;i++){sXml+=" "+oNode.attributes[i].name+"=\""+oNode.attributes[i].value+"\"";}sXml+=">";for(var i=0;i<oNode.childNodes.length;i++){sXml+=this.serializeToString(oNode.childNodes[i]);}sXml+="</"+oNode.tagName+">";break;case 3:sXml=oNode.nodeValue;break;case 4:sXml="<![CDATA["+oNode.nodeValue+"]]>";break;case 7:sXml="<?"+oNode.nodevalue+"?>";break;case 8:sXml="<!--"+oNode.nodevalue+"-->";break;case 9:for(var i=0;i<oNode.childNodes.length;i++){sXml+=this.serializeToString(oNode.childNodes[i]);}break;};return sXml;}

