﻿var REGEXP_UNICODE=function(){var b=[" ","Ġ",-1,"!","Ġ",-1,"Ġ","Ġ",0,"ġ","Ġ",-1,"ġ","Ġ|ġ",0,"Ģ","Ġ|ġ",-1,"Ġ","[Ġ]",0,"ġ","[Ġ]",-1,"ġ","[Ġġ]",0,"Ģ","[Ġġ]",-1,"ġ","[Ġ-ġ]",0,"Ģ","[Ġ-ġ]",-1];for(var a=0;a<b.length;a+=3)if(b[a].search(new RegExp(b[a+1]))!=b[a+2])return false;return true}(),XML_S="[ \t\r\n]+",XML_EQ="("+XML_S+")?=("+XML_S+")?",XML_CHAR_REF="&#[0-9]+;|&#x[0-9a-fA-F]+;",XML10_VERSION_INFO=XML_S+"version"+XML_EQ+'("1\\.0"|'+"'1\\.0')",XML10_BASE_CHAR=REGEXP_UNICODE?"A-Za-zÀ-ÖØ-öø-ÿĀ-ıĴ-ľŁ-ňŊ-žƀ-ǃǍ-ǰǴ-ǵǺ-ȗɐ-ʨʻ-ˁΆΈ-ΊΌΎ-ΡΣ-ώϐ-ϖϚϜϞϠϢ-ϳЁ-ЌЎ-яё-ќў-ҁҐ-ӄӇ-ӈӋ-ӌӐ-ӫӮ-ӵӸ-ӹԱ-Ֆՙա-ֆא-תװ-ײء-غف-يٱ-ڷں-ھۀ-ێې-ۓەۥ-ۦअ-हऽक़-ॡঅ-ঌএ-ঐও-নপ-রলশ-হড়-ঢ়য়-ৡৰ-ৱਅ-ਊਏ-ਐਓ-ਨਪ-ਰਲ-ਲ਼ਵ-ਸ਼ਸ-ਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઋઍએ-ઑઓ-નપ-રલ-ળવ-હઽૠଅ-ଌଏ-ଐଓ-ନପ-ରଲ-ଳଶ-ହଽଡ଼-ଢ଼ୟ-ୡஅ-ஊஎ-ஐஒ-கங-சஜஞ-டண-தந-பம-வஷ-ஹఅ-ఌఎ-ఐఒ-నప-ళవ-హౠ-ౡಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹೞೠ-ೡഅ-ഌഎ-ഐഒ-നപ-ഹൠ-ൡก-ฮะา-ำเ-ๅກ-ຂຄງ-ຈຊຍດ-ທນ-ຟມ-ຣລວສ-ຫອ-ຮະາ-ຳຽເ-ໄཀ-ཇཉ-ཀྵႠ-Ⴥა-ჶᄀᄂ-ᄃᄅ-ᄇᄉᄋ-ᄌᄎ-ᄒᄼᄾᅀᅌᅎᅐᅔ-ᅕᅙᅟ-ᅡᅣᅥᅧᅩᅭ-ᅮᅲ-ᅳᅵᆞᆨᆫᆮ-ᆯᆷ-ᆸᆺᆼ-ᇂᇫᇰᇹḀ-ẛẠ-ỹἀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼΩK-Å℮ↀ-ↂぁ-ゔァ-ヺㄅ-ㄬ가-힣":"A-Za-z",XML10_IDEOGRAPHIC=REGEXP_UNICODE?"一-龥〇〡-〩":"",XML10_COMBINING_CHAR=REGEXP_UNICODE?"̀-͠ͅ-҃͡-֑҆-֣֡-ֹֻ-ֽֿׁ-ׂًׄ-ْٰۖ-ۜ۝-۟۠-ۤۧ-۪ۨ-ۭँ-ः़ा-ौ्॑-॔ॢ-ॣঁ-ঃ়ািী-ৄে-ৈো-্ৗৢ-ৣਂ਼ਾਿੀ-ੂੇ-ੈੋ-੍ੰ-ੱઁ-ઃ઼ા-ૅે-ૉો-્ଁ-ଃ଼ା-ୃେ-ୈୋ-୍ୖ-ୗஂ-ஃா-ூெ-ைொ-்ௗఁ-ఃా-ౄె-ైొ-్ౕ-ౖಂ-ಃಾ-ೄೆ-ೈೊ-್ೕ-ೖം-ഃാ-ൃെ-ൈൊ-്ൗัิ-ฺ็-๎ັິ-ູົ-ຼ່-ໍ༘-༹༙༵༷༾༿ཱ-྄྆-ྋྐ-ྕྗྙ-ྭྱ-ྷྐྵ⃐-〪⃜⃡-゙゚〯":"",XML10_DIGIT=REGEXP_UNICODE?"0-9٠-٩۰-۹०-९০-৯੦-੯૦-૯୦-୯௧-௯౦-౯೦-೯൦-൯๐-๙໐-໙༠-༩":"0-9",XML10_EXTENDER=REGEXP_UNICODE?"·ːˑ·ـๆໆ々〱-〵ゝ-ゞー-ヾ":"",XML10_LETTER=XML10_BASE_CHAR+XML10_IDEOGRAPHIC,XML10_NAME_CHAR=XML10_LETTER+XML10_DIGIT+"\\._:"+XML10_COMBINING_CHAR+XML10_EXTENDER+"-",XML10_NAME="["+XML10_LETTER+"_:]["+XML10_NAME_CHAR+"]*",XML10_ENTITY_REF="&"+XML10_NAME+";",XML10_REFERENCE=XML10_ENTITY_REF+"|"+XML_CHAR_REF,XML10_ATT_VALUE='"(([^<&"]|'+XML10_REFERENCE+')*)"|'+"'(([^<&']|"+XML10_REFERENCE+")*)'",XML10_ATTRIBUTE="("+XML10_NAME+")"+XML_EQ+"("+XML10_ATT_VALUE+")",XML11_VERSION_INFO=XML_S+"version"+XML_EQ+'("1\\.1"|'+"'1\\.1')",XML11_NAME_START_CHAR=REGEXP_UNICODE?":A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�":":A-Z_a-z",XML11_NAME_CHAR=XML11_NAME_START_CHAR+(REGEXP_UNICODE?"\\.0-9·̀-ͯ‿-⁀-":"\\.0-9-"),XML11_NAME="["+XML11_NAME_START_CHAR+"]["+XML11_NAME_CHAR+"]*",XML11_ENTITY_REF="&"+XML11_NAME+";",XML11_REFERENCE=XML11_ENTITY_REF+"|"+XML_CHAR_REF,XML11_ATT_VALUE='"(([^<&"]|'+XML11_REFERENCE+')*)"|'+"'(([^<&']|"+XML11_REFERENCE+")*)'",XML11_ATTRIBUTE="("+XML11_NAME+")"+XML_EQ+"("+XML11_ATT_VALUE+")",XML_NC_NAME_CHAR=XML10_LETTER+XML10_DIGIT+"\\._"+XML10_COMBINING_CHAR+XML10_EXTENDER+"-",XML_NC_NAME="["+XML10_LETTER+"_]["+XML_NC_NAME_CHAR+"]*",DOM_ELEMENT_NODE=1,DOM_ATTRIBUTE_NODE=2,DOM_TEXT_NODE=3,DOM_CDATA_SECTION_NODE=4,DOM_ENTITY_REFERENCE_NODE=5,DOM_ENTITY_NODE=6,DOM_PROCESSING_INSTRUCTION_NODE=7,DOM_COMMENT_NODE=8,DOM_DOCUMENT_NODE=9,DOM_DOCUMENT_TYPE_NODE=10,DOM_DOCUMENT_FRAGMENT_NODE=11,DOM_NOTATION_NODE=12;function xpathLog(){}function xsltLog(){}function xsltLogXml(){}function assert(a){if(!a)throw"Assertion failed"}function stringSplit(b,e){var a=b.indexOf(e);if(a==-1)return [b];var c=[];c.push(b.substr(0,a));while(a!=-1){var d=b.indexOf(e,a+1);if(d!=-1)c.push(b.substr(a+1,d-a-1));else c.push(b.substr(a+1));a=d}return c}function mapExec(b,c){for(var a=0;a<b.length;++a)c.call(this,b[a],a)}function mapExpr(b,d){var c=[];for(var a=0;a<b.length;++a)c.push(d(b[a]));return c}function reverseInplace(a){for(var b=0;b<a.length/2;++b){var d=a[b],c=a.length-b-1;a[b]=a[c];a[c]=d}}function removeFromArray(b,d,e){var c=0;for(var a=0;a<b.length;++a)if(b[a]===d||e&&b[a]==d){b.splice(a--,1);c++}return c}function copyArray(c,b){for(var a=0;a<b.length;++a)c.push(b[a])}function xmlValue(a){if(!a)return "";var b="";if(a.nodeType==DOM_TEXT_NODE||a.nodeType==DOM_CDATA_SECTION_NODE||a.nodeType==DOM_ATTRIBUTE_NODE)b+=a.nodeValue;else if(a.nodeType==DOM_ELEMENT_NODE||a.nodeType==DOM_DOCUMENT_NODE||a.nodeType==DOM_DOCUMENT_FRAGMENT_NODE)for(var c=0;c<a.childNodes.length;++c)b+=arguments.callee(a.childNodes[c]);return b}function xpathParse(a){xpathLog("parse "+a);xpathParseInit();var n=xpathCacheLookup(a);if(n){xpathLog(" ... cached");return n}if(a.match(/^(\$|@)?\w+$/i)){var h=makeSimpleExpr(a);xpathParseCache[a]=h;xpathLog(" ... simple");return h}if(a.match(/^\w+(\/\w+)*$/i)){var h=makeSimpleExpr2(a);xpathParseCache[a]=h;xpathLog(" ... simple 2");return h}var m=a,f=[],g=null,c=null,o=false,l=0,k=0,j=0;while(!o){l++;a=a.replace(/^\s*/,"");c=g;g=null;var b=null,e="";for(var i=0;i<xpathTokenRules.length;++i){var d=xpathTokenRules[i].re.exec(a);k++;if(d&&d.length>0&&d[0].length>e.length){b=xpathTokenRules[i];e=d[0];break}}if(b&&(b==TOK_DIV||b==TOK_MOD||b==TOK_AND||b==TOK_OR)&&(!c||c.tag==TOK_AT||c.tag==TOK_DSLASH||c.tag==TOK_SLASH||c.tag==TOK_AXIS||c.tag==TOK_DOLLAR))b=TOK_QNAME;if(b){a=a.substr(e.length);xpathLog("token: "+e+" -- "+b.label);g={tag:b,match:e,prec:b.prec?b.prec:0,expr:makeTokenExpr(e)}}else{xpathLog("DONE");o=true}while(xpathReduce(f,g)){j++;xpathLog("stack: "+stackToString(f))}}xpathLog("stack: "+stackToString(f));if(f.length!=1)throw"XPath parse error "+m+":\n"+stackToString(f);var d=f[0].expr;xpathParseCache[m]=d;xpathLog("XPath parse: "+l+" / "+k+" / "+j);return d}var xpathParseCache={};function xpathCacheLookup(a){return xpathParseCache[a]}function xpathReduce(c,b){var a=null;if(c.length>0){var j=c[c.length-1],e=xpathRules[j.tag.key];if(e)for(var d=0;d<e.length;++d){var f=e[d],h=xpathMatchStack(c,f[1]);if(h.length){a={tag:f[0],rule:f,match:h};a.prec=xpathGrammarPrecedence(a);break}}}var g;if(a&&(!b||a.prec>b.prec||b.tag.left&&a.prec>=b.prec)){for(var d=0;d<a.match.matchlength;++d)c.pop();xpathLog("reduce "+a.tag.label+" "+a.prec+" ahead "+(b?b.tag.label+" "+b.prec+(b.tag.left?" left":""):" none "));var i=mapExpr(a.match,function(a){return a.expr});a.expr=a.rule[3].apply(null,i);c.push(a);g=true}else{if(b){xpathLog("shift "+b.tag.label+" "+b.prec+(b.tag.left?" left":"")+" over "+(a?a.tag.label+" "+a.prec:" none"));c.push(b)}g=false}return g}function xpathMatchStack(e,f){var i=e.length,h=f.length,b,c,d=[];d.matchlength=0;var a=0;for(b=h-1,c=i-1;b>=0&&c>=0;--b,c-=a){a=0;var g=[];if(f[b]==Q_MM){b-=1;d.push(g);while(c-a>=0&&e[c-a].tag==f[b]){g.push(e[c-a]);a+=1;d.matchlength+=1}}else if(f[b]==Q_01){b-=1;d.push(g);while(c-a>=0&&a<2&&e[c-a].tag==f[b]){g.push(e[c-a]);a+=1;d.matchlength+=1}}else if(f[b]==Q_1M){b-=1;d.push(g);if(e[c].tag==f[b])while(c-a>=0&&e[c-a].tag==f[b]){g.push(e[c-a]);a+=1;d.matchlength+=1}else return []}else if(e[c].tag==f[b]){d.push(e[c]);a+=1;d.matchlength+=1}else return [];reverseInplace(g);g.expr=mapExpr(g,function(a){return a.expr})}reverseInplace(d);if(b==-1)return d;else return []}function xpathTokenPrecedence(a){return a.prec||2}function xpathGrammarPrecedence(a){var b=0;if(a.rule)if(a.rule.length>=3&&a.rule[2]>=0)b=a.rule[2];else for(var c=0;c<a.rule[1].length;++c){var e=xpathTokenPrecedence(a.rule[1][c]);b=Math.max(b,e)}else if(a.tag)b=xpathTokenPrecedence(a.tag);else if(a.length)for(var d=0;d<a.length;++d){var e=xpathGrammarPrecedence(a[d]);b=Math.max(b,e)}return b}function stackToString(c){var a="";for(var b=0;b<c.length;++b){if(a)a+="\n";a+=c[b].tag.label}return a}function ExprContext(a,d,c,b){this.node=a;this.position=d||0;this.nodelist=c||[a];this.variables={};this.parent=b||null;if(b)this.root=b.root;else if(this.node.nodeType==DOM_DOCUMENT_NODE)this.root=a;else this.root=a.ownerDocument}ExprContext.prototype.clone=function(c,a,b){return new ExprContext(c||this.node,typeof a!="undefined"?a:this.position,b||this.nodelist,this)};ExprContext.prototype.setVariable=function(b,a){this.variables[b]=a};ExprContext.prototype.getVariable=function(a){if(typeof this.variables[a]!="undefined")return this.variables[a];else if(this.parent)return this.parent.getVariable(a);else return null};ExprContext.prototype.setNode=function(a){this.node=this.nodelist[a];this.position=a};ExprContext.prototype.contextSize=function(){return this.nodelist.length};function StringValue(a){this.value=a;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};function BooleanValue(a){this.value=a;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};function NumberValue(a){this.value=a;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};function NodeSetValue(a){this.value=a;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(a){this.value=a}TokenExpr.prototype.evaluate=function(){return new StringValue(this.value)};function LocationExpr(){this.absolute=false;this.steps=[]}LocationExpr.prototype.appendStep=function(a){this.steps.push(a)};LocationExpr.prototype.prependStep=function(c){var b=this.steps;this.steps=[c];for(var a=0;a<b.length;++a)this.steps.push(b[a])};LocationExpr.prototype.evaluate=function(b){var a;if(this.absolute)a=b.root;else a=b.node;var c=[];xPathStep(c,this.steps,0,a,b);return new NodeSetValue(c)};function xPathStep(e,c,d,g,f){var i=c[d],h=f.clone(g),b=i.evaluate(h).nodeSetValue();for(var a=0;a<b.length;++a)if(d==c.length-1)e.push(b[a]);else xPathStep(e,c,d+1,b[a],f)}function StepExpr(c,b,a){this.axis=c;this.nodetest=b;this.predicate=a||[]}StepExpr.prototype.appendPredicate=function(a){this.predicate.push(a)};StepExpr.prototype.evaluate=function(h){var c=h.node,b=[];if(this.axis==xpathAxis.ANCESTOR_OR_SELF){b.push(c);for(var a=c.parentNode;a;a=a.parentNode)b.push(a)}else if(this.axis==xpathAxis.ANCESTOR)for(var a=c.parentNode;a;a=a.parentNode)b.push(a);else if(this.axis==xpathAxis.ATTRIBUTE)copyArray(b,c.attributes);else if(this.axis==xpathAxis.CHILD)copyArray(b,c.childNodes);else if(this.axis==xpathAxis.DESCENDANT_OR_SELF){b.push(c);xpathCollectDescendants(b,c)}else if(this.axis==xpathAxis.DESCENDANT)xpathCollectDescendants(b,c);else if(this.axis==xpathAxis.FOLLOWING)for(var a=c;a;a=a.parentNode)for(var d=a.nextSibling;d;d=d.nextSibling){b.push(d);xpathCollectDescendants(b,d)}else if(this.axis==xpathAxis.FOLLOWING_SIBLING)for(var a=c.nextSibling;a;a=a.nextSibling)b.push(a);else if(this.axis==xpathAxis.NAMESPACE)alert("not implemented: axis namespace");else if(this.axis==xpathAxis.PARENT){if(c.parentNode)b.push(c.parentNode)}else if(this.axis==xpathAxis.PRECEDING)for(var a=c;a;a=a.parentNode)for(var d=a.previousSibling;d;d=d.previousSibling){b.push(d);xpathCollectDescendantsReverse(b,d)}else if(this.axis==xpathAxis.PRECEDING_SIBLING)for(var a=c.previousSibling;a;a=a.previousSibling)b.push(a);else if(this.axis==xpathAxis.SELF)b.push(c);else throw"ERROR -- NO SUCH AXIS: "+this.axis;var f=b;b=[];for(var e=0;e<f.length;++e){var a=f[e];if(this.nodetest.evaluate(h.clone(a,e,f)).booleanValue())b.push(a)}for(var e=0;e<this.predicate.length;++e){var f=b;b=[];for(var g=0;g<f.length;++g){var a=f[g];if(this.predicate[e].evaluate(h.clone(a,g,f)).booleanValue())b.push(a)}}return new NodeSetValue(b)};function NodeTestAny(){this.value=new BooleanValue(true)}NodeTestAny.prototype.evaluate=function(){return this.value};function NodeTestElementOrAttribute(){}NodeTestElementOrAttribute.prototype.evaluate=function(a){return new BooleanValue(a.node.nodeType==DOM_ELEMENT_NODE||a.node.nodeType==DOM_ATTRIBUTE_NODE)};function NodeTestText(){}NodeTestText.prototype.evaluate=function(a){return new BooleanValue(a.node.nodeType==DOM_TEXT_NODE)};function NodeTestComment(){}NodeTestComment.prototype.evaluate=function(a){return new BooleanValue(a.node.nodeType==DOM_COMMENT_NODE)};function NodeTestPI(a){this.target=a}NodeTestPI.prototype.evaluate=function(a){return new BooleanValue(a.node.nodeType==DOM_PROCESSING_INSTRUCTION_NODE&&(!this.target||a.node.nodeName==this.target))};function NodeTestNC(a){this.regex=new RegExp("^"+a+":");this.nsprefix=a}NodeTestNC.prototype.evaluate=function(a){var b=a.node;return new BooleanValue(this.regex.match(b.nodeName))};function NodeTestName(a){this.name=a}NodeTestName.prototype.evaluate=function(a){var b=a.node;return new BooleanValue(b.nodeName==this.name)};function PredicateExpr(a){this.expr=a}PredicateExpr.prototype.evaluate=function(b){var a=this.expr.evaluate(b);if(a.type=="number")return new BooleanValue(b.position==a.numberValue()-1);else return new BooleanValue(a.booleanValue())};function FunctionCallExpr(a){this.name=a;this.args=[]}FunctionCallExpr.prototype.appendArg=function(a){this.args.push(a)};FunctionCallExpr.prototype.evaluate=function(c){var a=""+this.name.value,b=this.xpathfunctions[a];if(b)return b.call(this,c);else{xpathLog("XPath NO SUCH FUNCTION "+a);return new BooleanValue(false)}};FunctionCallExpr.prototype.xpathfunctions={last:function(a){assert(this.args.length==0);return new NumberValue(a.contextSize())},position:function(a){assert(this.args.length==0);return new NumberValue(a.position+1)},count:function(a){assert(this.args.length==1);var b=this.args[0].evaluate(a);return new NumberValue(b.nodeSetValue().length)},id:function(e){assert(this.args.length==1);var d=this.args[0].evaluate(e),f=[],b;if(d.type=="node-set"){b=[];var g=d.nodeSetValue();for(var a=0;a<g.length;++a){var i=xmlValue(g[a]).split(/\s+/);for(var c=0;c<i.length;++c)b.push(i[c])}}else b=d.stringValue().split(/\s+/);var j=e.node.ownerDocument;for(var a=0;a<b.length;++a){var h=j.getElementById(b[a]);if(h)f.push(h)}return new NodeSetValue(f)},"local-name":function(){alert("not implmented yet: XPath function local-name()")},"namespace-uri":function(){alert("not implmented yet: XPath function namespace-uri()")},name:function(b){assert(this.args.length==1||this.args.length==0);var a;if(this.args.length==0)a=[b.node];else a=this.args[0].evaluate(b).nodeSetValue();if(a.length==0)return new StringValue("");else return new StringValue(a[0].nodeName)},string:function(a){assert(this.args.length==1||this.args.length==0);if(this.args.length==0)return new StringValue((new NodeSetValue([a.node])).stringValue());else return new StringValue(this.args[0].evaluate(a).stringValue())},concat:function(c){var b="";for(var a=0;a<this.args.length;++a)b+=this.args[a].evaluate(c).stringValue();return new StringValue(b)},"starts-with":function(a){assert(this.args.length==2);var b=this.args[0].evaluate(a).stringValue(),c=this.args[1].evaluate(a).stringValue();return new BooleanValue(b.indexOf(c)==0)},contains:function(a){assert(this.args.length==2);var b=this.args[0].evaluate(a).stringValue(),c=this.args[1].evaluate(a).stringValue();return new BooleanValue(b.indexOf(c)!=-1)},"substring-before":function(b){assert(this.args.length==2);var c=this.args[0].evaluate(b).stringValue(),e=this.args[1].evaluate(b).stringValue(),d=c.indexOf(e),a;if(d==-1)a="";else a=c.substr(0,d);return new StringValue(a)},"substring-after":function(b){assert(this.args.length==2);var c=this.args[0].evaluate(b).stringValue(),d=this.args[1].evaluate(b).stringValue(),e=c.indexOf(d),a;if(e==-1)a="";else a=c.substr(e+d.length);return new StringValue(a)},substring:function(a){assert(this.args.length==2||this.args.length==3);var e=this.args[0].evaluate(a).stringValue(),f=this.args[1].evaluate(a).numberValue(),b;if(this.args.length==2){var d=Math.max(0,Math.round(f)-1);b=e.substr(d)}else{var h=this.args[2].evaluate(a).numberValue(),c=Math.round(f)-1,d=Math.max(0,c),g=Math.round(h)-Math.max(0,-c);b=e.substr(d,g)}return new StringValue(b)},"string-length":function(b){var a;if(this.args.length>0)a=this.args[0].evaluate(b).stringValue();else a=(new NodeSetValue([b.node])).stringValue();return new NumberValue(a.length)},"normalize-space":function(b){var a;if(this.args.length>0)a=this.args[0].evaluate(b).stringValue();else a=(new NodeSetValue([b.node])).stringValue();a=a.replace(/^\s*/,"").replace(/\s*$/,"").replace(/\s+/g," ");return new StringValue(a)},translate:function(b){assert(this.args.length==3);var c=this.args[0].evaluate(b).stringValue(),d=this.args[1].evaluate(b).stringValue(),e=this.args[2].evaluate(b).stringValue();for(var a=0;a<d.length;++a)c=c.replace(new RegExp(d.charAt(a),"g"),e.charAt(a));return new StringValue(c)},"boolean":function(a){assert(this.args.length==1);return new BooleanValue(this.args[0].evaluate(a).booleanValue())},not:function(a){assert(this.args.length==1);var b=!this.args[0].evaluate(a).booleanValue();return new BooleanValue(b)},"true":function(){assert(this.args.length==0);return new BooleanValue(true)},"false":function(){assert(this.args.length==0);return new BooleanValue(false)},lang:function(c){assert(this.args.length==1);var e=this.args[0].evaluate(c).stringValue(),b,a=c.node;while(a&&a!=a.parentNode){b=a.getAttribute("xml:lang");if(b)break;a=a.parentNode}if(!b)return new BooleanValue(false);else{var d=new RegExp("^"+e+"$","i");return new BooleanValue(b.match(d)||b.replace(/_.*$/,"").match(d))}},number:function(a){assert(this.args.length==1||this.args.length==0);if(this.args.length==1)return new NumberValue(this.args[0].evaluate(a).numberValue());else return new NumberValue((new NodeSetValue([a.node])).numberValue())},sum:function(d){assert(this.args.length==1);var c=this.args[0].evaluate(d).nodeSetValue(),b=0;for(var a=0;a<c.length;++a)b+=xmlValue(c[a])-0;return new NumberValue(b)},floor:function(a){assert(this.args.length==1);var b=this.args[0].evaluate(a).numberValue();return new NumberValue(Math.floor(b))},ceiling:function(a){assert(this.args.length==1);var b=this.args[0].evaluate(a).numberValue();return new NumberValue(Math.ceil(b))},round:function(a){assert(this.args.length==1);var b=this.args[0].evaluate(a).numberValue();return new NumberValue(Math.round(b))},"ext-join":function(d){assert(this.args.length==2);var c=this.args[0].evaluate(d).nodeSetValue(),e=this.args[1].evaluate(d).stringValue(),a="";for(var b=0;b<c.length;++b){if(a)a+=e;a+=xmlValue(c[b])}return new StringValue(a)},"ext-if":function(a){assert(this.args.length==3);if(this.args[0].evaluate(a).booleanValue())return this.args[1].evaluate(a);else return this.args[2].evaluate(a)},"ext-cardinal":function(a){assert(this.args.length>=1);var d=this.args[0].evaluate(a).numberValue(),b=[];for(var c=0;c<d;++c)b.push(a.node);return new NodeSetValue(b)}};function UnionExpr(a,b){this.expr1=a;this.expr2=b}UnionExpr.prototype.evaluate=function(f){var a=this.expr1.evaluate(f).nodeSetValue(),e=this.expr2.evaluate(f).nodeSetValue(),g=a.length;for(var c=0;c<e.length;++c){var h=e[c],d=false;for(var b=0;b<g;++b)if(a[b]==h){d=true;b=g}if(!d)a.push(h)}return new NodeSetValue(a)};function PathExpr(a,b){this.filter=a;this.rel=b}PathExpr.prototype.evaluate=function(f){var b=this.filter.evaluate(f).nodeSetValue(),e=[];for(var a=0;a<b.length;++a){var d=this.rel.evaluate(f.clone(b[a],a,b)).nodeSetValue();for(var c=0;c<d.length;++c)e.push(d[c])}return new NodeSetValue(e)};function FilterExpr(b,a){this.expr=b;this.predicate=a}FilterExpr.prototype.evaluate=function(e){var a=this.expr.evaluate(e).nodeSetValue();for(var d=0;d<this.predicate.length;++d){var c=a;a=[];for(var b=0;b<c.length;++b){var f=c[b];if(this.predicate[d].evaluate(e.clone(f,b,c)).booleanValue())a.push(f)}}return new NodeSetValue(a)};function UnaryMinusExpr(a){this.expr=a}UnaryMinusExpr.prototype.evaluate=function(a){return new NumberValue(-this.expr.evaluate(a).numberValue())};function BinaryExpr(a,c,b){this.expr1=a;this.expr2=b;this.op=c}BinaryExpr.prototype.evaluate=function(a){var b;switch(this.op.value){case "or":b=new BooleanValue(this.expr1.evaluate(a).booleanValue()||this.expr2.evaluate(a).booleanValue());break;case "and":b=new BooleanValue(this.expr1.evaluate(a).booleanValue()&&this.expr2.evaluate(a).booleanValue());break;case "+":b=new NumberValue(this.expr1.evaluate(a).numberValue()+this.expr2.evaluate(a).numberValue());break;case "-":b=new NumberValue(this.expr1.evaluate(a).numberValue()-this.expr2.evaluate(a).numberValue());break;case "*":b=new NumberValue(this.expr1.evaluate(a).numberValue()*this.expr2.evaluate(a).numberValue());break;case "mod":b=new NumberValue(this.expr1.evaluate(a).numberValue()%this.expr2.evaluate(a).numberValue());break;case "div":b=new NumberValue(this.expr1.evaluate(a).numberValue()/this.expr2.evaluate(a).numberValue());break;case "=":b=this.compare(a,function(a,b){return a==b});break;case "!=":b=this.compare(a,function(a,b){return a!=b});break;case "<":b=this.compare(a,function(a,b){return a<b});break;case "<=":b=this.compare(a,function(a,b){return a<=b});break;case ">":b=this.compare(a,function(a,b){return a>b});break;case ">=":b=this.compare(a,function(a,b){return a>=b});break;default:alert("BinaryExpr.evaluate: "+this.op.value)}return b};BinaryExpr.prototype.compare=function(m,e){var b=this.expr1.evaluate(m),c=this.expr2.evaluate(m),a;if(b.type=="node-set"&&c.type=="node-set"){var k=b.nodeSetValue(),l=c.nodeSetValue();a=false;for(var g=0;g<k.length;++g)for(var h=0;h<l.length;++h)if(e(xmlValue(k[g]),xmlValue(l[h]))){a=true;h=l.length;g=k.length}}else if(b.type=="node-set"||c.type=="node-set")if(b.type=="number"){var j=b.numberValue(),f=c.nodeSetValue();a=false;for(var d=0;d<f.length;++d){var i=xmlValue(f[d])-0;if(e(j,i)){a=true;break}}}else if(c.type=="number"){var f=b.nodeSetValue(),j=c.numberValue();a=false;for(var d=0;d<f.length;++d){var i=xmlValue(f[d])-0;if(e(i,j)){a=true;break}}}else if(b.type=="string"){var j=b.stringValue(),f=c.nodeSetValue();a=false;for(var d=0;d<f.length;++d){var i=xmlValue(f[d]);if(e(j,i)){a=true;break}}}else if(c.type=="string"){var f=b.nodeSetValue(),j=c.stringValue();a=false;for(var d=0;d<f.length;++d){var i=xmlValue(f[d]);if(e(i,j)){a=true;break}}}else a=e(b.booleanValue(),c.booleanValue());else if(b.type=="boolean"||c.type=="boolean")a=e(b.booleanValue(),c.booleanValue());else if(b.type=="number"||c.type=="number")a=e(b.numberValue(),c.numberValue());else a=e(b.stringValue(),c.stringValue());return new BooleanValue(a)};function LiteralExpr(a){this.value=a}LiteralExpr.prototype.evaluate=function(){return new StringValue(this.value)};function NumberExpr(a){this.value=a}NumberExpr.prototype.evaluate=function(){return new NumberValue(this.value)};function VariableExpr(a){this.name=a}VariableExpr.prototype.evaluate=function(a){return a.getVariable(this.name)};function makeTokenExpr(a){return new TokenExpr(a)}function passExpr(a){return a}function makeLocationExpr1(b,a){a.absolute=true;return a}function makeLocationExpr2(b,a){a.absolute=true;a.prependStep(makeAbbrevStep(b.value));return a}function makeLocationExpr3(){var a=new LocationExpr;a.appendStep(makeAbbrevStep("."));a.absolute=true;return a}function makeLocationExpr4(b){var a=new LocationExpr;a.absolute=true;a.appendStep(makeAbbrevStep(b.value));return a}function makeLocationExpr5(b){var a=new LocationExpr;a.appendStep(b);return a}function makeLocationExpr6(a,c,b){a.appendStep(b);return a}function makeLocationExpr7(a,b){a.appendStep(makeAbbrevStep(b.value));return a}function makeStepExpr1(a){return makeAbbrevStep(a.value)}function makeStepExpr2(a){return makeAbbrevStep(a.value)}function makeStepExpr3(a,c,b){return new StepExpr(a.value,b)}function makeStepExpr4(b,a){return new StepExpr("attribute",a)}function makeStepExpr5(a){return new StepExpr("child",a)}function makeStepExpr6(a,b){a.appendPredicate(b);return a}function makeAbbrevStep(a){switch(a){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(){return new NodeTestElementOrAttribute}function makeNodeTestExpr2(a){return new NodeTestNC(a.value)}function makeNodeTestExpr3(a){return new NodeTestName(a.value)}function makeNodeTestExpr4(a){var b=a.value.replace(/\s*\($/,"");switch(b){case "node":return new NodeTestAny;case "text":return new NodeTestText;case "comment":return new NodeTestComment;case "processing-instruction":return new NodeTestPI("")}}function makeNodeTestExpr5(c,b){var a=c.replace(/\s*\($/,"");if(a!="processing-instruction")throw a;return new NodeTestPI(b.value)}function makePredicateExpr(c,a){return new PredicateExpr(a)}function makePrimaryExpr(c,a){return a}function makeFunctionCallExpr1(a){return new FunctionCallExpr(a)}function makeFunctionCallExpr2(e,g,d,c){var a=new FunctionCallExpr(e);a.appendArg(d);for(var b=0;b<c.length;++b)a.appendArg(c[b]);return a}function makeArgumentExpr(b,a){return a}function makeUnionExpr(a,c,b){return new UnionExpr(a,b)}function makePathExpr1(a,c,b){return new PathExpr(a,b)}function makePathExpr2(c,b,a){a.prependStep(makeAbbrevStep(b.value));return new PathExpr(c,a)}function makeFilterExpr(b,a){if(a.length>0)return new FilterExpr(b,a);else return b}function makeUnaryMinusExpr(b,a){return new UnaryMinusExpr(a)}function makeBinaryExpr(a,c,b){return new BinaryExpr(a,c,b)}function makeLiteralExpr(a){var b=a.value.substring(1,a.value.length-1);return new LiteralExpr(b)}function makeNumberExpr(a){return new NumberExpr(a.value)}function makeVariableReference(b,a){return new VariableExpr(a.value)}function makeSimpleExpr(a){if(a.charAt(0)=="$")return new VariableExpr(a.substr(1));else if(a.charAt(0)=="@"){var c=new NodeTestName(a.substr(1)),d=new StepExpr("attribute",c),b=new LocationExpr;b.appendStep(d);return b}else if(a.match(/^[0-9]+$/))return new NumberExpr(a);else{var c=new NodeTestName(a),d=new StepExpr("child",c),b=new LocationExpr;b.appendStep(d);return b}}function makeSimpleExpr2(d){var b=stringSplit(d,"/"),c=new LocationExpr;for(var a=0;a<b.length;++a){var e=new NodeTestName(b[a]),f=new StepExpr("child",e);c.appendStep(f)}return c}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"},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("|"),TOK_PIPE={label:"|",prec:17,re:new RegExp("^\\|")},TOK_DSLASH={label:"//",prec:19,re:new RegExp("^//")},TOK_SLASH={label:"/",prec:30,re:new RegExp("^/")},TOK_AXIS={label:"::",prec:20,re:new RegExp("^::")},TOK_COLON={label:":",prec:1e3,re:new RegExp("^:")},TOK_AXISNAME={label:"[axis]",re:new RegExp("^("+xpathAxesRe+")")},TOK_PARENO={label:"(",prec:34,re:new RegExp("^\\(")},TOK_PARENC={label:")",re:new RegExp("^\\)")},TOK_DDOT={label:"..",prec:34,re:new RegExp("^\\.\\.")},TOK_DOT={label:".",prec:34,re:new RegExp("^\\.")},TOK_AT={label:"@",prec:34,re:new RegExp("^@")},TOK_COMMA={label:",",re:new RegExp("^,")},TOK_OR={label:"or",prec:10,re:new RegExp("^or\\b")},TOK_AND={label:"and",prec:11,re:new RegExp("^and\\b")},TOK_EQ={label:"=",prec:12,re:new RegExp("^=")},TOK_NEQ={label:"!=",prec:12,re:new RegExp("^!=")},TOK_GE={label:">=",prec:13,re:new RegExp("^>=")},TOK_GT={label:">",prec:13,re:new RegExp("^>")},TOK_LE={label:"<=",prec:13,re:new RegExp("^<=")},TOK_LT={label:"<",prec:13,re:new RegExp("^<")},TOK_PLUS={label:"+",prec:14,re:new RegExp("^\\+"),left:true},TOK_MINUS={label:"-",prec:14,re:new RegExp("^\\-"),left:true},TOK_DIV={label:"div",prec:15,re:new RegExp("^div\\b"),left:true},TOK_MOD={label:"mod",prec:15,re:new RegExp("^mod\\b"),left:true},TOK_BRACKO={label:"[",prec:32,re:new RegExp("^\\[")},TOK_BRACKC={label:"]",re:new RegExp("^\\]")},TOK_DOLLAR={label:"$",re:new RegExp("^\\$")},TOK_NCNAME={label:"[ncname]",re:new RegExp("^"+XML_NC_NAME)},TOK_ASTERISK={label:"*",prec:15,re:new RegExp("^\\*"),left:true},TOK_LITERALQ={label:"[litq]",prec:20,re:new RegExp("^'[^\\']*'")},TOK_LITERALQQ={label:"[litqq]",prec:20,re:new RegExp('^"[^\\"]*"')},TOK_NUMBER={label:"[number]",prec:35,re:new RegExp("^\\d+(\\.\\d*)?")},TOK_QNAME={label:"[qname]",re:new RegExp("^("+XML_NC_NAME+":)?"+XML_NC_NAME)},TOK_NODEO={label:"[nodetest-start]",re:new RegExp("^(processing-instruction|comment|text|node)\\(")},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],XPathLocationPath={label:"LocationPath"},XPathRelativeLocationPath={label:"RelativeLocationPath"},XPathAbsoluteLocationPath={label:"AbsoluteLocationPath"},XPathStep={label:"Step"},XPathNodeTest={label:"NodeTest"},XPathPredicate={label:"Predicate"},XPathLiteral={label:"Literal"},XPathExpr={label:"Expr"},XPathPrimaryExpr={label:"PrimaryExpr"},XPathVariableReference={label:"Variablereference"},XPathNumber={label:"Number"},XPathFunctionCall={label:"FunctionCall"},XPathArgumentRemainder={label:"ArgumentRemainder"},XPathPathExpr={label:"PathExpr"},XPathUnionExpr={label:"UnionExpr"},XPathFilterExpr={label:"FilterExpr"},XPathDigits={label:"Digits"},xpathNonTerminals=[XPathLocationPath,XPathRelativeLocationPath,XPathAbsoluteLocationPath,XPathStep,XPathNodeTest,XPathPredicate,XPathLiteral,XPathExpr,XPathPrimaryExpr,XPathVariableReference,XPathNumber,XPathFunctionCall,XPathArgumentRemainder,XPathPathExpr,XPathUnionExpr,XPathFilterExpr,XPathDigits],Q_01={label:"?"},Q_MM={label:"*"},Q_1M={label:"+"},ASSOC_LEFT=true,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]],xpathRules=[];function xpathParseInit(){if(xpathRules.length)return;xpathGrammarRules.sort(function(c,d){var a=c[1].length,b=d[1].length;if(a<b)return 1;else if(a>b)return -1;else return 0});var f=1;for(var a=0;a<xpathNonTerminals.length;++a)xpathNonTerminals[a].key=f++;for(a=0;a<xpathTokenRules.length;++a)xpathTokenRules[a].key=f++;xpathLog("XPath parse INIT: "+f+" rules");function e(b,a,c){if(!b[a])b[a]=[];b[a].push(c)}for(a=0;a<xpathGrammarRules.length;++a){var d=xpathGrammarRules[a],c=d[1];for(var b=c.length-1;b>=0;--b)if(c[b]==Q_1M){e(xpathRules,c[b-1].key,d);break}else if(c[b]==Q_MM||c[b]==Q_01){e(xpathRules,c[b-1].key,d);--b}else{e(xpathRules,c[b].key,d);break}}xpathLog("XPath parse INIT: "+xpathRules.length+" rule bins");var g=0;mapExec(xpathRules,function(a){if(a)g+=a.length});xpathLog("XPath parse INIT: "+g/xpathRules.length+" average bin size")}function xpathCollectDescendants(b,c){for(var a=c.firstChild;a;a=a.nextSibling){b.push(a);arguments.callee(b,a)}}function xpathCollectDescendantsReverse(b,c){for(var a=c.lastChild;a;a=a.previousSibling){b.push(a);arguments.callee(b,a)}}function xpathDomEval(b,c){var a=xpathParse(b),d=a.evaluate(new ExprContext(c));return d}function xpathSort(b,h){if(h.length==0)return;var c=[];for(var a=0;a<b.contextSize();++a){var g=b.nodelist[a],e={node:g,key:[]},l=b.clone(g,0,[g]);for(var i=0;i<h.length;++i){var d=h[i],k=d.expr.evaluate(l),f;if(d.type=="text")f=k.stringValue();else if(d.type=="number")f=k.numberValue();e.key.push({value:f,order:d.order})}e.key.push({value:a,order:"ascending"});c.push(e)}c.sort(xpathSortByKey);var j=[];for(var a=0;a<c.length;++a)j.push(c[a].node);b.nodelist=j;b.setNode(0)}function xpathSortByKey(b,c){for(var a=0;a<b.key.length;++a){var d=b.key[a].order=="descending"?-1:1;if(b.key[a].value>c.key[a].value)return +1*d;else if(b.key[a].value<c.key[a].value)return -1*d}return 0}function xpathEval(b,a){var c=xpathParse(b),d=c.evaluate(a);return d}
