| // This is a third party JavaScript library from |
| // http://webfx.eae.net/dhtml/xmlextras/xmlextras.html |
| // i.e. This has not been written by ThoughtWorks. |
| |
| //<script> |
| ////////////////// |
| // Helper Stuff // |
| ////////////////// |
| |
| // used to find the Automation server name |
| function getDomDocumentPrefix() { |
| if (getDomDocumentPrefix.prefix) |
| return getDomDocumentPrefix.prefix; |
| |
| var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"]; |
| var o; |
| for (var i = 0; i < prefixes.length; i++) { |
| try { |
| // try to create the objects |
| o = new ActiveXObject(prefixes[i] + ".DomDocument"); |
| return getDomDocumentPrefix.prefix = prefixes[i]; |
| } |
| catch (ex) {}; |
| } |
| |
| throw new Error("Could not find an installed XML parser"); |
| } |
| |
| function getXmlHttpPrefix() { |
| if (getXmlHttpPrefix.prefix) |
| return getXmlHttpPrefix.prefix; |
| |
| var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"]; |
| var o; |
| for (var i = 0; i < prefixes.length; i++) { |
| try { |
| // try to create the objects |
| o = new ActiveXObject(prefixes[i] + ".XmlHttp"); |
| return getXmlHttpPrefix.prefix = prefixes[i]; |
| } |
| catch (ex) {}; |
| } |
| |
| throw new Error("Could not find an installed XML parser"); |
| } |
| |
| ////////////////////////// |
| // Start the Real stuff // |
| ////////////////////////// |
| |
| |
| // XmlHttp factory |
| function XmlHttp() {} |
| |
| XmlHttp.create = function () { |
| try { |
| if (window.XMLHttpRequest) { |
| var req = new XMLHttpRequest(); |
| |
| // some versions of Moz do not support the readyState property |
| // and the onreadystate event so we patch it! |
| if (req.readyState == null) { |
| req.readyState = 1; |
| req.addEventListener("load", function () { |
| req.readyState = 4; |
| if (typeof req.onreadystatechange == "function") |
| req.onreadystatechange(); |
| }, false); |
| } |
| |
| return req; |
| } |
| if (window.ActiveXObject) { |
| return new ActiveXObject(getXmlHttpPrefix() + ".XmlHttp"); |
| } |
| } |
| catch (ex) {} |
| // fell through |
| throw new Error("Your browser does not support XmlHttp objects"); |
| }; |
| |
| // XmlDocument factory |
| function XmlDocument() {} |
| |
| XmlDocument.create = function () { |
| try { |
| // DOM2 |
| if (document.implementation && document.implementation.createDocument) { |
| var doc = document.implementation.createDocument("", "", null); |
| |
| // some versions of Moz do not support the readyState property |
| // and the onreadystate event so we patch it! |
| if (doc.readyState == null) { |
| doc.readyState = 1; |
| doc.addEventListener("load", function () { |
| doc.readyState = 4; |
| if (typeof doc.onreadystatechange == "function") |
| doc.onreadystatechange(); |
| }, false); |
| } |
| |
| return doc; |
| } |
| if (window.ActiveXObject) |
| return new ActiveXObject(getDomDocumentPrefix() + ".DomDocument"); |
| } |
| catch (ex) {} |
| throw new Error("Your browser does not support XmlDocument objects"); |
| }; |
| |
| // Create the loadXML method and xml getter for Mozilla |
| if (window.DOMParser && |
| window.XMLSerializer && |
| window.Node && Node.prototype && Node.prototype.__defineGetter__) { |
| |
| // XMLDocument did not extend the Document interface in some versions |
| // of Mozilla. Extend both! |
| //XMLDocument.prototype.loadXML = |
| Document.prototype.loadXML = function (s) { |
| |
| // parse the string to a new doc |
| var doc2 = (new DOMParser()).parseFromString(s, "text/xml"); |
| |
| // remove all initial children |
| while (this.hasChildNodes()) |
| this.removeChild(this.lastChild); |
| |
| // insert and import nodes |
| for (var i = 0; i < doc2.childNodes.length; i++) { |
| this.appendChild(this.importNode(doc2.childNodes[i], true)); |
| } |
| }; |
| |
| |
| /* |
| * xml getter |
| * |
| * This serializes the DOM tree to an XML String |
| * |
| * Usage: var sXml = oNode.xml |
| * |
| */ |
| // XMLDocument did not extend the Document interface in some versions |
| // of Mozilla. Extend both! |
| /* |
| XMLDocument.prototype.__defineGetter__("xml", function () { |
| return (new XMLSerializer()).serializeToString(this); |
| }); |
| */ |
| Document.prototype.__defineGetter__("xml", function () { |
| return (new XMLSerializer()).serializeToString(this); |
| }); |
| } |