function PioWebXmlDocument() { var sImpl = ""; var oThis = this; var o = null; var oRequest = null; var iAsync = 0; var hdlReadystatechange = null; var hdlReadystatechange_complete = null; var iReadyState = 0; /* ~~~ iReadyState 0 = Uninitialized - open() has not been called yet. 1 = Loading - send() has not been called yet. 2 = Loaded - send() has been called, headers and status are available. 3 = Interactive - Downloading, responseText holds the partial data. 4 = Completed - Finished with all operations. */ try { //if (PioWeb.BrName == "IE") sImpl = "IE"; if (PioWeb.IsIE11 || window.ActiveXObject) sImpl = "IE"; else if (document.implementation && document.implementation.createDocument) sImpl = "MZ"; else sImpl = ""; } catch (e) { if (document.implementation && document.implementation.createDocument) sImpl = "MZ"; else sImpl = ""; } this.impl_get = function() { return sImpl }; this.nativeObject_get = function() { return o; } this.readyState_get = function() { return iReadyState; } this.onreadystatechange_set = function(callback) { if (typeof (callback) == "function") { hdlReadystatechange = callback; } } this.onreadystatechange_complete_set = function(callback) { if (typeof (callback) == "function") { hdlReadystatechange_complete = callback; } } function onreadystatechange_inner() { if (oRequest != null) { iReadyState = oRequest.readyState; if (iReadyState == 4) { o = oRequest.responseXML; oRequest = null; } } else if (sImpl == "IE") { iReadyState = o.readyState; } else { //alert("can't define readyState of xml object"); iReadyState = 4; } if (iReadyState == 4 && sImpl == "IE") { o.setProperty("SelectionLanguage", "XPath"); } if (hdlReadystatechange != null) hdlReadystatechange(oThis); if (hdlReadystatechange_complete != null && iReadyState == 4) hdlReadystatechange_complete(oThis); } function ensureNativeObject(xmlPath, xmlString) { if (o == null) { oRequest = null; iReadyState = 0; if (sImpl == "IE") { o = new ActiveXObject("MSXML2.DomDocument"); if (iAsync != 0) o.async = (iAsync > 0) ? true : false; if (o.async) o.onreadystatechange = onreadystatechange_inner; if (xmlString != null) o.loadXML(xmlString); else o.load(xmlPath); if (!o.async) onreadystatechange_inner(); } else if (xmlString != null) { if (iAsync < 0) { var objDOMParser = new DOMParser(); var oXml = objDOMParser.parseFromString(xmlString, "text/xml"); o = oXml; onreadystatechange_inner(); } else { var oReq = new XMLHttpRequest(); if (oReq) { oRequest = oReq; oReq.onreadystatechange = onreadystatechange_inner; oReq.open("GET", "data:text/xml;charset=utf-8," + encodeURIComponent(xmlString), true); oReq.send(null); } } } else { if (iAsync < 0) { if (document.implementation && document.implementation.createDocument) { o = document.implementation.createDocument("", "", null); if (o && typeof(o.load) == "function") { o.async = false; o.load(xmlPath); } else { //~~~ probably Safari var oReq = new XMLHttpRequest(); if (oReq) { oRequest = oReq; oReq.open('GET', xmlPath, false); oReq.send(null); } } onreadystatechange_inner(); } } else { var oReq = new XMLHttpRequest(); if (oReq) { oRequest = oReq; oReq.onreadystatechange = onreadystatechange_inner; oReq.open('GET', xmlPath, true); oReq.send(null); } } } } } //~~~ function ensureNativeObject this.load = function(xmlSource) { o = null; ensureNativeObject(xmlSource, null); } this.loadXML = function(xmlString) { o = null; ensureNativeObject(null, xmlString); } this.async_get = function() { if (iAsync == 0) return null; else return (iAsync > 0) ? true : false; } this.async_set = function(value) { try { if (value == true) iAsync = 1; else iAsync = -1; } catch (e) { iAsync = -1; } } //PioWebXmlDom.prototype.__defineGetter__("async", async_get); //PioWebXmlDom.prototype.__defineSetter__("async", async_set); this.xml_get = function() { if (o != null) { if (sImpl == "IE") return o.xml; else { var oXMLSerializer = new XMLSerializer; return oXMLSerializer.serializeToString(o); } } } this.parseError_get = function() { if (o == null) return ""; var sRv = ""; if (sImpl == "IE") sRv = o.parseError.reason; else { sRv = this.xml_get(); if (sRv.indexOf(" 0) oNode = arItems.snapshotItem(0); } if (oNode != null) { return new PioWebXmlNode(oNode, this); } } this.selectNodes = function(xPathQuery) { if (o == null) return null; if (sImpl == "IE") { var arItems = o.selectNodes(xPathQuery); var arResult = new Array(); for (var i = 0; i < arItems.length; i++) { arResult[i] = new PioWebXmlNode(arItems[i], this); } return arResult; } else { var oNSResolver = o.createNSResolver(o.documentElement); var arItems = o.evaluate(xPathQuery, o, oNSResolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var arResult = new Array(); for (var i = 0; i < arItems.snapshotLength; i++) { arResult[i] = new PioWebXmlNode(arItems.snapshotItem(i), this); } return arResult; } } this.transformNode = function(stylesheet) { if (o == null) return null; if (sImpl == "IE") { return o.transformNode(stylesheet.nativeObject_get()); } else { var oResultNode = document.implementation.createDocument("", "", null); var oXslProcessor = new XSLTProcessor(); var oSerializer = new XMLSerializer(); if (oXslProcessor.reset) { //~~~ new nsIXSLTProcessor is available oXslProcessor.importStylesheet(stylesheet.nativeObject_get()); var oNewFragment = oXslProcessor.transformToFragment(o, oResultNode); return oSerializer.serializeToString(oNewFragment); } else { //~~~ only nsIXSLTProcessorObsolete is available oXslProcessor.transformDocument(o, stylesheet.nativeObject_get(), oResultNode, null); return oSerializer.serializeToString(oResultNode); } } } this.createElement = function(name) { var oNativeNode = o.createElement(name); return new PioWebXmlNode(oNativeNode, this); } this.createAttribute = function(name) { var oNativeNode = o.createAttribute(name); return oNativeNode; //return new PioWebXmlNode(oNativeNode, this); } } //~~~ class PioWebXmlDom function PioWebXmlNode(nativeNode, owner) { this.attributes = nativeNode.attributes; this.nativeObject_get = function() { return nativeNode; } this.ownerDocument_get = function() { return owner; } this.parentNode_get = function() { var oNode = nativeNode.parentNode; if (oNode != null) { return new PioWebXmlNode(nativeNode.parentNode, owner); } else { return null; } } this.nodeValue_get = function() { if (owner.impl_get() == "IE") { return nativeNode.text; } else { return nativeNode.textContent; } } this.nodeValue_set = function(value) { if (owner.impl_get() == "IE") { nativeNode.text = value; } else { nativeNode.textContent = value; } } this.xml_get = function() { if (owner.impl_get() == "IE") return nativeNode.xml; else { var oXMLSerializer = new XMLSerializer; return oXMLSerializer.serializeToString(nativeNode); } } this.selectSingleNode = function(xPathQuery) { var oNode = null; if (owner.impl_get() == "IE") { oNode = nativeNode.selectSingleNode(xPathQuery); } else { var oNatvieDoc = owner.nativeObject_get(); var oNSResolver = oNatvieDoc.createNSResolver(oNatvieDoc.documentElement); var arItems = oNatvieDoc.evaluate(xPathQuery, nativeNode, oNSResolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); if (arItems.snapshotLength > 0) oNode = arItems.snapshotItem(0); } if (oNode != null) { return new PioWebXmlNode(oNode, owner); } } this.selectNodes = function(xPathQuery) { if (owner.impl_get() == "IE") { var arItems = nativeNode.selectNodes(xPathQuery); var arResult = new Array(); for (var i = 0; i < arItems.length; i++) { arResult[i] = new PioWebXmlNode(arItems[i], owner); } return arResult; } else { var oNatvieDoc = owner.nativeObject_get(); var oNSResolver = oNatvieDoc.createNSResolver(oNatvieDoc.documentElement); var arItems = oNatvieDoc.evaluate(xPathQuery, nativeNode, oNSResolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var arResult = new Array(); for (var i = 0; i < arItems.snapshotLength; i++) { arResult[i] = new PioWebXmlNode(arItems.snapshotItem(i), owner); } return arResult; } } this.transformNode = function(stylesheet) { if (owner.impl_get() == "IE") { return nativeNode.transformNode(stylesheet.nativeObject_get()); } else { var oResultNode = document.implementation.createDocument("", "", null); var oXslProcessor = new XSLTProcessor(); var oSerializer = new XMLSerializer(); if (oXslProcessor.reset) { //~~~ new nsIXSLTProcessor is available oXslProcessor.importStylesheet(stylesheet.nativeObject_get()); var oNewFragment = oXslProcessor.transformToFragment(nativeNode, oResultNode); return oSerializer.serializeToString(oNewFragment); } else { //~~~ only nsIXSLTProcessorObsolete is available oXslProcessor.transformDocument(oDoc, stylesheet.nativeObject_get(), oResultNode, null); return oSerializer.serializeToString(oResultNode); } } } this.getChildNode = function(childIndex) { return new PioWebXmlNode(nativeNode.childNodes[childIndex], owner); } this.appendChild = function(newNode) { nativeNode.appendChild(newNode.nativeObject_get()); return newNode; } this.removeChild = function(nodeToRemove) { nativeNode.removeChild(nodeToRemove.nativeObject_get()); return nodeToRemove; } this.appendXml = function(xmlString) { try { var oXml = new PioWebXmlDocument(); oXml.async_set(false); oXml.loadXML(xmlString); if (oXml.parseError_get() != "") { return appendXml1(xmlString); } var oRootNodeN = oXml.documentElement_get().nativeObject_get(); var oNewNodeN = oRootNodeN.cloneNode(true); nativeNode.appendChild(oNewNodeN); return new PioWebXmlNode(oNewNodeN, owner); } catch (e) { } return appendXml1(xmlString); } function appendXml1(xmlString) { var oRv = null; var oXml = new PioWebXmlDocument(); oXml.async_set(false); oXml.loadXML("" + xmlString + ""); var oRoot = oXml.documentElement_get(); var oRootN = oRoot.nativeObject_get(); for (var i = 0; i < oRootN.childNodes.length; i++) { var oRootChildN = oRootN.childNodes[i]; var oNewNodeN = oRootChildN.cloneNode(true); nativeNode.appendChild(oNewNodeN); if (oRv == null) { oRv = PioWebXmlNode(oNewNodeN, owner); } } return oRv; } this.cloneNode = function(deep) { return new PioWebXmlNode(nativeNode.cloneNode(deep), owner); } this.getAttribute = function(attrName) { if (typeof (nativeNode.getAttribute) != "undefined") return nativeNode.getAttribute(attrName); if (owner.impl_get() == "IE") { for (var i = 0; i < this.attributes.length; i++) { var oNode = this.attributes[i]; if (oNode.nodeName == attrName) return oNode.nodeValue; } } else { var oAttr = this.attributes[attrName]; if (oAttr != null) return oAttr.value; } return null; } } //~~~ class PioWebXmlNode function PioWebXslFactory(xslDoc) { var sImpl = xslDoc.impl_get(); var o = null; init(); function init() { if (sImpl == "IE") { var oXsl = new ActiveXObject("Msxml2.FreeThreadedDOMDocument"); var oXslT = new ActiveXObject("Msxml2.XSLTemplate"); oXsl.async = false; oXsl.loadXML(xslDoc.xml_get()); oXslT.stylesheet = oXsl; o = oXslT; } else { o = xslDoc.nativeObject_get(); } } this.impl_get = function() { return sImpl; } this.nativeObject_get = function() { return o; } this.createProcessor = function() { return new PioWebXslProcessor(this); } } //~~~ class PioWebXslFactory function PioWebXslProcessor(factory) { var sImpl = factory.impl_get(); var o = null; var oInput = null; var sOutput = null; init(); function init() { if (sImpl == "IE") { var oXslT = factory.nativeObject_get(); var oProc = oXslT.createProcessor(); o = oProc; } else { var oXslT = factory.nativeObject_get(); var oProc = new XSLTProcessor(); if (oProc.reset) { //~~~ new nsIXSLTProcessor is available oProc.importStylesheet(oXslT); } o = oProc; } } this.impl_get = function() { return sImpl; } this.addParameter = function(baseName, parameter, namespaceURI) { if (sImpl == "IE") { o.addParameter(baseName, parameter, namespaceURI); } else { if (namespaceURI == null) { o.setParameter("", baseName, parameter); } else { o.setParameter(namespaceURI, baseName, parameter); } } } this.input_set = function(value) { if (sImpl == "IE") { o.input = value.nativeObject_get(); } else { oInput = value.nativeObject_get(); } } this.transform = function() { if (sImpl == "IE") { return o.transform(); } else { var oResultNode = document.implementation.createDocument("", "", null); var oSerializer = new XMLSerializer(); sRez = ""; if (o.reset) { //~~~ new nsIXSLTProcessor is available var oNewFragment = o.transformToFragment(oInput, oResultNode); sRez = oSerializer.serializeToString(oNewFragment); } else { //~~~ only nsIXSLTProcessorObsolete is available o.transformDocument(oInput, factory.nativeObject_get(), oResultNode, null); sRez = oSerializer.serializeToString(oResultNode); } if (sRez == null || sRez == "") { return false; } else { sRez = sRez.replace(/ xmlns=\"http:\/\/www\.w3\.org\/1999\/xhtml\"/gi, ""); return true; } } } this.output_get = function() { if (sImpl == "IE") { return o.output; } else { return sRez; } } } //~~~ PioWebXslProcessor function PioWebXml() { this.appendOptionalAttribute = function(xmlNode, attributeName, attributeValue) { if (attributeValue != null && attributeValue != "") { this.appendAttribute(xmlNode, attributeName, attributeValue); return true; } return false; } this.appendAttribute = function(xmlNode, attributeName, attributeValue) { var oXml = xmlNode.ownerDocument_get(); var oAttr = oXml.createAttribute(attributeName); var oNative = xmlNode.nativeObject_get(); oAttr.value = attributeValue; oNative.attributes.setNamedItem(oAttr); } this.getXmlObjectFromFormField = function(fieldName, defaultXmlString) { var sVarName = fieldName + "__xmlobject__"; if (window[sVarName] == null) { var oXmlTextBox = PioWeb.getElementById(fieldName); if (oXmlTextBox != null) { var sXml = PioWeb.trim(oXmlTextBox.value); if (sXml != "") sXml = sXml.replace(/###/g, "<"); else if (defaultXmlString != null && defaultXmlString != "") sXml = defaultXmlString; else return null; var oXml = new PioWebXmlDocument(); oXml.async_set(false); oXml.loadXML(sXml); window[sVarName] = oXml; return oXml; } else if (defaultXmlString != null && defaultXmlString != "") { var oXml = new PioWebXmlDocument(); oXml.async_set(false); oXml.loadXML(defaultXmlString); window[sVarName] = oXml; return oXml; } else { return null; } } else return window[sVarName]; } this.setXmlObjectToFormField = function(fieldName) { var oXmlTextBox = PioWeb.getElementById(fieldName); if (oXmlTextBox != null) { var oXml = this.getXmlObjectFromFormField(fieldName); if (oXml == null) oXmlTextBox.value = ""; else { var sXml = oXml.xml_get(); var sValue = sXml.replace(/\