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.4.0","MSXML2.XmlHttp.3.0","MSXML2.XmlHttp","Microsoft.XmlHttp"];
	zXml.ARR_DOM_VERS=["MSXML2.DOMDocument.5.0","MSXML2.DOMDocument.4.0","MSXML2.DOMDocument.3.0","MSXML2.DOMDocument","Microsoft.XmlDom"];
	;
	
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;
			};


