﻿
var XML={};(function(){XML.ELEMENT_NODE=1;XML.ATTRIBUTE_NODE=2;XML.TEXT_NODE=3;XML.CDATA_SECTION_NODE=4;XML.ENTITY_REFERENCE_NODE=5;XML.ENTITY_NODE=6;XML.PROCESSING_INSTRUCTION_NODE=7;XML.COMMENT_NODE=8;XML.DOCUMENT_NODE=9;XML.DOCUMENT_TYPE_NODE=10;XML.DOCUMENT_FRAGMENT_NODE=11;XML.NOTATION_NODE=12;XML.newDocument=function(rootTagName,namespaceURL){if(!rootTagName)rootTagName="";if(!namespaceURL)namespaceURL="";if(document.implementation&&document.implementation.createDocument){return document.implementation.createDocument(namespaceURL,rootTagName,null);}else{var doc=new ActiveXObject("MSXML2.DOMDocument");if(rootTagName){var prefix="";var tagname=rootTagName;var p=rootTagName.indexOf(':');if(p!=-1){prefix=rootTagName.substring(0,p);tagname=rootTagName.substring(p+1);}
if(namespaceURL){if(!prefix)prefix="a0";}
else prefix="";var text="<"+(prefix?(prefix+":"):"")+tagname+
(namespaceURL?(" xmlns:"+prefix+'="'+namespaceURL+'"'):"")+"/>";doc.loadXML(text);}
return doc;}};XML.getNodeText=function(n){if(n.firstChild&&(n.firstChild.nodeType==XML.TEXT_NODE||n.firstChild.nodeType==XML.CDATA_SECTION_NODE))
return n.firstChild.nodeValue;return'';};XML.getElement=function(n){while(n&&n.nodeType!=XML.ELEMENT_NODE){n=n.nextSibling;}
return n;}
XML.getIntAttribute=function(n,att,def,radix){var v=n.getAttribute(att);if(v){return parseInt(v,radix||10);}
if(typeof(def)!=="undefined"){return def;}
return v;}
XML.getAttribute=function(n,att,def){var v=n.getAttribute(att);if(v){return v;}
if(typeof(def)!=="undefined"){return def;}
return v;}
XML.getChild=function(n,name){var child=XML.getElement(n.firstChild);while(child&&child.nodeName!=name){child=XML.getElement(child.nextSibling);}
return child;}
XML.getXMLString=function(n){try{var serializer=new XMLSerializer();return serializer.serializeToString(n);}
catch(e){return n.xml;}}
XML.createChild=function(n,config){var c=n.ownerDocument.createChild(config.tag);n.appendChild(c);return c;}
XML.appendText=function(n,txt){var txt=n.ownerDocument.createTextNode(txt);n.appendChild(txt);}
XML.autoId=1;XML.id=function(dom){if(Ext.isIE){var id=dom.getAttribute("__id__");if(id)
return id;dom.setAttribute("__id__",++XML.autoId);}else{if(dom.id)
return dom.id;dom.id=++XML.autoId;}
return XML.autoId;}
XML.Node=function(dom){if(dom instanceof XML.Node||dom instanceof XML.Document)
return dom;var id;if(Ext.isIE){if(dom.nodeType!=XML.ELEMENT_NODE){this.dom=dom;return;}
id=dom.getAttribute("__id__");}else{id=dom.id;}
if(id){var c=XML.Node.cache[id];if(c){return c;}
this.dom=dom;this.id=id;}else{this.dom=dom;id=this.id=++XML.autoId;if(Ext.isIE){dom.setAttribute("__id__",this.id)}else{this.dom.id=id;}}
XML.Node.cache[id]=this;}
XML.Node.prototype={destroy:function(){var destroy_=function(p){if(p.nodeType==XML.DOCUMENT_NODE){var dc=XML.Node.docCache;for(var i=0;i<dc.length;++i){if(dc[i]===p){dc.splice(i,1);break;}}}else if(p.nodeType!=XML.COMMENT_NODE){var id=Ext.isIE?p.getAttribute("__id__"):p.id;if(id){delete XML.Node.cache[id];}}
for(var c=p.firstChild;c;c=c.nextSibling){destroy_(c);}}
var dom=this.dom;destroy_(dom);if(dom.parentNode){dom.parentNode.removeChild(dom);}},getDom:function(){return this.dom;},getAttribute:function(att,def){return XML.getAttribute(this.dom,att,def);},getIntAttribute:function(att,def,radix){return XML.getIntAttribute(this.dom,att,def,radix);},setAttribute:function(att,val){this.dom.setAttribute(att,val);},removeAttribute:function(att){return this.dom.removeAttribute(att);},getParent:function(){return XML.Node.get(this.dom.parentNode);},getChild:function(name){return XML.Node.get(XML.getChild(this.dom,name));},getElement:function(name){return XML.Node.get(XML.getElement(this.dom,name));},getFirstChild:function(){return XML.Node.get(XML.getElement(this.dom.firstChild));},getNextSibling:function(){return XML.Node.get(XML.getElement(this.dom.nextSibling));},getPreviousSibling:function(){var n=this.dom.previousSibling;while(n&&n.nodeType!=XML.ELEMENT_NODE){n=n.previousSibling;}
return XML.Node.get(n);},getName:function(){return this.dom.nodeName;},getValue:function(){return this.dom.nodeValue;},getNodeText:function(){return XML.getNodeText(this.dom);},createChild:function(config){var n=this.getOwnerDocument().createElement(config);this.dom.appendChild(n.dom);return n;},removeChild:function(n){return XML.Node.get(this.dom.removeChild(n.dom||n));},remove:function(){return this.getParent().removeChild(this);},appendText:function(txt){var doc=this.dom.nodeType==XML.DOCUMENT_NODE?this.dom:this.dom.ownerDocument;this.dom.appendChild(doc.createTextNode(txt));},appendChild:function(n){this.dom.appendChild(n.dom||n);},replaceChild:function(replacement,toReplace){this.dom.replaceChild(replacement.dom||replacement,toReplace.dom||toReplace);},insertBefore:function(newEl,refEl){return XML.Node.get(this.dom.insertBefore(newEl.dom||newEl,refEl?(refEl.dom||refEl):null));},cloneNode:function(deep){var clone=this.dom.cloneNode(deep);if(Ext.isIE){var stripId=function(p){if(p.nodeType===XML.ELEMENT_NODE){if(p.getAttribute("__id__")){p.removeAttribute("__id__");}}
for(var c=p.firstChild;c;c=c.nextSibling){stripId(c);}}
stripId(clone);}
return XML.Node.get(clone);},getOwnerDocument:function(){return XML.Node.get(this.dom.ownerDocument);},getNodeType:function(){return this.dom.nodeType;},getXML:function(){if(Ext.isIE){var tree=[];var stripId=function(p){if(p.nodeType===XML.ELEMENT_NODE){var id=p.getAttribute("__id__");if(id){tree.push([p,id]);p.removeAttribute("__id__");}}
for(var c=p.firstChild;c;c=c.nextSibling){stripId(c);}}
stripId(this.dom);var xml=this.dom.xml;for(var i=0;i<tree.length;++i){var n=tree[i];n[0].setAttribute("__id__",n[1]);}
return xml;}
return XML.getXMLString(this.dom);},_parseIndex:function(subPath){var index=-1;if(subPath.length>0&&subPath.charAt(subPath.length-1)==']'){var k;for(k=subPath.length-1;k>0;--k){if(subPath.charAt(k-1)=='[')
break;}
index=parseInt(subPath.substr(k,subPath.length-k-1));if(!isNaN(index)){this.parseIndexStripped=subPath.substr(0,k-1);}else if(subPath.charAt(k)!='@'){throw"Invalid index in xpath: "+path;return null;}else{index=-1;}}else{this.parseIndexStripped=subPath;}
return index;},selectSingleNode:function(path,tryCreate){if(path.length==0)
return null;var startAt;if(path.charAt(0)=='/'){startAt=this.getOwnerDocument().dom;path=path.substr(1,path.length-1);}else{startAt=this.dom;}
var pathArr=path.split("/");var thisNode=startAt;var nodeToSeek,condition;for(var i=0;i<pathArr.length;i++){var subPath=pathArr[i];nodeToSeek=subPath;var condition=null;var re=/([^\[]*)\[([^\]]*)\]/;var conditional=subPath.match(re);if(conditional){nodeToSeek=conditional[1];condition=new Array();if(conditional[2].indexOf("=")>0){var expr=conditional[2].split("=");condition["node-name"]=expr[0];condition["equals"]=expr[1].substr(1,expr[1].length-2);}else{var digitsOnly=/^\d+$/;if(conditional[2].match(digitsOnly)){condition["index"]=parseInt(conditional[2]);}else{condition["node-name"]=conditional[2];}}}
var children;if(nodeToSeek.charAt(0)=="@"){children=thisNode.attributes;}else{children=thisNode.childNodes;}
var matchedNode=null;var matchIndex=0;for(var j=0;j<children.length;j++){if(((children[j].nodeType==XML.ELEMENT_NODE)&&(nodeToSeek=="*"||children[j].nodeName==nodeToSeek))||((children[j].nodeType==XML.ATTRIBUTE_NODE)&&(nodeToSeek=="@*"||"@"+children[j].nodeName==nodeToSeek))){if(condition){if(condition["index"]&&(++matchIndex==condition["index"])){matchedNode=children[j];break;}
if(condition["node-name"]){var prepend="";var childNodes=children[j].childNodes;if(condition["node-name"].substr(0,1)=="@"){childNodes=children[j].attributes;prepend="@";}
for(var k=0;k<childNodes.length;k++){var n=childNodes[k];if(prepend+n.nodeName==condition["node-name"]){if(((condition["equals"])&&(n.nodeValue==condition["equals"]))||(!condition["equals"])){matchedNode=children[j];break;}}}}}else{matchedNode=children[j];break;}}else if((children[j].nodeType==XML.TEXT_NODE)&&(nodeToSeek=="#text")){matchedNode=children[j];break;}}
if(!matchedNode){if(!tryCreate){return null;}
if(nodeToSeek.charAt(0)=="@"){matchedNode=this.doc.createAttribute(nodeToSeek.substr(1));thisNode.setAttributeNode(matchedNode);}else{matchedNode=this.doc.createElement(nodeToSeek);thisNode.appendChild(matchedNode);if(condition&&condition["node-name"]&&condition["equals"]&&(condition["node-name"].charAt(0)=="@")){matchedNode.setAttribute(condition["node-name"].substr(1),condition["equals"]);}}}
thisNode=matchedNode;}
return XML.Node.get(matchedNode);},selectNodes:function(path){if(path.length==0)
return null;var startAt;if(path.charAt(0)=='/'){startAt=this.getOwnerDocument().dom;path=path.substr(1,path.length-1);}else{startAt=this.dom;}
var pathArr=path.split("/");var found=[startAt];for(var i=0;i<pathArr.length;i++){var subPath=pathArr[i];var index=this._parseIndex(subPath);subPath=this.parseIndexStripped;var foundChildren=new Array()
for(var j=0;j<found.length;j++){foundChildren[j]=found[j].childNodes;}
found=new Array();var matchIndex=0;for(var j=0;j<foundChildren.length;j++){for(var k=0;k<foundChildren[j].length;k++){if(((foundChildren[j][k].nodeType==XML.ELEMENT_NODE)&&(subPath=="*"||(foundChildren[j][k].nodeName==subPath)))||((foundChildren[j][k].nodeType==XML.TEXT_NODE)&&(subPath=="#text"))){if(index==-1){found.push(foundChildren[j][k]);}else if(++matchIndex==index){found.push(foundChildren[j][k]);break;}}}}
if(found.length==0){break;}}
for(var i=0;i<found.length;++i){found[i]=XML.Node.get(found[i]);}
return found;}};XML.Node.cache={};XML.Node.docCache=[];XML.Node.get=function(n){if(n===null||n instanceof XML.Node||n instanceof XML.Document){return n;}
if(n.nodeType==XML.DOCUMENT_NODE){for(var i=0;i<XML.Node.docCache.length;++i){if(XML.Node.docCache[i].dom==n){return XML.Node.docCache[i];}}
return new XML.Document(n);}
var id;if(Ext.isIE){if(n.nodeType!=XML.ELEMENT_NODE){return new XML.Node(n);}
id=n.getAttribute("__id__");}else{id=n.id;}
if(id){var c=XML.Node.cache[id];if(c){return c;}}
return new XML.Node(n);}
XML.Node.getDom=function(n){if(n&&n.dom)
return n.dom;return n;};XML.Document=function(dom){if(typeof(dom)==="string"){if(window.DOMParser){var parser=new DOMParser();dom=parser.parseFromString(dom,"text/xml");}else if(window.ActiveXObject){var xml=dom;dom=new ActiveXObject("Microsoft.XMLDOM");dom.async=false;dom.loadXML(xml);}}
this.defaultNS="";this.dom=dom||XML.newDocument();XML.Node.docCache.push(this);}
Ext.extend(XML.Document,XML.Node,{getDefaultNS:function(){return this.defaultNS;},setDefaultNS:function(ns){this.defaultNS=ns;},getOwnerDocument:function(){return this;},getRootNode:function(){return new XML.Node(this.dom);},createElement:function(config){var ns=config.ns||this.defaultNS;var dom;if(ns){if(Ext.isIE){dom=this.dom.createNode(XML.ELEMENT_NODE,config.tag,ns);}else{dom=this.dom.createElementNS(ns,config.tag);}}else{dom=this.dom.createElement(config.tag);}
var n=new XML.Node(dom);if(config.attributes){for(var att in config.attributes){n.setAttribute(att,config.attributes[att]);}}
if(config.text){n.appendChild(this.dom.createTextNode(config.text));}
if(config.children){for(var i=0;i<config.children.length;++i){var c=config.children[i];if(c instanceof XML.Node){n.appendChild(c);}else{n.createChild(c);}}}
return n;},createTextNode:function(txt){return this.dom.createTextNode(txt);},clone:function(){var newDoc=new XML.Document();newDoc.appendChild(XML.Node.get(this.dom.documentElement).cloneNode(true));return newDoc;}});}());