/*------------------------------------------------------------------------------
 * JavaScript zXml Library
 * Version 1.0.2
 * by Nicholas C. Zakas, http://www.nczonline.net/
 * Copyright (c) 2004-2006 Nicholas C. Zakas. All Rights Reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation; either version 2.1 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 *------------------------------------------------------------------------------
 */  

 
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 { alert("Could not create XML HTTP Request.");}
} else { alert("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 { alert("Could not create XML DOM document.");}
} else { alert("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 { alert("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 { alert("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 { alert("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;};