function el(w){return document.getElementById(w);}function px(w){return w+"px";}function stringSplit(e,o){var U=e.indexOf(o);if(U==-1){return [e];}var x=[];x.push(e.substr(0,U));while(U!=-1){var w=e.indexOf(o,U+1);if(w!=-1){x.push(e.substr(U+1,w-U-1));}else{x.push(e.substr(U+1));}U=w;}return x;}function xmlValue(e){if(!e){return "";}var w="";if(e.nodeType==DOM_TEXT_NODE||e.nodeType==DOM_CDATA_SECTION_NODE||e.nodeType==DOM_ATTRIBUTE_NODE){w+=e.nodeValue;}else{if(e.nodeType==DOM_ELEMENT_NODE||e.nodeType==DOM_DOCUMENT_NODE||e.nodeType==DOM_DOCUMENT_FRAGMENT_NODE){for(var U=0;U<e.childNodes.length;++U){w+=arguments.callee(e.childNodes[U]);}}}return w;}function xmlText(c){var U="";if(c.nodeType==DOM_TEXT_NODE){U+=xmlEscapeText(c.nodeValue);}else{if(c.nodeType==DOM_ELEMENT_NODE){U+="<"+c.nodeName;for(var e=0;e<c.attributes.length;++e){var w=c.attributes[e];if(w&&w.nodeName&&w.nodeValue){U+=" "+w.nodeName;U+="=\""+xmlEscapeAttr(w.nodeValue)+"\"";}}if(c.childNodes.length==0){U+="/>";}else{U+=">";for(var e=0;e<c.childNodes.length;++e){U+=arguments.callee(c.childNodes[e]);}U+="</"+c.nodeName+">";}}else{if(c.nodeType==DOM_DOCUMENT_NODE||c.nodeType==DOM_DOCUMENT_FRAGMENT_NODE){for(var e=0;e<c.childNodes.length;++e){U+=arguments.callee(c.childNodes[e]);}}}}return U;}function mapExec(e,U){for(var w=0;w<e.length;++w){U(e[w]);}}function mapExpr(c,e){var w=[];for(var U=0;U<c.length;++U){w.push(e(c[U]));}return w;}function reverseInplace(c){for(var w=0;w<c.length/2;++w){var e=c[w];var U=c.length-w-1;c[w]=c[U];c[U]=e;}}function copyArray(e,U){for(var w=0;w<U.length;++w){e.push(U[w]);}}function assert(w){if(!w){throw "assertion failed";}}var DOM_ELEMENT_NODE=1;var DOM_ATTRIBUTE_NODE=2;var DOM_TEXT_NODE=3;var DOM_CDATA_SECTION_NODE=4;var DOM_ENTITY_REFERENCE_NODE=5;var DOM_ENTITY_NODE=6;var DOM_PROCESSING_INSTRUCTION_NODE=7;var DOM_COMMENT_NODE=8;var DOM_DOCUMENT_NODE=9;var DOM_DOCUMENT_TYPE_NODE=10;var DOM_DOCUMENT_FRAGMENT_NODE=11;var DOM_NOTATION_NODE=12;var xpathdebug=false;var xsltdebug=false;function xmlEscapeText(w){return w.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");}function xmlEscapeAttr(w){return xmlEscapeText(w).replace(/\"/g,"&quot;");}function xmlEscapeTags(w){return w.replace(/</g,"&lt;").replace(/>/g,"&gt;");}var logging__=true;function Log(){}Log.lines=[];Log.write=function(w){if(logging__){this.lines.push(xmlEscapeText(w));this.show();}};Log.writeXML=function(U){if(logging__){var c=U.replace(/</g,"\n<");var e=xmlEscapeText(c);var w=e.replace(/\s*\n(\s|\n)*/g,"<br/>");this.lines.push(w);this.show();}};Log.writeRaw=function(w){if(logging__){this.lines.push(w);this.show();}};Log.clear=function(){if(logging__){var w=this.div();w.innerHTML="";this.lines=[];}};Log.show=function(){var w=this.div();w.innerHTML+=this.lines.join("<br/>")+"<br/>";this.lines=[];w.scrollTop=w.scrollHeight;};Log.div=function(){var w=document.getElementById("log");if(!w){w=document.createElement("div");w.id="log";w.style.position="absolute";w.style.right="5px";w.style.top="5px";w.style.width="250px";w.style.height="150px";w.style.overflow="auto";w.style.backgroundColor="#f0f0f0";w.style.border="1px solid gray";w.style.fontSize="10px";w.style.padding="5px";document.body.appendChild(w);}return w;};function Timer(){}Timer.start=function(){};Timer.end=function(){};function xmlResolveEntities(o){var M=stringSplit(o,"&");var w=M[0];for(var U=1;U<M.length;++U){var x=stringSplit(M[U],";");if(x.length==1){w+=M[U];continue;}var c;switch(x[0]){case "lt":c="<";break;case "gt":c=">";break;case "amp":c="&";break;case "quot":c="\"";break;case "apos":c="'";break;case "nbsp":c=String.fromCharCode(160);break;default:var e=window.document.createElement("span");e.innerHTML="&"+x[0]+"; ";c=e.childNodes[0].nodeValue.charAt(0);}w+=c+x[1];}return w;}function xmlParse(U){Timer.start("xmlparse");var M=/\/$/;var j=/^([\w:-]*)/;var o=/([\w:-]+)\s?=\s?('([^\']*)'|"([^\"]*)")/g;var w=new XDocument();var P=w;var c=[];var Z=P;c.push(Z);var n=stringSplit(U,"<");for(var r=1;r<n.length;++r){var e=stringSplit(n[r],">");var O=e[0];var A=xmlResolveEntities(e[1]||"");if(O.charAt(0)=="/"){c.pop();Z=c[c.length-1];}else{if(O.charAt(0)=="?"){}else{if(O.charAt(0)=="!"){}else{var b=O.match(M);var p=j.exec(O)[1];var g=w.createElement(p);var C;while(C=o.exec(O)){var W=xmlResolveEntities(C[3]||C[4]||"");g.setAttribute(C[1],W);}if(b){Z.appendChild(g);}else{Z.appendChild(g);Z=g;c.push(g);}}}}if(A&&Z!=P){Z.appendChild(w.createTextNode(A));}}Timer.end("xmlparse");return P;}function XNode(e,U,c,w){this.attributes=[];this.childNodes=[];XNode.init.call(this,e,U,c,w);}XNode.init=function(e,U,c,w){this.nodeType=e-0;this.nodeName=""+U;this.nodeValue=""+c;this.ownerDocument=w;this.firstChild=null;this.lastChild=null;this.nextSibling=null;this.previousSibling=null;this.parentNode=null;};XNode.unused_=[];XNode.recycle=function(U){if(!U){return ;}if(U.constructor==XDocument){XNode.recycle(U.documentElement);return ;}if(U.constructor!=this){return ;}XNode.unused_.push(U);for(var w=0;w<U.attributes.length;++w){XNode.recycle(U.attributes[w]);}for(var e=0;e<U.childNodes.length;++e){XNode.recycle(U.childNodes[e]);}U.attributes.length=0;U.childNodes.length=0;XNode.init.call(U,0,"","",null);};XNode.create=function(e,U,x,w){if(XNode.unused_.length>0){var c=XNode.unused_.pop();XNode.init.call(c,e,U,x,w);return c;}else{return new XNode(e,U,x,w);}};XNode.prototype.appendChild=function(w){if(this.childNodes.length==0){this.firstChild=w;}w.previousSibling=this.lastChild;w.nextSibling=null;if(this.lastChild){this.lastChild.nextSibling=w;}w.parentNode=this;this.lastChild=w;this.childNodes.push(w);};XNode.prototype.replaceChild=function(U,c){if(c==U){return ;}for(var w=0;w<this.childNodes.length;++w){if(this.childNodes[w]==c){this.childNodes[w]=U;var e=c.parentNode;c.parentNode=null;U.parentNode=e;e=c.previousSibling;c.previousSibling=null;U.previousSibling=e;if(U.previousSibling){U.previousSibling.nextSibling=U;}e=c.nextSibling;c.nextSibling=null;U.nextSibling=e;if(U.nextSibling){U.nextSibling.previousSibling=U;}if(this.firstChild==c){this.firstChild=U;}if(this.lastChild==c){this.lastChild=U;}break;}}};XNode.prototype.insertBefore=function(U,e){if(e==U){return ;}if(e.parentNode!=this){return ;}if(U.parentNode){U.parentNode.removeChild(U);}var o=[];for(var w=0;w<this.childNodes.length;++w){var x=this.childNodes[w];if(x==e){o.push(U);U.parentNode=this;U.previousSibling=e.previousSibling;e.previousSibling=U;if(U.previousSibling){U.previousSibling.nextSibling=U;}U.nextSibling=e;if(this.firstChild==e){this.firstChild=U;}}o.push(x);}this.childNodes=o;};XNode.prototype.removeChild=function(U){var x=[];for(var w=0;w<this.childNodes.length;++w){var e=this.childNodes[w];if(e!=U){x.push(e);}else{if(e.previousSibling){e.previousSibling.nextSibling=e.nextSibling;}if(e.nextSibling){e.nextSibling.previousSibling=e.previousSibling;}if(this.firstChild==e){this.firstChild=e.nextSibling;}if(this.lastChild==e){this.lastChild=e.previousSibling;}}}this.childNodes=x;};XNode.prototype.hasAttributes=function(){return this.attributes.length>0;};XNode.prototype.setAttribute=function(w,e){for(var U=0;U<this.attributes.length;++U){if(this.attributes[U].nodeName==w){this.attributes[U].nodeValue=""+e;return ;}}this.attributes.push(new XNode(DOM_ATTRIBUTE_NODE,w,e));};XNode.prototype.getAttribute=function(w){for(var U=0;U<this.attributes.length;++U){if(this.attributes[U].nodeName==w){return this.attributes[U].nodeValue;}}return null;};XNode.prototype.removeAttribute=function(U){var w=[];for(var e=0;e<this.attributes.length;++e){if(this.attributes[e].nodeName!=U){w.push(this.attributes[e]);}}this.attributes=w;};function XDocument(){XNode.call(this,DOM_DOCUMENT_NODE,"#document",null,this);this.documentElement=null;}XDocument.prototype=new XNode(DOM_DOCUMENT_NODE,"#document");XDocument.prototype.clear=function(){XNode.recycle(this.documentElement);this.documentElement=null;};XDocument.prototype.appendChild=function(w){XNode.prototype.appendChild.call(this,w);this.documentElement=this.childNodes[0];};XDocument.prototype.createElement=function(w){return XNode.create(DOM_ELEMENT_NODE,w,null,this);};XDocument.prototype.createDocumentFragment=function(){return XNode.create(DOM_DOCUMENT_FRAGMENT_NODE,"#document-fragment",null,this);};XDocument.prototype.createTextNode=function(w){return XNode.create(DOM_TEXT_NODE,"#text",w,this);};XDocument.prototype.createAttribute=function(w){return XNode.create(DOM_ATTRIBUTE_NODE,w,null,this);};XDocument.prototype.createComment=function(w){return XNode.create(DOM_COMMENT_NODE,"#comment",w,this);};XNode.prototype.getElementsByTagName=function(w,e){if(!e){e=[];}if(this.nodeName==w){e.push(this);}for(var U=0;U<this.childNodes.length;++U){this.childNodes[U].getElementsByTagName(w,e);}return e;};function xpathParse(g){if(xpathdebug){Log.write("XPath parse "+g);}xpathParseInit();var w=xpathCacheLookup(g);if(w){if(xpathdebug){Log.write(" ... cached");}return w;}if(g.match(/^(\$|@)?\w+$/i)){var b=makeSimpleExpr(g);xpathParseCache[g]=b;if(xpathdebug){Log.write(" ... simple");}return b;}if(g.match(/^\w+(\/\w+)*$/i)){var b=makeSimpleExpr2(g);xpathParseCache[g]=b;if(xpathdebug){Log.write(" ... simple 2");}return b;}var n=g;if(xpathdebug){Timer.start("XPath parse",n);}var C=[];var U=null;var M=null;var e=false;var Z=0;var o=0;var r=0;while(!e){Z++;g=g.replace(/^\s*/,"");M=U;U=null;var A=null;var x="";for(var c=0;c<xpathTokenRules.length;++c){var P=xpathTokenRules[c].re.exec(g);o++;if(P&&P.length>0&&P[0].length>x.length){A=xpathTokenRules[c];x=P[0];break;}}if(A&&(A==TOK_DIV||A==TOK_MOD||A==TOK_AND||A==TOK_OR)&&(!M||M.tag==TOK_AT||M.tag==TOK_DSLASH||M.tag==TOK_SLASH||M.tag==TOK_AXIS||M.tag==TOK_DOLLAR)){A=TOK_QNAME;}if(A){g=g.substr(x.length);if(xpathdebug){Log.write("token: "+x+" -- "+A.label);}U={tag:A,match:x,prec:A.prec?A.prec:0,expr:makeTokenExpr(x)};}else{if(xpathdebug){Log.write("DONE");}e=true;}while(xpathReduce(C,U)){r++;if(xpathdebug){Log.write("stack: "+stackToString(C));}}}if(xpathdebug){Log.write(stackToString(C));}if(C.length!=1){throw "XPath parse error "+n+":\n"+stackToString(C);}var P=C[0].expr;xpathParseCache[n]=P;if(xpathdebug){Timer.end("XPath parse",n);}if(xpathdebug){Log.write("XPath parse: "+Z+" / "+o+" / "+r);}return P;}var xpathParseCache={};function xpathCacheLookup(w){return xpathParseCache[w];}function xpathReduce(Z,w){var x=null;if(Z.length>0){var o=Z[Z.length-1];var b=xpathRules[o.tag.key];if(b){for(var U=0;U<b.length;++U){var M=b[U];var e=xpathMatchStack(Z,M[1]);if(e.length){x={tag:M[0],rule:M,match:e};x.prec=xpathGrammarPrecedence(x);break;}}}}var c;if(x&&(!w||x.prec>w.prec||(w.tag.left&&x.prec>=w.prec))){for(var U=0;U<x.match.matchlength;++U){Z.pop();}if(xpathdebug){Log.write("reduce "+x.tag.label+" "+x.prec+" ahead "+(w?w.tag.label+" "+w.prec+(w.tag.left?" left":""):" none "));}var n=mapExpr(x.match,function(A){return A.expr;});x.expr=x.rule[3].apply(null,n);Z.push(x);c=true;}else{if(w){if(xpathdebug){Log.write("shift "+w.tag.label+" "+w.prec+(w.tag.left?" left":"")+" over "+(x?x.tag.label+" "+x.prec:" none"));}Z.push(w);}c=false;}return c;}function xpathMatchStack(Z,M){var c=Z.length;var o=M.length;var U,b;var x=[];x.matchlength=0;var e=0;for(U=o-1,b=c-1;U>=0&&b>=0;--U,b-=e){e=0;var w=[];if(M[U]==Q_MM){U-=1;x.push(w);while(b-e>=0&&Z[b-e].tag==M[U]){w.push(Z[b-e]);e+=1;x.matchlength+=1;}}else{if(M[U]==Q_01){U-=1;x.push(w);while(b-e>=0&&e<2&&Z[b-e].tag==M[U]){w.push(Z[b-e]);e+=1;x.matchlength+=1;}}else{if(M[U]==Q_1M){U-=1;x.push(w);if(Z[b].tag==M[U]){while(b-e>=0&&Z[b-e].tag==M[U]){w.push(Z[b-e]);e+=1;x.matchlength+=1;}}else{return [];}}else{if(Z[b].tag==M[U]){x.push(Z[b]);e+=1;x.matchlength+=1;}else{return [];}}}}reverseInplace(w);w.expr=mapExpr(w,function(n){return n.expr;});}reverseInplace(x);if(U==-1){return x;}else{return [];}}function xpathTokenPrecedence(w){return w.prec||2;}function xpathGrammarPrecedence(x){var U=0;if(x.rule){if(x.rule.length>=3&&x.rule[2]>=0){U=x.rule[2];}else{for(var e=0;e<x.rule[1].length;++e){var c=xpathTokenPrecedence(x.rule[1][e]);U=Math.max(U,c);}}}else{if(x.tag){U=xpathTokenPrecedence(x.tag);}else{if(x.length){for(var w=0;w<x.length;++w){var c=xpathGrammarPrecedence(x[w]);U=Math.max(U,c);}}}}return U;}function stackToString(w){var U="";for(var e=0;e<w.length;++e){if(U){U+="\n";}U+=w[e].tag.label;}return U;}function ExprContext(c,w,e,U){this.node=c;this.position=w||0;this.nodelist=e||[c];this.variables={};this.parent=U||null;this.root=U?U.root:c.ownerDocument;}ExprContext.prototype.clone=function(e,w,U){return new ExprContext(e||this.node,typeof w!="undefined"?w:this.position,U||this.nodelist,this);};ExprContext.prototype.setVariable=function(w,U){this.variables[w]=U;};ExprContext.prototype.getVariable=function(w){if(typeof this.variables[w]!="undefined"){return this.variables[w];}else{if(this.parent){return this.parent.getVariable(w);}else{return null;}}};ExprContext.prototype.setNode=function(U,w){this.node=U;this.position=w;};function StringValue(w){this.value=w;this.type="string";}StringValue.prototype.stringValue=function(){return this.value;};StringValue.prototype.booleanValue=function(){return this.value.length>0;};StringValue.prototype.numberValue=function(){return this.value-0;};StringValue.prototype.nodeSetValue=function(){throw this+" "+Error().stack;};function BooleanValue(w){this.value=w;this.type="boolean";}BooleanValue.prototype.stringValue=function(){return ""+this.value;};BooleanValue.prototype.booleanValue=function(){return this.value;};BooleanValue.prototype.numberValue=function(){return this.value?1:0;};BooleanValue.prototype.nodeSetValue=function(){throw this+" "+Error().stack;};function NumberValue(w){this.value=w;this.type="number";}NumberValue.prototype.stringValue=function(){return ""+this.value;};NumberValue.prototype.booleanValue=function(){return !!this.value;};NumberValue.prototype.numberValue=function(){return this.value-0;};NumberValue.prototype.nodeSetValue=function(){throw this+" "+Error().stack;};function NodeSetValue(w){this.value=w;this.type="node-set";}NodeSetValue.prototype.stringValue=function(){if(this.value.length==0){return "";}else{return xmlValue(this.value[0]);}};NodeSetValue.prototype.booleanValue=function(){return this.value.length>0;};NodeSetValue.prototype.numberValue=function(){return this.stringValue()-0;};NodeSetValue.prototype.nodeSetValue=function(){return this.value;};function TokenExpr(w){this.value=w;}TokenExpr.prototype.evaluate=function(){return new StringValue(this.value);};function LocationExpr(){this.absolute=false;this.steps=[];}LocationExpr.prototype.appendStep=function(w){this.steps.push(w);};LocationExpr.prototype.prependStep=function(e){var w=this.steps;this.steps=[e];for(var U=0;U<w.length;++U){this.steps.push(w[U]);}};LocationExpr.prototype.evaluate=function(w){var e;if(this.absolute){e=w.root;}else{e=w.node;}var U=[];xPathStep(U,this.steps,0,e,w);return new NodeSetValue(U);};function xPathStep(w,x,U,o,Z){var b=x[U];var c=Z.clone(o);var M=b.evaluate(c).nodeSetValue();for(var e=0;e<M.length;++e){if(U==x.length-1){w.push(M[e]);}else{xPathStep(w,x,U+1,M[e],Z);}}}function StepExpr(U,e,w){this.axis=U;this.nodetest=e;this.predicate=w||[];}StepExpr.prototype.appendPredicate=function(w){this.predicate.push(w);};StepExpr.prototype.evaluate=function(w){var e=w.node;var o=[];if(this.axis==xpathAxis.ANCESTOR_OR_SELF){o.push(e);for(var Z=e.parentNode;Z;Z=e.parentNode){o.push(Z);}}else{if(this.axis==xpathAxis.ANCESTOR){for(var Z=e.parentNode;Z;Z=e.parentNode){o.push(Z);}}else{if(this.axis==xpathAxis.ATTRIBUTE){copyArray(o,e.attributes);}else{if(this.axis==xpathAxis.CHILD){copyArray(o,e.childNodes);}else{if(this.axis==xpathAxis.DESCENDANT_OR_SELF){o.push(e);xpathCollectDescendants(o,e);}else{if(this.axis==xpathAxis.DESCENDANT){xpathCollectDescendants(o,e);}else{if(this.axis==xpathAxis.FOLLOWING){for(var Z=e.parentNode;Z;Z=Z.parentNode){for(var M=Z.nextSibling;M;M=M.nextSibling){o.push(M);xpathCollectDescendants(o,M);}}}else{if(this.axis==xpathAxis.FOLLOWING_SIBLING){for(var Z=e.nextSibling;Z;Z=e.nextSibling){o.push(Z);}}else{if(this.axis==xpathAxis.NAMESPACE){alert("not implemented: axis namespace");}else{if(this.axis==xpathAxis.PARENT){if(e.parentNode){o.push(e.parentNode);}}else{if(this.axis==xpathAxis.PRECEDING){for(var Z=e.parentNode;Z;Z=Z.parentNode){for(var M=Z.previousSibling;M;M=M.previousSibling){o.push(M);xpathCollectDescendantsReverse(o,M);}}}else{if(this.axis==xpathAxis.PRECEDING_SIBLING){for(var Z=e.previousSibling;Z;Z=e.previousSibling){o.push(Z);}}else{if(this.axis==xpathAxis.SELF){o.push(e);}else{throw "ERROR -- NO SUCH AXIS: "+this.axis;}}}}}}}}}}}}}var U=o;o=[];for(var c=0;c<U.length;++c){var Z=U[c];if(this.nodetest.evaluate(w.clone(Z,c,U)).booleanValue()){o.push(Z);}}for(var c=0;c<this.predicate.length;++c){var U=o;o=[];for(var x=0;x<U.length;++x){var Z=U[x];if(this.predicate[c].evaluate(w.clone(Z,x,U)).booleanValue()){o.push(Z);}}}return new NodeSetValue(o);};function NodeTestAny(){this.value=new BooleanValue(true);}NodeTestAny.prototype.evaluate=function(w){return this.value;};function NodeTestElement(){}NodeTestElement.prototype.evaluate=function(w){return new BooleanValue(w.node.nodeType==DOM_ELEMENT_NODE);};function NodeTestText(){}NodeTestText.prototype.evaluate=function(w){return new BooleanValue(w.node.nodeType==DOM_TEXT_NODE);};function NodeTestComment(){}NodeTestComment.prototype.evaluate=function(w){return new BooleanValue(w.node.nodeType==DOM_COMMENT_NODE);};function NodeTestPI(w){this.target=w;}NodeTestPI.prototype.evaluate=function(w){return new BooleanValue(w.node.nodeType==DOM_PROCESSING_INSTRUCTION_NODE&&(!this.target||w.node.nodeName==this.target));};function NodeTestNC(w){this.regex=new RegExp("^"+w+":");this.nsprefix=w;}NodeTestNC.prototype.evaluate=function(w){var U=w.node;return new BooleanValue(this.regex.match(U.nodeName));};function NodeTestName(w){this.name=w;}NodeTestName.prototype.evaluate=function(w){var U=w.node;return new BooleanValue(U.nodeName==this.name);};function PredicateExpr(w){this.expr=w;}PredicateExpr.prototype.evaluate=function(w){var U=this.expr.evaluate(w);if(U.type=="number"){return new BooleanValue(w.position==U.numberValue()-1);}else{return new BooleanValue(U.booleanValue());}};function FunctionCallExpr(w){this.name=w;this.args=[];}FunctionCallExpr.prototype.appendArg=function(w){this.args.push(w);};FunctionCallExpr.prototype.evaluate=function(w){var U=""+this.name.value;var e=this.xpathfunctions[U];if(e){return e.call(this,w);}else{Log.write("XPath NO SUCH FUNCTION "+U);return new BooleanValue(false);}};FunctionCallExpr.prototype.xpathfunctions={"last":function(w){assert(this.args.length==0);return new NumberValue(w.nodelist.length);},"position":function(w){assert(this.args.length==0);return new NumberValue(w.position+1);},"count":function(w){assert(this.args.length==1);var U=this.args[0].evaluate(w);return new NumberValue(U.nodeSetValue().length);},"id":function(A){assert(this.args.length==1);var x=this.args.evaluate(A);var o=[];var w;if(x.type=="node-set"){w=[];for(var c=0;c<x.length;++c){var Z=xmlValue(x[c]).split(/\s+/);for(var b=0;b<Z.length;++b){w.push(Z[b]);}}}else{w=x.split(/\s+/);}var M=A.node.ownerDocument;for(var c=0;c<w.length;++c){var U=M.getElementById(w[c]);if(U){o.push(U);}}return new NodeSetValue(o);},"local-name":function(w){alert("not implmented yet: XPath function local-name()");},"namespace-uri":function(w){alert("not implmented yet: XPath function namespace-uri()");},"name":function(w){assert(this.args.length==1||this.args.length==0);var U;if(this.args.length==0){U=[w.node];}else{U=this.args[0].evaluate(w).nodeSetValue();}if(U.length==0){return new StringValue("");}else{return new StringValue(U[0].nodeName);}},"string":function(w){assert(this.args.length==1||this.args.length==0);if(this.args.length==0){return new StringValue(new NodeSetValue([w.node]).stringValue());}else{return new StringValue(this.args[0].evaluate(w).stringValue());}},"concat":function(w){var U="";for(var e=0;e<this.args.length;++e){U+=this.args[e].evaluate(w).stringValue();}return new StringValue(U);},"starts-with":function(w){assert(this.args.length==2);var e=this.args[0].evaluate(w).stringValue();var U=this.args[1].evaluate(w).stringValue();return new BooleanValue(e.indexOf(U)==0);},"contains":function(w){assert(this.args.length==2);var e=this.args[0].evaluate(w).stringValue();var U=this.args[1].evaluate(w).stringValue();return new BooleanValue(e.indexOf(U)!=-1);},"substring-before":function(w){assert(this.args.length==2);var x=this.args[0].evaluate(w).stringValue();var c=this.args[1].evaluate(w).stringValue();var e=x.indexOf(c);var U;if(e==-1){U="";}else{U=x.substr(0,e);}return new StringValue(U);},"substring-after":function(w){assert(this.args.length==2);var x=this.args[0].evaluate(w).stringValue();var c=this.args[1].evaluate(w).stringValue();var e=x.indexOf(c);var U;if(e==-1){U="";}else{U=x.substr(e+c.length);}return new StringValue(U);},"substring":function(w){assert(this.args.length==2||this.args.length==3);var o=this.args[0].evaluate(w).stringValue();var c=this.args[1].evaluate(w).numberValue();var e;if(this.args.length==2){var M=Math.max(0,Math.round(c)-1);e=o.substr(M);}else{var U=this.args[2].evaluate(w).numberValue();var Z=Math.round(c)-1;var M=Math.max(0,Z);var x=Math.round(U)-Math.max(0,-Z);e=o.substr(M,x);}return new StringValue(e);},"string-length":function(w){var U;if(this.args.length>0){U=this.args[0].evaluate(w).stringValue();}else{U=new NodeSetValue([w.node]).stringValue();}return new NumberValue(U.length);},"normalize-space":function(w){var U;if(this.args.length>0){U=this.args[0].evaluate(w).stringValue();}else{U=new NodeSetValue([w.node]).stringValue();}U=U.replace(/^\s*/,"").replace(/\s*$/,"").replace(/\s+/g," ");return new StringValue(U);},"translate":function(w){assert(this.args.length==3);var x=this.args[0].evaluate(w).stringValue();var c=this.args[1].evaluate(w).stringValue();var U=this.args[2].evaluate(w).stringValue();for(var e=0;e<c.length;++e){x=x.replace(new RegExp(c.charAt(e),"g"),U.charAt(e));}return new StringValue(x);},"boolean":function(w){assert(this.args.length==1);return new BooleanValue(this.args[0].evaluate(w).booleanValue());},"not":function(w){assert(this.args.length==1);var U=!this.args[0].evaluate(w).booleanValue();return new BooleanValue(U);},"true":function(w){assert(this.args.length==0);return new BooleanValue(true);},"false":function(w){assert(this.args.length==0);return new BooleanValue(false);},"lang":function(w){assert(this.args.length==1);var e=this.args[0].evaluate(w).stringValue();var x;var c=w.node;while(c&&c!=c.parentNode){x=c.getAttribute("xml:lang");if(x){break;}c=c.parentNode;}if(!x){return new BooleanValue(false);}else{var U=new RegExp("^"+e+"$","i");return new BooleanValue(x.match(U)||x.replace(/_.*$/,"").match(U));}},"number":function(w){assert(this.args.length==1||this.args.length==0);if(this.args.length==1){return new NumberValue(this.args[0].evaluate(w).numberValue());}else{return new NumberValue(new NodeSetValue([w.node]).numberValue());}},"sum":function(w){assert(this.args.length==1);var c=this.args[0].evaluate(w).nodeSetValue();var e=0;for(var U=0;U<c.length;++U){e+=xmlValue(c[U])-0;}return new NumberValue(e);},"floor":function(w){assert(this.args.length==1);var U=this.args[0].evaluate(w).numberValue();return new NumberValue(Math.floor(U));},"ceiling":function(w){assert(this.args.length==1);var U=this.args[0].evaluate(w).numberValue();return new NumberValue(Math.ceil(U));},"round":function(w){assert(this.args.length==1);var U=this.args[0].evaluate(w).numberValue();return new NumberValue(Math.round(U));},"ext-join":function(w){assert(this.args.length==2);var U=this.args[0].evaluate(w).nodeSetValue();var x=this.args[1].evaluate(w).stringValue();var e="";for(var c=0;c<U.length;++c){if(e){e+=x;}e+=xmlValue(U[c]);}return new StringValue(e);},"ext-if":function(w){assert(this.args.length==3);if(this.args[0].evaluate(w).booleanValue()){return this.args[1].evaluate(w);}else{return this.args[2].evaluate(w);}},"ext-sprintf":function(w){assert(this.args.length>=1);var U=[];for(var e=0;e<this.args.length;++e){U.push(this.args[e].evaluate(w).stringValue());}return new StringValue(sprintf.apply(null,U));},"ext-cardinal":function(w){assert(this.args.length>=1);var x=this.args[0].evaluate(w).numberValue();var U=[];for(var e=0;e<x;++e){U.push(w.node);}return new NodeSetValue(U);}};function UnionExpr(U,w){this.expr1=U;this.expr2=w;}UnionExpr.prototype.evaluate=function(e){var U=this.expr1.evaluate(e).nodeSetValue();var w=this.expr2.evaluate(e).nodeSetValue();var o=U.length;for(var c=0;c<w.length;++c){for(var x=0;x<o;++x){if(U[x]==w[c]){x=o;}}U.push(w[c]);}return new NodeSetValue(w);};function PathExpr(U,w){this.filter=U;this.rel=w;}PathExpr.prototype.evaluate=function(U){var c=this.filter.evaluate(U).nodeSetValue();var w=[];for(var x=0;x<c.length;++x){var e=this.rel.evaluate(U.clone(c[x],x,c)).nodeSetValue();for(var o=0;o<e.length;++o){w.push(e[o]);}}return new NodeSetValue(w);};function FilterExpr(U,w){this.expr=U;this.predicate=w;}FilterExpr.prototype.evaluate=function(w){var e=this.expr.evaluate(w).nodeSetValue();for(var x=0;x<this.predicate.length;++x){var U=e;e=[];for(var c=0;c<U.length;++c){var o=U[c];if(this.predicate[x].evaluate(w.clone(o,c,U)).booleanValue()){e.push(o);}}}return new NodeSetValue(e);};function UnaryMinusExpr(w){this.expr=w;}UnaryMinusExpr.prototype.evaluate=function(w){return new NumberValue(-this.expr.evaluate(w).numberValue());};function BinaryExpr(U,e,w){this.expr1=U;this.expr2=w;this.op=e;}BinaryExpr.prototype.evaluate=function(w){var U;switch(this.op.value){case "or":U=new BooleanValue(this.expr1.evaluate(w).booleanValue()||this.expr2.evaluate(w).booleanValue());break;case "and":U=new BooleanValue(this.expr1.evaluate(w).booleanValue()&&this.expr2.evaluate(w).booleanValue());break;case "+":U=new NumberValue(this.expr1.evaluate(w).numberValue()+this.expr2.evaluate(w).numberValue());break;case "-":U=new NumberValue(this.expr1.evaluate(w).numberValue()-this.expr2.evaluate(w).numberValue());break;case "*":U=new NumberValue(this.expr1.evaluate(w).numberValue()*this.expr2.evaluate(w).numberValue());break;case "mod":U=new NumberValue(this.expr1.evaluate(w).numberValue()%this.expr2.evaluate(w).numberValue());break;case "div":U=new NumberValue(this.expr1.evaluate(w).numberValue()/this.expr2.evaluate(w).numberValue());break;case "=":U=this.compare(w,function(c,e){return c==e;});break;case "!=":U=this.compare(w,function(c,e){return c!=e;});break;case "<":U=this.compare(w,function(c,e){return c<e;});break;case "<=":U=this.compare(w,function(c,e){return c<=e;});break;case ">":U=this.compare(w,function(c,e){return c>e;});break;case ">=":U=this.compare(w,function(c,e){return c>=e;});break;default:alert("BinaryExpr.evaluate: "+this.op.value);}return U;};BinaryExpr.prototype.compare=function(g,Z){var A=this.expr1.evaluate(g);var b=this.expr2.evaluate(g);var M;if(A.type=="node-set"&&b.type=="node-set"){var o=A.nodeSetValue();var x=b.nodeSetValue();M=false;for(var e=0;e<o.length;++e){for(var U=0;U<x.length;++U){if(Z(xmlValue(o[e]),xmlValue(x[U]))){M=true;U=x.length;e=o.length;}}}}else{if(A.type=="node-set"||b.type=="node-set"){if(A.type=="number"){var P=A.numberValue();var w=b.nodeSetValue();M=false;for(var c=0;c<w.length;++c){var C=xmlValue(w[c])-0;if(Z(P,C)){M=true;break;}}}else{if(b.type=="number"){var w=A.nodeSetValue();var P=b.numberValue();M=false;for(var c=0;c<w.length;++c){var C=xmlValue(w[c])-0;if(Z(C,P)){M=true;break;}}}else{if(A.type=="string"){var P=A.stringValue();var w=b.nodeSetValue();M=false;for(var c=0;c<w.length;++c){var C=xmlValue(w[c]);if(Z(P,C)){M=true;break;}}}else{if(b.type=="string"){var w=A.nodeSetValue();var P=b.stringValue();M=false;for(var c=0;c<w.length;++c){var C=xmlValue(w[c]);if(Z(C,P)){M=true;break;}}}else{M=Z(A.booleanValue(),b.booleanValue());}}}}}else{if(A.type=="boolean"||b.type=="boolean"){M=Z(A.booleanValue(),b.booleanValue());}else{if(A.type=="number"||b.type=="number"){M=Z(A.numberValue(),b.numberValue());}else{M=Z(A.stringValue(),b.stringValue());}}}}return new BooleanValue(M);};function LiteralExpr(w){this.value=w;}LiteralExpr.prototype.evaluate=function(w){return new StringValue(this.value);};function NumberExpr(w){this.value=w;}NumberExpr.prototype.evaluate=function(w){return new NumberValue(this.value);};function VariableExpr(w){this.name=w;}VariableExpr.prototype.evaluate=function(w){return w.getVariable(this.name);};function makeTokenExpr(w){return new TokenExpr(w);}function passExpr(w){return w;}function makeLocationExpr1(U,w){w.absolute=true;return w;}function makeLocationExpr2(U,w){w.absolute=true;w.prependStep(makeAbbrevStep(U.value));return w;}function makeLocationExpr3(U){var w=new LocationExpr();w.appendStep(makeAbbrevStep("."));w.absolute=true;return w;}function makeLocationExpr4(U){var w=new LocationExpr();w.absolute=true;w.appendStep(makeAbbrevStep(U.value));return w;}function makeLocationExpr5(U){var w=new LocationExpr();w.appendStep(U);return w;}function makeLocationExpr6(w,U,e){w.appendStep(e);return w;}function makeLocationExpr7(w,U,e){w.appendStep(makeAbbrevStep(U.value));return w;}function makeStepExpr1(w){return makeAbbrevStep(w.value);}function makeStepExpr2(w){return makeAbbrevStep(w.value);}function makeStepExpr3(w,U,e){return new StepExpr(w.value,e);}function makeStepExpr4(w,U){return new StepExpr("attribute",U);}function makeStepExpr5(w){return new StepExpr("child",w);}function makeStepExpr6(U,w){U.appendPredicate(w);return U;}function makeAbbrevStep(w){switch(w){case "//":return new StepExpr("descendant-or-self",new NodeTestAny);case ".":return new StepExpr("self",new NodeTestAny);case "..":return new StepExpr("parent",new NodeTestAny);}}function makeNodeTestExpr1(w){return new NodeTestElement;}function makeNodeTestExpr2(w,U,e){return new NodeTestNC(w.value);}function makeNodeTestExpr3(w){return new NodeTestName(w.value);}function makeNodeTestExpr4(e,w){var U=e.value.replace(/\s*\($/,"");switch(U){case "node":return new NodeTestAny;case "text":return new NodeTestText;case "comment":return new NodeTestComment;case "processing-instruction":return new NodeTestPI;}}function makeNodeTestExpr5(c,e,w){var U=c.replace(/\s*\($/,"");if(U!="processing-instruction"){throw U+" "+Error().stack;}return new NodeTestPI(e.value);}function makePredicateExpr(e,U,w){return new PredicateExpr(U);}function makePrimaryExpr(e,U,w){return U;}function makeFunctionCallExpr1(U,e,w){return new FunctionCallExpr(U);}function makeFunctionCallExpr2(x,M,c,e,w){var U=new FunctionCallExpr(x);U.appendArg(c);for(var o=0;o<e.length;++o){U.appendArg(e[o]);}return U;}function makeArgumentExpr(w,U){return U;}function makeUnionExpr(e,w,U){return new UnionExpr(e,U);}function makePathExpr1(e,U,w){return new PathExpr(e,w);}function makePathExpr2(e,U,w){w.prependStep(makeAbbrevStep(U.value));return new PathExpr(e,w);}function makeFilterExpr(U,w){if(w.length>0){return new FilterExpr(U,w);}else{return U;}}function makeUnaryMinusExpr(w,U){return new UnaryMinusExpr(U);}function makeBinaryExpr(U,e,w){return new BinaryExpr(U,e,w);}function makeLiteralExpr(w){var U=w.value.substring(1,w.value.length-1);return new LiteralExpr(U);}function makeNumberExpr(w){return new NumberExpr(w.value);}function makeVariableReference(w,U){return new VariableExpr(U.value);}function makeSimpleExpr(e){if(e.charAt(0)=="$"){return new VariableExpr(e.substr(1));}else{if(e.charAt(0)=="@"){var U=new NodeTestName(e.substr(1));var w=new StepExpr("attribute",U);var x=new LocationExpr();x.appendStep(w);return x;}else{if(e.match(/^[0-9]+$/)){return new NumberExpr(e);}else{var U=new NodeTestName(e);var w=new StepExpr("child",U);var x=new LocationExpr();x.appendStep(w);return x;}}}}function makeSimpleExpr2(o){var e=o.split("/");var M=new LocationExpr();for(var x in e){var U=new NodeTestName(e[x]);var w=new StepExpr("child",U);M.appendStep(w);}return M;}var xpathAxis={ANCESTOR_OR_SELF:"ancestor-or-self",ANCESTOR:"ancestor",ATTRIBUTE:"attribute",CHILD:"child",DESCENDANT_OR_SELF:"descendant-or-self",DESCENDANT:"descendant",FOLLOWING_SIBLING:"following-sibling",FOLLOWING:"following",NAMESPACE:"namespace",PARENT:"parent",PRECEDING_SIBLING:"preceding-sibling",PRECEDING:"preceding",SELF:"self"};var xpathAxesRe=[xpathAxis.ANCESTOR_OR_SELF,xpathAxis.ANCESTOR,xpathAxis.ATTRIBUTE,xpathAxis.CHILD,xpathAxis.DESCENDANT_OR_SELF,xpathAxis.DESCENDANT,xpathAxis.FOLLOWING_SIBLING,xpathAxis.FOLLOWING,xpathAxis.NAMESPACE,xpathAxis.PARENT,xpathAxis.PRECEDING_SIBLING,xpathAxis.PRECEDING,xpathAxis.SELF].join("|");var TOK_PIPE={label:"|",prec:17,re:new RegExp("^\\|")};var TOK_DSLASH={label:"//",prec:19,re:new RegExp("^//")};var TOK_SLASH={label:"/",prec:30,re:new RegExp("^/")};var TOK_AXIS={label:"::",prec:20,re:new RegExp("^::")};var TOK_COLON={label:":",prec:1000,re:new RegExp("^:")};var TOK_AXISNAME={label:"[axis]",re:new RegExp("^("+xpathAxesRe+")")};var TOK_PARENO={label:"(",prec:34,re:new RegExp("^\\(")};var TOK_PARENC={label:")",re:new RegExp("^\\)")};var TOK_DDOT={label:"..",prec:34,re:new RegExp("^\\.\\.")};var TOK_DOT={label:".",prec:34,re:new RegExp("^\\.")};var TOK_AT={label:"@",prec:34,re:new RegExp("^@")};var TOK_COMMA={label:",",re:new RegExp("^,")};var TOK_OR={label:"or",prec:10,re:new RegExp("^or\\b")};var TOK_AND={label:"and",prec:11,re:new RegExp("^and\\b")};var TOK_EQ={label:"=",prec:12,re:new RegExp("^=")};var TOK_NEQ={label:"!=",prec:12,re:new RegExp("^!=")};var TOK_GE={label:">=",prec:13,re:new RegExp("^>=")};var TOK_GT={label:">",prec:13,re:new RegExp("^>")};var TOK_LE={label:"<=",prec:13,re:new RegExp("^<=")};var TOK_LT={label:"<",prec:13,re:new RegExp("^<")};var TOK_PLUS={label:"+",prec:14,re:new RegExp("^\\+"),left:true};var TOK_MINUS={label:"-",prec:14,re:new RegExp("^\\-"),left:true};var TOK_DIV={label:"div",prec:15,re:new RegExp("^div\\b"),left:true};var TOK_MOD={label:"mod",prec:15,re:new RegExp("^mod\\b"),left:true};var TOK_BRACKO={label:"[",prec:32,re:new RegExp("^\\[")};var TOK_BRACKC={label:"]",re:new RegExp("^\\]")};var TOK_DOLLAR={label:"$",re:new RegExp("^\\$")};var TOK_NCNAME={label:"[ncname]",re:new RegExp("^[a-z][-\\w]*","i")};var TOK_ASTERISK={label:"*",prec:15,re:new RegExp("^\\*"),left:true};var TOK_LITERALQ={label:"[litq]",prec:20,re:new RegExp("^'[^\\']*'")};var TOK_LITERALQQ={label:"[litqq]",prec:20,re:new RegExp("^\"[^\\\"]*\"")};var TOK_NUMBER={label:"[number]",prec:35,re:new RegExp("^\\d+(\\.\\d*)?")};var TOK_QNAME={label:"[qname]",re:new RegExp("^([a-z][-\\w]*:)?[a-z][-\\w]*","i")};var TOK_NODEO={label:"[nodetest-start]",re:new RegExp("^(processing-instruction|comment|text|node)\\(")};var xpathTokenRules=[TOK_DSLASH,TOK_SLASH,TOK_DDOT,TOK_DOT,TOK_AXIS,TOK_COLON,TOK_AXISNAME,TOK_NODEO,TOK_PARENO,TOK_PARENC,TOK_BRACKO,TOK_BRACKC,TOK_AT,TOK_COMMA,TOK_OR,TOK_AND,TOK_NEQ,TOK_EQ,TOK_GE,TOK_GT,TOK_LE,TOK_LT,TOK_PLUS,TOK_MINUS,TOK_ASTERISK,TOK_PIPE,TOK_MOD,TOK_DIV,TOK_LITERALQ,TOK_LITERALQQ,TOK_NUMBER,TOK_QNAME,TOK_NCNAME,TOK_DOLLAR];var XPathLocationPath={label:"LocationPath"};var XPathRelativeLocationPath={label:"RelativeLocationPath"};var XPathAbsoluteLocationPath={label:"AbsoluteLocationPath"};var XPathStep={label:"Step"};var XPathNodeTest={label:"NodeTest"};var XPathPredicate={label:"Predicate"};var XPathLiteral={label:"Literal"};var XPathExpr={label:"Expr"};var XPathPrimaryExpr={label:"PrimaryExpr"};var XPathVariableReference={label:"Variablereference"};var XPathNumber={label:"Number"};var XPathFunctionCall={label:"FunctionCall"};var XPathArgumentRemainder={label:"ArgumentRemainder"};var XPathPathExpr={label:"PathExpr"};var XPathUnionExpr={label:"UnionExpr"};var XPathFilterExpr={label:"FilterExpr"};var XPathDigits={label:"Digits"};var xpathNonTerminals=[XPathLocationPath,XPathRelativeLocationPath,XPathAbsoluteLocationPath,XPathStep,XPathNodeTest,XPathPredicate,XPathLiteral,XPathExpr,XPathPrimaryExpr,XPathVariableReference,XPathNumber,XPathFunctionCall,XPathArgumentRemainder,XPathPathExpr,XPathUnionExpr,XPathFilterExpr,XPathDigits];var Q_01={label:"?"};var Q_MM={label:"*"};var Q_1M={label:"+"};var ASSOC_LEFT=true;var xpathGrammarRules=[[XPathLocationPath,[XPathRelativeLocationPath],18,passExpr],[XPathLocationPath,[XPathAbsoluteLocationPath],18,passExpr],[XPathAbsoluteLocationPath,[TOK_SLASH,XPathRelativeLocationPath],18,makeLocationExpr1],[XPathAbsoluteLocationPath,[TOK_DSLASH,XPathRelativeLocationPath],18,makeLocationExpr2],[XPathAbsoluteLocationPath,[TOK_SLASH],0,makeLocationExpr3],[XPathAbsoluteLocationPath,[TOK_DSLASH],0,makeLocationExpr4],[XPathRelativeLocationPath,[XPathStep],31,makeLocationExpr5],[XPathRelativeLocationPath,[XPathRelativeLocationPath,TOK_SLASH,XPathStep],31,makeLocationExpr6],[XPathRelativeLocationPath,[XPathRelativeLocationPath,TOK_DSLASH,XPathStep],31,makeLocationExpr7],[XPathStep,[TOK_DOT],33,makeStepExpr1],[XPathStep,[TOK_DDOT],33,makeStepExpr2],[XPathStep,[TOK_AXISNAME,TOK_AXIS,XPathNodeTest],33,makeStepExpr3],[XPathStep,[TOK_AT,XPathNodeTest],33,makeStepExpr4],[XPathStep,[XPathNodeTest],33,makeStepExpr5],[XPathStep,[XPathStep,XPathPredicate],33,makeStepExpr6],[XPathNodeTest,[TOK_ASTERISK],33,makeNodeTestExpr1],[XPathNodeTest,[TOK_NCNAME,TOK_COLON,TOK_ASTERISK],33,makeNodeTestExpr2],[XPathNodeTest,[TOK_QNAME],33,makeNodeTestExpr3],[XPathNodeTest,[TOK_NODEO,TOK_PARENC],33,makeNodeTestExpr4],[XPathNodeTest,[TOK_NODEO,XPathLiteral,TOK_PARENC],33,makeNodeTestExpr5],[XPathPredicate,[TOK_BRACKO,XPathExpr,TOK_BRACKC],33,makePredicateExpr],[XPathPrimaryExpr,[XPathVariableReference],33,passExpr],[XPathPrimaryExpr,[TOK_PARENO,XPathExpr,TOK_PARENC],33,makePrimaryExpr],[XPathPrimaryExpr,[XPathLiteral],30,passExpr],[XPathPrimaryExpr,[XPathNumber],30,passExpr],[XPathPrimaryExpr,[XPathFunctionCall],30,passExpr],[XPathFunctionCall,[TOK_QNAME,TOK_PARENO,TOK_PARENC],-1,makeFunctionCallExpr1],[XPathFunctionCall,[TOK_QNAME,TOK_PARENO,XPathExpr,XPathArgumentRemainder,Q_MM,TOK_PARENC],-1,makeFunctionCallExpr2],[XPathArgumentRemainder,[TOK_COMMA,XPathExpr],-1,makeArgumentExpr],[XPathUnionExpr,[XPathPathExpr],20,passExpr],[XPathUnionExpr,[XPathUnionExpr,TOK_PIPE,XPathPathExpr],20,makeUnionExpr],[XPathPathExpr,[XPathLocationPath],20,passExpr],[XPathPathExpr,[XPathFilterExpr],19,passExpr],[XPathPathExpr,[XPathFilterExpr,TOK_SLASH,XPathRelativeLocationPath],20,makePathExpr1],[XPathPathExpr,[XPathFilterExpr,TOK_DSLASH,XPathRelativeLocationPath],20,makePathExpr2],[XPathFilterExpr,[XPathPrimaryExpr,XPathPredicate,Q_MM],20,makeFilterExpr],[XPathExpr,[XPathPrimaryExpr],16,passExpr],[XPathExpr,[XPathUnionExpr],16,passExpr],[XPathExpr,[TOK_MINUS,XPathExpr],-1,makeUnaryMinusExpr],[XPathExpr,[XPathExpr,TOK_OR,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_AND,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_EQ,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_NEQ,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_LT,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_LE,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_GT,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_GE,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_PLUS,XPathExpr],-1,makeBinaryExpr,ASSOC_LEFT],[XPathExpr,[XPathExpr,TOK_MINUS,XPathExpr],-1,makeBinaryExpr,ASSOC_LEFT],[XPathExpr,[XPathExpr,TOK_ASTERISK,XPathExpr],-1,makeBinaryExpr,ASSOC_LEFT],[XPathExpr,[XPathExpr,TOK_DIV,XPathExpr],-1,makeBinaryExpr,ASSOC_LEFT],[XPathExpr,[XPathExpr,TOK_MOD,XPathExpr],-1,makeBinaryExpr,ASSOC_LEFT],[XPathLiteral,[TOK_LITERALQ],-1,makeLiteralExpr],[XPathLiteral,[TOK_LITERALQQ],-1,makeLiteralExpr],[XPathNumber,[TOK_NUMBER],-1,makeNumberExpr],[XPathVariableReference,[TOK_DOLLAR,TOK_QNAME],200,makeVariableReference]];var xpathRules=[];function xpathParseInit(){if(xpathRules.length){return ;}xpathGrammarRules.sort(function(n,Z){var C=n[1].length;var A=Z[1].length;if(C<A){return 1;}else{if(C>A){return -1;}else{return 0;}}});var w=1;for(var e=0;e<xpathNonTerminals.length;++e){xpathNonTerminals[e].key=w++;}for(e=0;e<xpathTokenRules.length;++e){xpathTokenRules[e].key=w++;}Log.write("XPath parse INIT: "+w+" rules");function x(n,Z,b){if(!n[Z]){n[Z]=[];}n[Z].push(b);}for(e=0;e<xpathGrammarRules.length;++e){var M=xpathGrammarRules[e];var o=M[1];for(var U=o.length-1;U>=0;--U){if(o[U]==Q_1M){x(xpathRules,o[U-1].key,M);break;}else{if(o[U]==Q_MM||o[U]==Q_01){x(xpathRules,o[U-1].key,M);--U;}else{x(xpathRules,o[U].key,M);break;}}}}Log.write("XPath parse INIT: "+xpathRules.length+" rule bins");var c=0;mapExec(xpathRules,function(Z){if(Z){c+=Z.length;}});Log.write("XPath parse INIT: "+(c/xpathRules.length)+" average bin size");}function xpathCollectDescendants(U,w){for(var e=w.firstChild;e;e=e.nextSibling){U.push(e);arguments.callee(U,e);}}function xpathCollectDescendantsReverse(U,w){for(var e=w.lastChild;e;e=e.previousSibling){U.push(e);arguments.callee(U,e);}}function xpathDomEval(e,U){var c=xpathParse(e);var w=c.evaluate(new ExprContext(U));return w;}function xpathSort(Z,o){if(o.length==0){return ;}var C=[];for(var M=0;M<Z.nodelist.length;++M){var e=Z.nodelist[M];var c={node:e,key:[]};var U=Z.clone(e,0,[e]);for(var x=0;x<o.length;++x){var A=o[x];var n=A.expr.evaluate(U);var b;if(A.type=="text"){b=n.stringValue();}else{if(A.type=="number"){b=n.numberValue();}}c.key.push({value:b,order:A.order});}c.key.push({value:M,order:"ascending"});C.push(c);}C.sort(xpathSortByKey);var w=[];for(var M=0;M<C.length;++M){w.push(C[M].node);}Z.nodelist=w;Z.setNode(w[0],0);}function xpathSortByKey(c,e){for(var w=0;w<c.key.length;++w){var U=c.key[w].order=="descending"?-1:1;if(c.key[w].value>e.key[w].value){return +1*U;}else{if(c.key[w].value<e.key[w].value){return -1*U;}}}return 0;}function xsltProcess(c,e){if(xsltdebug){Log.write("XML STYLESHEET:");Log.writeXML(xmlText(e));Log.write("XML INPUT:");Log.writeXML(xmlText(c));}var w=(new XDocument).createDocumentFragment();xsltProcessContext(new ExprContext(c),e,w);var U=xmlText(w);if(xsltdebug){Log.write("HTML OUTPUT:");Log.writeXML(U);}return U;}function xsltProcessContext(Z,V,M){var O=V.nodeName.split(/:/);if(O.length==1||O[0]!="xsl"){xsltPassThrough(Z,V,M);}else{switch(O[1]){case "apply-imports":alert("not implemented: "+O[1]);break;case "apply-templates":var C=xmlGetAttribute(V,"select");var g;if(C){g=xpathEval(C,Z).nodeSetValue();}else{g=Z.node.childNodes;}var o=Z.clone(g[0],0,g);xsltWithParam(o,V);xsltSort(o,V);var n=xmlGetAttribute(V,"mode");var A=V.ownerDocument.documentElement;for(var W=0;W<A.childNodes.length;++W){var f=A.childNodes[W];if(f.nodeType==DOM_ELEMENT_NODE&&f.nodeName=="xsl:template"&&f.getAttribute("mode")==n){for(var p=0;p<o.nodelist.length;++p){var U=o.nodelist[p];xsltProcessContext(o.clone(U,p),f,M);}}}break;case "attribute":var H=xmlGetAttribute(V,"name");var t=xsltAttributeValue(H,Z);var r=M.ownerDocument.createDocumentFragment();xsltChildNodes(Z,V,r);var P=xmlValue(r);M.setAttribute(t,P);break;case "attribute-set":alert("not implemented: "+O[1]);break;case "call-template":var t=xmlGetAttribute(V,"name");var A=V.ownerDocument.documentElement;var e=Z.clone();xsltWithParam(e,V);for(var W=0;W<A.childNodes.length;++W){var f=A.childNodes[W];if(f.nodeType==DOM_ELEMENT_NODE&&f.nodeName=="xsl:template"&&f.getAttribute("name")==t){xsltChildNodes(e,f,M);break;}}break;case "choose":xsltChoose(Z,V,M);break;case "comment":var r=M.ownerDocument.createDocumentFragment();xsltChildNodes(Z,V,r);var w=xmlValue(r);var a=M.ownerDocument.createComment(w);M.appendChild(a);break;case "copy":if(Z.node.nodeType==DOM_ELEMENT_NODE){var r=M.ownerDocument.createElement(Z.node.nodeName);M.appendChild(r);xsltChildNodes(Z,V,r);}else{if(Z.node.nodeType==DOM_ATTRIBUTE_NODE){var r=M.ownerDocument.createAttribute(Z.node.nodeName);r.nodeValue=Z.node.nodeValue;M.setAttribute(r);}}break;case "copy-of":var C=xmlGetAttribute(V,"select");var P=xpathEval(C,Z);if(P.type=="node-set"){var g=P.nodeSetValue();for(var W=0;W<g.length;++W){xsltCopyOf(M,g[W]);}}else{var r=M.ownerDocument.createTextNode(P.stringValue());M.appendChild(r);}break;case "decimal-format":alert("not implemented: "+O[1]);break;case "element":var H=xmlGetAttribute(V,"name");var t=xsltAttributeValue(H,Z);var r=M.ownerDocument.createElement(t);M.appendChild(r);xsltChildNodes(Z,V,r);break;case "fallback":alert("not implemented: "+O[1]);break;case "for-each":var o=Z.clone();xsltSort(o,V);xsltForEach(o,V,M);break;case "if":var u=xmlGetAttribute(V,"test");if(xpathEval(u,Z).booleanValue()){xsltChildNodes(Z,V,M);}break;case "import":alert("not implemented: "+O[1]);break;case "include":alert("not implemented: "+O[1]);break;case "key":alert("not implemented: "+O[1]);break;case "message":alert("not implemented: "+O[1]);break;case "namespace-alias":alert("not implemented: "+O[1]);break;case "number":alert("not implemented: "+O[1]);break;case "otherwise":alert("error if here: "+O[1]);break;case "output":break;case "preserve-space":alert("not implemented: "+O[1]);break;case "processing-instruction":alert("not implemented: "+O[1]);break;case "sort":break;case "strip-space":alert("not implemented: "+O[1]);break;case "stylesheet":case "transform":xsltChildNodes(Z,V,M);break;case "template":var x=xmlGetAttribute(V,"match");if(x&&xpathMatch(x,Z)){xsltChildNodes(Z,V,M);}break;case "text":var b=xmlValue(V);var r=M.ownerDocument.createTextNode(b);M.appendChild(r);break;case "value-of":var C=xmlGetAttribute(V,"select");var P=xpathEval(C,Z).stringValue();var r=M.ownerDocument.createTextNode(P);M.appendChild(r);break;case "param":xsltVariable(Z,V,false);break;case "variable":xsltVariable(Z,V,true);break;case "when":alert("error if here: "+O[1]);break;case "with-param":alert("error if here: "+O[1]);break;default:alert("error if here: "+O[1]);break;}}}function xsltWithParam(w,e){for(var U=0;U<e.childNodes.length;++U){var x=e.childNodes[U];if(x.nodeType==DOM_ELEMENT_NODE&&x.nodeName=="xsl:with-param"){xsltVariable(w,x,true);}}}function xsltSort(M,n){var U=[];for(var e=0;e<n.childNodes.length;++e){var x=n.childNodes[e];if(x.nodeType==DOM_ELEMENT_NODE&&x.nodeName=="xsl:sort"){var Z=xmlGetAttribute(x,"select");var b=xpathParse(Z);var o=xmlGetAttribute(x,"data-type")||"text";var w=xmlGetAttribute(x,"order")||"ascending";U.push({expr:b,type:o,order:w});}}xpathSort(M,U);}function xsltVariable(e,o,x){var c=xmlGetAttribute(o,"name");var w=xmlGetAttribute(o,"select");var M;if(o.childNodes.length>0){var U=e.node.ownerDocument.createDocumentFragment();xsltChildNodes(e,o,U);M=new NodeSetValue([U]);}else{if(w){M=xpathEval(w,e);}else{M=new StringValue("");}}if(x||!e.getVariable(c)){e.setVariable(c,M);}}function xsltChoose(U,x,w){for(var c=0;c<x.childNodes.length;++c){var e=x.childNodes[c];if(e.nodeType!=DOM_ELEMENT_NODE){continue;}else{if(e.nodeName=="xsl:when"){var o=xmlGetAttribute(e,"test");if(xpathEval(o,U).booleanValue()){xsltChildNodes(U,e,w);break;}}else{if(e.nodeName=="xsl:otherwise"){xsltChildNodes(U,e,w);break;}}}}}function xsltForEach(c,M,e){var w=xmlGetAttribute(M,"select");var U=xpathEval(w,c).nodeSetValue();for(var o=0;o<U.length;++o){var x=c.clone(U[o],o,U);xsltChildNodes(x,M,e);}}function xsltChildNodes(U,x,w){var c=U.clone();for(var e=0;e<x.childNodes.length;++e){xsltProcessContext(c,x.childNodes[e],w);}}function xsltPassThrough(e,o,U){if(o.nodeType==DOM_TEXT_NODE){if(xsltPassText(o)){var M=U.ownerDocument.createTextNode(o.nodeValue);U.appendChild(M);}}else{if(o.nodeType==DOM_ELEMENT_NODE){var M=U.ownerDocument.createElement(o.nodeName);for(var x=0;x<o.attributes.length;++x){var w=o.attributes[x];if(w){var c=w.nodeName;var Z=xsltAttributeValue(w.nodeValue,e);M.setAttribute(c,Z);}}U.appendChild(M);xsltChildNodes(e,o,M);}else{xsltChildNodes(e,o,U);}}}function xsltPassText(U){if(!U.nodeValue.match(/^\s*$/)){return true;}var w=U.parentNode;if(w.nodeName=="xsl:text"){return true;}while(w&&w.nodeType==DOM_ELEMENT_NODE){var e=w.getAttribute("xml:space");if(e){if(e=="default"){return false;}else{if(e=="preserve"){return true;}}}w=w.parentNode;}return false;}function xsltAttributeValue(x,e){var o=stringSplit(x,"{");if(o.length==1){return x;}var w="";for(var U=0;U<o.length;++U){var c=stringSplit(o[U],"}");if(c.length!=2){w+=o[U];continue;}var M=xpathEval(c[0],e).stringValue();w+=M+c[1];}return w;}function xmlGetAttribute(U,w){var e=U.getAttribute(w);if(e){return xmlResolveEntities(e);}else{return e;}}function xsltCopyOf(c,e){if(e.nodeType==DOM_TEXT_NODE){var U=c.ownerDocument.createTextNode(e.nodeValue);c.appendChild(U);}else{if(e.nodeType==DOM_ATTRIBUTE_NODE){c.setAttribute(e.nodeName,e.nodeValue);}else{if(e.nodeType==DOM_ELEMENT_NODE){var U=c.ownerDocument.createElement(e.nodeName);c.appendChild(U);for(var w=0;w<e.attributes.length;++w){arguments.callee(U,e.attributes[w]);}for(var w=0;w<e.childNodes.length;++w){arguments.callee(U,e.childNodes[w]);}}else{if(e.nodeType==DOM_DOCUMENT_FRAGMENT_NODE||e.nodeType==DOM_DOCUMENT_NODE){for(var w=0;w<e.childNodes.length;++w){arguments.callee(c,e.childNodes[w]);}}}}}}function xpathMatch(e,x){var M=xpathParse(e);var U;if(M.steps&&!M.absolute&&M.steps.length==1&&M.steps[0].axis=="child"&&M.steps[0].predicate.length==0){U=M.steps[0].nodetest.evaluate(x).booleanValue();}else{U=false;var o=x.node;while(!U&&o){var w=M.evaluate(x.clone(o,0,[o])).nodeSetValue();for(var c=0;c<w.length;++c){if(w[c]==x.node){U=true;break;}}o=o.parentNode;}}return U;}function xpathEval(w,e){var c=xpathParse(w);var U=c.evaluate(e);return U;}