function xpathParse(_1){
if(xpathdebug){
Log.write("XPath parse "+_1);
}
xpathParseInit();
var _2=xpathCacheLookup(_1);
if(_2){
if(xpathdebug){
Log.write(" ... cached");
}
return _2;
}
if(_1.match(/^(\$|@)?\w+$/i)){
var _3=makeSimpleExpr(_1);
xpathParseCache[_1]=_3;
if(xpathdebug){
Log.write(" ... simple");
}
return _3;
}
if(_1.match(/^\w+(\/\w+)*$/i)){
var _4=makeSimpleExpr2(_1);
xpathParseCache[_1]=_4;
if(xpathdebug){
Log.write(" ... simple 2");
}
return _4;
}
var _5=_1;
if(xpathdebug){
Timer.start("XPath parse",_5);
}
var _6=[];
var _7=null;
var _8=null;
var _9=false;
var _a=0;
var _b=0;
var _c=0;
while(!_9){
_a++;
_1=_1.replace(/^\s*/,"");
_8=_7;
_7=null;
var _d=null;
var _e="";
for(var i=0;i<xpathTokenRules.length;++i){
var _10=xpathTokenRules[i].re.exec(_1);
_b++;
if(_10&&_10.length>0&&_10[0].length>_e.length){
_d=xpathTokenRules[i];
_e=_10[0];
break;
}
}
if(_d&&(_d==TOK_DIV||_d==TOK_MOD||_d==TOK_AND||_d==TOK_OR)&&(!_8||_8.tag==TOK_AT||_8.tag==TOK_DSLASH||_8.tag==TOK_SLASH||_8.tag==TOK_AXIS||_8.tag==TOK_DOLLAR)){
_d=TOK_QNAME;
}
if(_d){
_1=_1.substr(_e.length);
if(xpathdebug){
Log.write("token: "+_e+" -- "+_d.label);
}
_7={tag:_d,match:_e,prec:_d.prec?_d.prec:0,expr:makeTokenExpr(_e)};
}else{
if(xpathdebug){
Log.write("DONE");
}
_9=true;
}
while(xpathReduce(_6,_7)){
_c++;
if(xpathdebug){
Log.write("stack: "+stackToString(_6));
}
}
}
if(xpathdebug){
Log.write(stackToString(_6));
}
if(_6.length!=1){
throw "XPath parse error "+_5+":\n"+stackToString(_6);
}
var _11=_6[0].expr;
xpathParseCache[_5]=_11;
if(xpathdebug){
Timer.end("XPath parse",_5);
}
if(xpathdebug){
Log.write("XPath parse: "+_a+" / "+_b+" / "+_c);
}
return _11;
}
var xpathParseCache={};
function xpathCacheLookup(_12){
return xpathParseCache[_12];
}
function xpathReduce(_13,_14){
var _15=null;
if(_13.length>0){
var top=_13[_13.length-1];
var _17=xpathRules[top.tag.key];
if(_17){
for(var i=0;i<_17.length;++i){
var _19=_17[i];
var _1a=xpathMatchStack(_13,_19[1]);
if(_1a.length){
_15={tag:_19[0],rule:_19,match:_1a};
_15.prec=xpathGrammarPrecedence(_15);
break;
}
}
}
}
var ret;
if(_15&&(!_14||_15.prec>_14.prec||(_14.tag.left&&_15.prec>=_14.prec))){
for(var i=0;i<_15.match.matchlength;++i){
_13.pop();
}
if(xpathdebug){
Log.write("reduce "+_15.tag.label+" "+_15.prec+" ahead "+(_14?_14.tag.label+" "+_14.prec+(_14.tag.left?" left":""):" none "));
}
var _1d=mapExpr(_15.match,function(m){
return m.expr;
});
_15.expr=_15.rule[3].apply(null,_1d);
_13.push(_15);
ret=true;
}else{
if(_14){
if(xpathdebug){
Log.write("shift "+_14.tag.label+" "+_14.prec+(_14.tag.left?" left":"")+" over "+(_15?_15.tag.label+" "+_15.prec:" none"));
}
_13.push(_14);
}
ret=false;
}
return ret;
}
function xpathMatchStack(_1f,_20){
var S=_1f.length;
var P=_20.length;
var p,s;
var _24=[];
_24.matchlength=0;
var ds=0;
for(p=P-1,s=S-1;p>=0&&s>=0;--p,s-=ds){
ds=0;
var _26=[];
if(_20[p]==Q_MM){
p-=1;
_24.push(_26);
while(s-ds>=0&&_1f[s-ds].tag==_20[p]){
_26.push(_1f[s-ds]);
ds+=1;
_24.matchlength+=1;
}
}else{
if(_20[p]==Q_01){
p-=1;
_24.push(_26);
while(s-ds>=0&&ds<2&&_1f[s-ds].tag==_20[p]){
_26.push(_1f[s-ds]);
ds+=1;
_24.matchlength+=1;
}
}else{
if(_20[p]==Q_1M){
p-=1;
_24.push(_26);
if(_1f[s].tag==_20[p]){
while(s-ds>=0&&_1f[s-ds].tag==_20[p]){
_26.push(_1f[s-ds]);
ds+=1;
_24.matchlength+=1;
}
}else{
return [];
}
}else{
if(_1f[s].tag==_20[p]){
_24.push(_1f[s]);
ds+=1;
_24.matchlength+=1;
}else{
return [];
}
}
}
}
reverseInplace(_26);
_26.expr=mapExpr(_26,function(m){
return m.expr;
});
}
reverseInplace(_24);
if(p==-1){
return _24;
}else{
return [];
}
}
function xpathTokenPrecedence(tag){
return tag.prec||2;
}
function xpathGrammarPrecedence(_29){
var ret=0;
if(_29.rule){
if(_29.rule.length>=3&&_29.rule[2]>=0){
ret=_29.rule[2];
}else{
for(var i=0;i<_29.rule[1].length;++i){
var p=xpathTokenPrecedence(_29.rule[1][i]);
ret=Math.max(ret,p);
}
}
}else{
if(_29.tag){
ret=xpathTokenPrecedence(_29.tag);
}else{
if(_29.length){
for(var j=0;j<_29.length;++j){
var p=xpathGrammarPrecedence(_29[j]);
ret=Math.max(ret,p);
}
}
}
}
return ret;
}
function stackToString(_2f){
var ret="";
for(var i=0;i<_2f.length;++i){
if(ret){
ret+="\n";
}
ret+=_2f[i].tag.label;
}
return ret;
}
function ExprContext(_32,_33,_34,_35){
this.node=_32;
this.position=_33||0;
this.nodelist=_34||[_32];
this.variables={};
this.parent=_35||null;
this.root=_35?_35.root:_32.ownerDocument;
}
ExprContext.prototype.clone=function(_36,_37,_38){
return new ExprContext(_36||this.node,typeof _37!="undefined"?_37:this.position,_38||this.nodelist,this);
};
ExprContext.prototype.setVariable=function(_39,_3a){
this.variables[_39]=_3a;
};
ExprContext.prototype.getVariable=function(_3b){
if(typeof this.variables[_3b]!="undefined"){
return this.variables[_3b];
}else{
if(this.parent){
return this.parent.getVariable(_3b);
}else{
return null;
}
}
};
ExprContext.prototype.setNode=function(_3c,_3d){
this.node=_3c;
this.position=_3d;
};
function StringValue(_3e){
this.value=_3e;
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(_3f){
this.value=_3f;
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(_40){
this.value=_40;
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(_41){
this.value=_41;
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(m){
this.value=m;
}
TokenExpr.prototype.evaluate=function(){
return new StringValue(this.value);
};
function LocationExpr(){
this.absolute=false;
this.steps=[];
}
LocationExpr.prototype.appendStep=function(s){
this.steps.push(s);
};
LocationExpr.prototype.prependStep=function(s){
var _45=this.steps;
this.steps=[s];
for(var i=0;i<_45.length;++i){
this.steps.push(_45[i]);
}
};
LocationExpr.prototype.evaluate=function(ctx){
var _48;
if(this.absolute){
_48=ctx.root;
}else{
_48=ctx.node;
}
var _49=[];
xPathStep(_49,this.steps,0,_48,ctx);
return new NodeSetValue(_49);
};
function xPathStep(_4a,_4b,_4c,_4d,ctx){
var s=_4b[_4c];
var _50=ctx.clone(_4d);
var _51=s.evaluate(_50).nodeSetValue();
for(var i=0;i<_51.length;++i){
if(_4c==_4b.length-1){
_4a.push(_51[i]);
}else{
xPathStep(_4a,_4b,_4c+1,_51[i],ctx);
}
}
}
function StepExpr(_53,_54,_55){
this.axis=_53;
this.nodetest=_54;
this.predicate=_55||[];
}
StepExpr.prototype.appendPredicate=function(p){
this.predicate.push(p);
};
StepExpr.prototype.evaluate=function(ctx){
var _58=ctx.node;
var _59=[];
if(this.axis==xpathAxis.ANCESTOR_OR_SELF){
_59.push(_58);
for(var n=_58.parentNode;n;n=_58.parentNode){
_59.push(n);
}
}else{
if(this.axis==xpathAxis.ANCESTOR){
for(var n=_58.parentNode;n;n=_58.parentNode){
_59.push(n);
}
}else{
if(this.axis==xpathAxis.ATTRIBUTE){
copyArray(_59,_58.attributes);
}else{
if(this.axis==xpathAxis.CHILD){
copyArray(_59,_58.childNodes);
}else{
if(this.axis==xpathAxis.DESCENDANT_OR_SELF){
_59.push(_58);
xpathCollectDescendants(_59,_58);
}else{
if(this.axis==xpathAxis.DESCENDANT){
xpathCollectDescendants(_59,_58);
}else{
if(this.axis==xpathAxis.FOLLOWING){
for(var n=_58.parentNode;n;n=n.parentNode){
for(var nn=n.nextSibling;nn;nn=nn.nextSibling){
_59.push(nn);
xpathCollectDescendants(_59,nn);
}
}
}else{
if(this.axis==xpathAxis.FOLLOWING_SIBLING){
for(var n=_58.nextSibling;n;n=_58.nextSibling){
_59.push(n);
}
}else{
if(this.axis==xpathAxis.NAMESPACE){
alert("not implemented: axis namespace");
}else{
if(this.axis==xpathAxis.PARENT){
if(_58.parentNode){
_59.push(_58.parentNode);
}
}else{
if(this.axis==xpathAxis.PRECEDING){
for(var n=_58.parentNode;n;n=n.parentNode){
for(var nn=n.previousSibling;nn;nn=nn.previousSibling){
_59.push(nn);
xpathCollectDescendantsReverse(_59,nn);
}
}
}else{
if(this.axis==xpathAxis.PRECEDING_SIBLING){
for(var n=_58.previousSibling;n;n=_58.previousSibling){
_59.push(n);
}
}else{
if(this.axis==xpathAxis.SELF){
_59.push(_58);
}else{
throw "ERROR -- NO SUCH AXIS: "+this.axis;
}
}
}
}
}
}
}
}
}
}
}
}
}
var _62=_59;
_59=[];
for(var i=0;i<_62.length;++i){
var n=_62[i];
if(this.nodetest.evaluate(ctx.clone(n,i,_62)).booleanValue()){
_59.push(n);
}
}
for(var i=0;i<this.predicate.length;++i){
var _66=_59;
_59=[];
for(var ii=0;ii<_66.length;++ii){
var n=_66[ii];
if(this.predicate[i].evaluate(ctx.clone(n,ii,_66)).booleanValue()){
_59.push(n);
}
}
}
return new NodeSetValue(_59);
};
function NodeTestAny(){
this.value=new BooleanValue(true);
}
NodeTestAny.prototype.evaluate=function(ctx){
return this.value;
};
function NodeTestElement(){
}
NodeTestElement.prototype.evaluate=function(ctx){
return new BooleanValue(ctx.node.nodeType==DOM_ELEMENT_NODE);
};
function NodeTestText(){
}
NodeTestText.prototype.evaluate=function(ctx){
return new BooleanValue(ctx.node.nodeType==DOM_TEXT_NODE);
};
function NodeTestComment(){
}
NodeTestComment.prototype.evaluate=function(ctx){
return new BooleanValue(ctx.node.nodeType==DOM_COMMENT_NODE);
};
function NodeTestPI(_6d){
this.target=_6d;
}
NodeTestPI.prototype.evaluate=function(ctx){
return new BooleanValue(ctx.node.nodeType==DOM_PROCESSING_INSTRUCTION_NODE&&(!this.target||ctx.node.nodeName==this.target));
};
function NodeTestNC(_6f){
this.regex=new RegExp("^"+_6f+":");
this.nsprefix=_6f;
}
NodeTestNC.prototype.evaluate=function(ctx){
var n=ctx.node;
return new BooleanValue(this.regex.match(n.nodeName));
};
function NodeTestName(_72){
this.name=_72;
}
NodeTestName.prototype.evaluate=function(ctx){
var n=ctx.node;
return new BooleanValue(n.nodeName==this.name);
};
function PredicateExpr(_75){
this.expr=_75;
}
PredicateExpr.prototype.evaluate=function(ctx){
var v=this.expr.evaluate(ctx);
if(v.type=="number"){
return new BooleanValue(ctx.position==v.numberValue()-1);
}else{
return new BooleanValue(v.booleanValue());
}
};
function FunctionCallExpr(_78){
this.name=_78;
this.args=[];
}
FunctionCallExpr.prototype.appendArg=function(arg){
this.args.push(arg);
};
FunctionCallExpr.prototype.evaluate=function(ctx){
var fn=""+this.name.value;
var f=this.xpathfunctions[fn];
if(f){
return f.call(this,ctx);
}else{
Log.write("XPath NO SUCH FUNCTION "+fn);
return new BooleanValue(false);
}
};
FunctionCallExpr.prototype.xpathfunctions={"last":function(ctx){
assert(this.args.length==0);
return new NumberValue(ctx.nodelist.length);
},"position":function(ctx){
assert(this.args.length==0);
return new NumberValue(ctx.position+1);
},"count":function(ctx){
assert(this.args.length==1);
var v=this.args[0].evaluate(ctx);
return new NumberValue(v.nodeSetValue().length);
},"id":function(ctx){
assert(this.args.length==1);
var e=this.args.evaluate(ctx);
var ret=[];
var ids;
if(e.type=="node-set"){
ids=[];
for(var i=0;i<e.length;++i){
var v=xmlValue(e[i]).split(/\s+/);
for(var ii=0;ii<v.length;++ii){
ids.push(v[ii]);
}
}
}else{
ids=e.split(/\s+/);
}
var d=ctx.node.ownerDocument;
for(var i=0;i<ids.length;++i){
var n=d.getElementById(ids[i]);
if(n){
ret.push(n);
}
}
return new NodeSetValue(ret);
},"local-name":function(ctx){
alert("not implmented yet: XPath function local-name()");
},"namespace-uri":function(ctx){
alert("not implmented yet: XPath function namespace-uri()");
},"name":function(ctx){
assert(this.args.length==1||this.args.length==0);
var n;
if(this.args.length==0){
n=[ctx.node];
}else{
n=this.args[0].evaluate(ctx).nodeSetValue();
}
if(n.length==0){
return new StringValue("");
}else{
return new StringValue(n[0].nodeName);
}
},"string":function(ctx){
assert(this.args.length==1||this.args.length==0);
if(this.args.length==0){
return new StringValue(new NodeSetValue([ctx.node]).stringValue());
}else{
return new StringValue(this.args[0].evaluate(ctx).stringValue());
}
},"concat":function(ctx){
var ret="";
for(var i=0;i<this.args.length;++i){
ret+=this.args[i].evaluate(ctx).stringValue();
}
return new StringValue(ret);
},"starts-with":function(ctx){
assert(this.args.length==2);
var s0=this.args[0].evaluate(ctx).stringValue();
var s1=this.args[1].evaluate(ctx).stringValue();
return new BooleanValue(s0.indexOf(s1)==0);
},"contains":function(ctx){
assert(this.args.length==2);
var s0=this.args[0].evaluate(ctx).stringValue();
var s1=this.args[1].evaluate(ctx).stringValue();
return new BooleanValue(s0.indexOf(s1)!=-1);
},"substring-before":function(ctx){
assert(this.args.length==2);
var s0=this.args[0].evaluate(ctx).stringValue();
var s1=this.args[1].evaluate(ctx).stringValue();
var i=s0.indexOf(s1);
var ret;
if(i==-1){
ret="";
}else{
ret=s0.substr(0,i);
}
return new StringValue(ret);
},"substring-after":function(ctx){
assert(this.args.length==2);
var s0=this.args[0].evaluate(ctx).stringValue();
var s1=this.args[1].evaluate(ctx).stringValue();
var i=s0.indexOf(s1);
var ret;
if(i==-1){
ret="";
}else{
ret=s0.substr(i+s1.length);
}
return new StringValue(ret);
},"substring":function(ctx){
assert(this.args.length==2||this.args.length==3);
var s0=this.args[0].evaluate(ctx).stringValue();
var s1=this.args[1].evaluate(ctx).numberValue();
var ret;
if(this.args.length==2){
var i1=Math.max(0,Math.round(s1)-1);
ret=s0.substr(i1);
}else{
var s2=this.args[2].evaluate(ctx).numberValue();
var i0=Math.round(s1)-1;
var i1=Math.max(0,i0);
var i2=Math.round(s2)-Math.max(0,-i0);
ret=s0.substr(i1,i2);
}
return new StringValue(ret);
},"string-length":function(ctx){
var s;
if(this.args.length>0){
s=this.args[0].evaluate(ctx).stringValue();
}else{
s=new NodeSetValue([ctx.node]).stringValue();
}
return new NumberValue(s.length);
},"normalize-space":function(ctx){
var s;
if(this.args.length>0){
s=this.args[0].evaluate(ctx).stringValue();
}else{
s=new NodeSetValue([ctx.node]).stringValue();
}
s=s.replace(/^\s*/,"").replace(/\s*$/,"").replace(/\s+/g," ");
return new StringValue(s);
},"translate":function(ctx){
assert(this.args.length==3);
var s0=this.args[0].evaluate(ctx).stringValue();
var s1=this.args[1].evaluate(ctx).stringValue();
var s2=this.args[2].evaluate(ctx).stringValue();
for(var i=0;i<s1.length;++i){
s0=s0.replace(new RegExp(s1.charAt(i),"g"),s2.charAt(i));
}
return new StringValue(s0);
},"boolean":function(ctx){
assert(this.args.length==1);
return new BooleanValue(this.args[0].evaluate(ctx).booleanValue());
},"not":function(ctx){
assert(this.args.length==1);
var ret=!this.args[0].evaluate(ctx).booleanValue();
return new BooleanValue(ret);
},"true":function(ctx){
assert(this.args.length==0);
return new BooleanValue(true);
},"false":function(ctx){
assert(this.args.length==0);
return new BooleanValue(false);
},"lang":function(ctx){
assert(this.args.length==1);
var _bb=this.args[0].evaluate(ctx).stringValue();
var _bc;
var n=ctx.node;
while(n&&n!=n.parentNode){
_bc=n.getAttribute("xml:lang");
if(_bc){
break;
}
n=n.parentNode;
}
if(!_bc){
return new BooleanValue(false);
}else{
var re=new RegExp("^"+_bb+"$","i");
return new BooleanValue(_bc.match(re)||_bc.replace(/_.*$/,"").match(re));
}
},"number":function(ctx){
assert(this.args.length==1||this.args.length==0);
if(this.args.length==1){
return new NumberValue(this.args[0].evaluate(ctx).numberValue());
}else{
return new NumberValue(new NodeSetValue([ctx.node]).numberValue());
}
},"sum":function(ctx){
assert(this.args.length==1);
var n=this.args[0].evaluate(ctx).nodeSetValue();
var sum=0;
for(var i=0;i<n.length;++i){
sum+=xmlValue(n[i])-0;
}
return new NumberValue(sum);
},"floor":function(ctx){
assert(this.args.length==1);
var num=this.args[0].evaluate(ctx).numberValue();
return new NumberValue(Math.floor(num));
},"ceiling":function(ctx){
assert(this.args.length==1);
var num=this.args[0].evaluate(ctx).numberValue();
return new NumberValue(Math.ceil(num));
},"round":function(ctx){
assert(this.args.length==1);
var num=this.args[0].evaluate(ctx).numberValue();
return new NumberValue(Math.round(num));
},"ext-join":function(ctx){
assert(this.args.length==2);
var _cb=this.args[0].evaluate(ctx).nodeSetValue();
var _cc=this.args[1].evaluate(ctx).stringValue();
var ret="";
for(var i=0;i<_cb.length;++i){
if(ret){
ret+=_cc;
}
ret+=xmlValue(_cb[i]);
}
return new StringValue(ret);
},"ext-if":function(ctx){
assert(this.args.length==3);
if(this.args[0].evaluate(ctx).booleanValue()){
return this.args[1].evaluate(ctx);
}else{
return this.args[2].evaluate(ctx);
}
},"ext-sprintf":function(ctx){
assert(this.args.length>=1);
var _d1=[];
for(var i=0;i<this.args.length;++i){
_d1.push(this.args[i].evaluate(ctx).stringValue());
}
return new StringValue(sprintf.apply(null,_d1));
},"ext-cardinal":function(ctx){
assert(this.args.length>=1);
var c=this.args[0].evaluate(ctx).numberValue();
var ret=[];
for(var i=0;i<c;++i){
ret.push(ctx.node);
}
return new NodeSetValue(ret);
}};
function UnionExpr(_d7,_d8){
this.expr1=_d7;
this.expr2=_d8;
}
UnionExpr.prototype.evaluate=function(ctx){
var _da=this.expr1.evaluate(ctx).nodeSetValue();
var _db=this.expr2.evaluate(ctx).nodeSetValue();
var I1=_da.length;
for(var i2=0;i2<_db.length;++i2){
for(var i1=0;i1<I1;++i1){
if(_da[i1]==_db[i2]){
i1=I1;
}
}
_da.push(_db[i2]);
}
return new NodeSetValue(_db);
};
function PathExpr(_df,rel){
this.filter=_df;
this.rel=rel;
}
PathExpr.prototype.evaluate=function(ctx){
var _e2=this.filter.evaluate(ctx).nodeSetValue();
var _e3=[];
for(var i=0;i<_e2.length;++i){
var _e5=this.rel.evaluate(ctx.clone(_e2[i],i,_e2)).nodeSetValue();
for(var ii=0;ii<_e5.length;++ii){
_e3.push(_e5[ii]);
}
}
return new NodeSetValue(_e3);
};
function FilterExpr(_e7,_e8){
this.expr=_e7;
this.predicate=_e8;
}
FilterExpr.prototype.evaluate=function(ctx){
var _ea=this.expr.evaluate(ctx).nodeSetValue();
for(var i=0;i<this.predicate.length;++i){
var _ec=_ea;
_ea=[];
for(var j=0;j<_ec.length;++j){
var n=_ec[j];
if(this.predicate[i].evaluate(ctx.clone(n,j,_ec)).booleanValue()){
_ea.push(n);
}
}
}
return new NodeSetValue(_ea);
};
function UnaryMinusExpr(_ef){
this.expr=_ef;
}
UnaryMinusExpr.prototype.evaluate=function(ctx){
return new NumberValue(-this.expr.evaluate(ctx).numberValue());
};
function BinaryExpr(_f1,op,_f3){
this.expr1=_f1;
this.expr2=_f3;
this.op=op;
}
BinaryExpr.prototype.evaluate=function(ctx){
var ret;
switch(this.op.value){
case "or":
ret=new BooleanValue(this.expr1.evaluate(ctx).booleanValue()||this.expr2.evaluate(ctx).booleanValue());
break;
case "and":
ret=new BooleanValue(this.expr1.evaluate(ctx).booleanValue()&&this.expr2.evaluate(ctx).booleanValue());
break;
case "+":
ret=new NumberValue(this.expr1.evaluate(ctx).numberValue()+this.expr2.evaluate(ctx).numberValue());
break;
case "-":
ret=new NumberValue(this.expr1.evaluate(ctx).numberValue()-this.expr2.evaluate(ctx).numberValue());
break;
case "*":
ret=new NumberValue(this.expr1.evaluate(ctx).numberValue()*this.expr2.evaluate(ctx).numberValue());
break;
case "mod":
ret=new NumberValue(this.expr1.evaluate(ctx).numberValue()%this.expr2.evaluate(ctx).numberValue());
break;
case "div":
ret=new NumberValue(this.expr1.evaluate(ctx).numberValue()/this.expr2.evaluate(ctx).numberValue());
break;
case "=":
ret=this.compare(ctx,function(x1,x2){
return x1==x2;
});
break;
case "!=":
ret=this.compare(ctx,function(x1,x2){
return x1!=x2;
});
break;
case "<":
ret=this.compare(ctx,function(x1,x2){
return x1<x2;
});
break;
case "<=":
ret=this.compare(ctx,function(x1,x2){
return x1<=x2;
});
break;
case ">":
ret=this.compare(ctx,function(x1,x2){
return x1>x2;
});
break;
case ">=":
ret=this.compare(ctx,function(x1,x2){
return x1>=x2;
});
break;
default:
alert("BinaryExpr.evaluate: "+this.op.value);
}
return ret;
};
BinaryExpr.prototype.compare=function(ctx,cmp){
var v1=this.expr1.evaluate(ctx);
var v2=this.expr2.evaluate(ctx);
var ret;
if(v1.type=="node-set"&&v2.type=="node-set"){
var n1=v1.nodeSetValue();
var n2=v2.nodeSetValue();
ret=false;
for(var i1=0;i1<n1.length;++i1){
for(var i2=0;i2<n2.length;++i2){
if(cmp(xmlValue(n1[i1]),xmlValue(n2[i2]))){
ret=true;
i2=n2.length;
i1=n1.length;
}
}
}
}else{
if(v1.type=="node-set"||v2.type=="node-set"){
if(v1.type=="number"){
var s=v1.numberValue();
var n=v2.nodeSetValue();
ret=false;
for(var i=0;i<n.length;++i){
var nn=xmlValue(n[i])-0;
if(cmp(s,nn)){
ret=true;
break;
}
}
}else{
if(v2.type=="number"){
var n=v1.nodeSetValue();
var s=v2.numberValue();
ret=false;
for(var i=0;i<n.length;++i){
var nn=xmlValue(n[i])-0;
if(cmp(nn,s)){
ret=true;
break;
}
}
}else{
if(v1.type=="string"){
var s=v1.stringValue();
var n=v2.nodeSetValue();
ret=false;
for(var i=0;i<n.length;++i){
var nn=xmlValue(n[i]);
if(cmp(s,nn)){
ret=true;
break;
}
}
}else{
if(v2.type=="string"){
var n=v1.nodeSetValue();
var s=v2.stringValue();
ret=false;
for(var i=0;i<n.length;++i){
var nn=xmlValue(n[i]);
if(cmp(nn,s)){
ret=true;
break;
}
}
}else{
ret=cmp(v1.booleanValue(),v2.booleanValue());
}
}
}
}
}else{
if(v1.type=="boolean"||v2.type=="boolean"){
ret=cmp(v1.booleanValue(),v2.booleanValue());
}else{
if(v1.type=="number"||v2.type=="number"){
ret=cmp(v1.numberValue(),v2.numberValue());
}else{
ret=cmp(v1.stringValue(),v2.stringValue());
}
}
}
}
return new BooleanValue(ret);
};
function LiteralExpr(_11b){
this.value=_11b;
}
LiteralExpr.prototype.evaluate=function(ctx){
return new StringValue(this.value);
};
function NumberExpr(_11d){
this.value=_11d;
}
NumberExpr.prototype.evaluate=function(ctx){
return new NumberValue(this.value);
};
function VariableExpr(name){
this.name=name;
}
VariableExpr.prototype.evaluate=function(ctx){
return ctx.getVariable(this.name);
};
function makeTokenExpr(m){
return new TokenExpr(m);
}
function passExpr(e){
return e;
}
function makeLocationExpr1(_123,rel){
rel.absolute=true;
return rel;
}
function makeLocationExpr2(_125,rel){
rel.absolute=true;
rel.prependStep(makeAbbrevStep(_125.value));
return rel;
}
function makeLocationExpr3(_127){
var ret=new LocationExpr();
ret.appendStep(makeAbbrevStep("."));
ret.absolute=true;
return ret;
}
function makeLocationExpr4(_129){
var ret=new LocationExpr();
ret.absolute=true;
ret.appendStep(makeAbbrevStep(_129.value));
return ret;
}
function makeLocationExpr5(step){
var ret=new LocationExpr();
ret.appendStep(step);
return ret;
}
function makeLocationExpr6(rel,_12e,step){
rel.appendStep(step);
return rel;
}
function makeLocationExpr7(rel,_131,step){
rel.appendStep(makeAbbrevStep(_131.value));
return rel;
}
function makeStepExpr1(dot){
return makeAbbrevStep(dot.value);
}
function makeStepExpr2(ddot){
return makeAbbrevStep(ddot.value);
}
function makeStepExpr3(_135,axis,_137){
return new StepExpr(_135.value,_137);
}
function makeStepExpr4(at,_139){
return new StepExpr("attribute",_139);
}
function makeStepExpr5(_13a){
return new StepExpr("child",_13a);
}
function makeStepExpr6(step,_13c){
step.appendPredicate(_13c);
return step;
}
function makeAbbrevStep(_13d){
switch(_13d){
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(_13e){
return new NodeTestElement;
}
function makeNodeTestExpr2(_13f,_140,_141){
return new NodeTestNC(_13f.value);
}
function makeNodeTestExpr3(_142){
return new NodeTestName(_142.value);
}
function makeNodeTestExpr4(_143,_144){
var type=_143.value.replace(/\s*\($/,"");
switch(type){
case "node":
return new NodeTestAny;
case "text":
return new NodeTestText;
case "comment":
return new NodeTestComment;
case "processing-instruction":
return new NodeTestPI;
}
}
function makeNodeTestExpr5(_146,_147,_148){
var type=_146.replace(/\s*\($/,"");
if(type!="processing-instruction"){
throw type+" "+Error().stack;
}
return new NodeTestPI(_147.value);
}
function makePredicateExpr(_14a,expr,_14c){
return new PredicateExpr(expr);
}
function makePrimaryExpr(_14d,expr,_14f){
return expr;
}
function makeFunctionCallExpr1(name,_151,_152){
return new FunctionCallExpr(name);
}
function makeFunctionCallExpr2(name,_154,arg1,args,_157){
var ret=new FunctionCallExpr(name);
ret.appendArg(arg1);
for(var i=0;i<args.length;++i){
ret.appendArg(args[i]);
}
return ret;
}
function makeArgumentExpr(_15a,expr){
return expr;
}
function makeUnionExpr(_15c,pipe,_15e){
return new UnionExpr(_15c,_15e);
}
function makePathExpr1(_15f,_160,rel){
return new PathExpr(_15f,rel);
}
function makePathExpr2(_162,_163,rel){
rel.prependStep(makeAbbrevStep(_163.value));
return new PathExpr(_162,rel);
}
function makeFilterExpr(expr,_166){
if(_166.length>0){
return new FilterExpr(expr,_166);
}else{
return expr;
}
}
function makeUnaryMinusExpr(_167,expr){
return new UnaryMinusExpr(expr);
}
function makeBinaryExpr(_169,op,_16b){
return new BinaryExpr(_169,op,_16b);
}
function makeLiteralExpr(_16c){
var _16d=_16c.value.substring(1,_16c.value.length-1);
return new LiteralExpr(_16d);
}
function makeNumberExpr(_16e){
return new NumberExpr(_16e.value);
}
function makeVariableReference(_16f,name){
return new VariableExpr(name.value);
}
function makeSimpleExpr(expr){
if(expr.charAt(0)=="$"){
return new VariableExpr(expr.substr(1));
}else{
if(expr.charAt(0)=="@"){
var a=new NodeTestName(expr.substr(1));
var b=new StepExpr("attribute",a);
var c=new LocationExpr();
c.appendStep(b);
return c;
}else{
if(expr.match(/^[0-9]+$/)){
return new NumberExpr(expr);
}else{
var a=new NodeTestName(expr);
var b=new StepExpr("child",a);
var c=new LocationExpr();
c.appendStep(b);
return c;
}
}
}
}
function makeSimpleExpr2(expr){
var _179=expr.split("/");
var c=new LocationExpr();
for(var i=0;i<_179.length;i++){
var a=new NodeTestName(_179[i]);
var b=new StepExpr("child",a);
c.appendStep(b);
}
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"};
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(a,b){
var la=a[1].length;
var lb=b[1].length;
if(la<lb){
return 1;
}else{
if(la>lb){
return -1;
}else{
return 0;
}
}
});
var k=1;
for(var i=0;i<xpathNonTerminals.length;++i){
xpathNonTerminals[i].key=k++;
}
for(i=0;i<xpathTokenRules.length;++i){
xpathTokenRules[i].key=k++;
}
if(xpathdebug){
Log.write("XPath parse INIT: "+k+" rules");
}
function push_(_184,_185,_186){
if(!_184[_185]){
_184[_185]=[];
}
_184[_185].push(_186);
}
for(i=0;i<xpathGrammarRules.length;++i){
var rule=xpathGrammarRules[i];
var _188=rule[1];
for(var j=_188.length-1;j>=0;--j){
if(_188[j]==Q_1M){
push_(xpathRules,_188[j-1].key,rule);
break;
}else{
if(_188[j]==Q_MM||_188[j]==Q_01){
push_(xpathRules,_188[j-1].key,rule);
--j;
}else{
push_(xpathRules,_188[j].key,rule);
break;
}
}
}
}
if(xpathdebug){
Log.write("XPath parse INIT: "+xpathRules.length+" rule bins");
}
var sum=0;
mapExec(xpathRules,function(i){
if(i){
sum+=i.length;
}
});
if(xpathdebug){
Log.write("XPath parse INIT: "+(sum/xpathRules.length)+" average bin size");
}
}
function xpathCollectDescendants(_18c,node){
for(var n=node.firstChild;n;n=n.nextSibling){
_18c.push(n);
arguments.callee(_18c,n);
}
}
function xpathCollectDescendantsReverse(_18f,node){
for(var n=node.lastChild;n;n=n.previousSibling){
_18f.push(n);
arguments.callee(_18f,n);
}
}
function xpathDomEval(expr,node){
var _194=xpathParse(expr);
var ret=_194.evaluate(new ExprContext(node));
return ret;
}
function xpathSort(_196,sort){
if(sort.length==0){
return;
}
var _198=[];
for(var i=0;i<_196.nodelist.length;++i){
var node=_196.nodelist[i];
var _19b={node:node,key:[]};
var _19c=_196.clone(node,0,[node]);
for(var j=0;j<sort.length;++j){
var s=sort[j];
var _19f=s.expr.evaluate(_19c);
var _1a0;
if(s.type=="text"){
_1a0=_19f.stringValue();
}else{
if(s.type=="number"){
_1a0=_19f.numberValue();
}
}
_19b.key.push({value:_1a0,order:s.order});
}
_19b.key.push({value:i,order:"ascending"});
_198.push(_19b);
}
_198.sort(xpathSortByKey);
var _1a1=[];
for(var i=0;i<_198.length;++i){
_1a1.push(_198[i].node);
}
_196.nodelist=_1a1;
_196.setNode(_1a1[0],0);
}
function xpathSortByKey(v1,v2){
for(var i=0;i<v1.key.length;++i){
var o=v1.key[i].order=="descending"?-1:1;
if(v1.key[i].value>v2.key[i].value){
return +1*o;
}else{
if(v1.key[i].value<v2.key[i].value){
return -1*o;
}
}
}
return 0;
}
function el(i){
return document.getElementById(i);
}
function px(x){
return x+"px";
}
function stringSplit(s,c){
var a=s.indexOf(c);
if(a==-1){
return [s];
}
var _1ac=[];
_1ac.push(s.substr(0,a));
while(a!=-1){
var a1=s.indexOf(c,a+1);
if(a1!=-1){
_1ac.push(s.substr(a+1,a1-a-1));
}else{
_1ac.push(s.substr(a+1));
}
a=a1;
}
return _1ac;
}
function xmlValue(node){
if(!node){
return "";
}
var ret="";
if(node.nodeType==DOM_TEXT_NODE||node.nodeType==DOM_CDATA_SECTION_NODE||node.nodeType==DOM_ATTRIBUTE_NODE){
ret+=node.nodeValue;
}else{
if(node.nodeType==DOM_ELEMENT_NODE||node.nodeType==DOM_DOCUMENT_NODE||node.nodeType==DOM_DOCUMENT_FRAGMENT_NODE){
for(var i=0;i<node.childNodes.length;++i){
ret+=arguments.callee(node.childNodes[i]);
}
}
}
return ret;
}
function xmlText(node){
var ret="";
if(node.nodeType==DOM_TEXT_NODE){
ret+=xmlEscapeText(node.nodeValue);
}else{
if(node.nodeType==DOM_ELEMENT_NODE){
ret+="<"+node.nodeName;
for(var i=0;i<node.attributes.length;++i){
var a=node.attributes[i];
if(a&&a.nodeName&&a.nodeValue){
ret+=" "+a.nodeName;
ret+="=\""+xmlEscapeAttr(a.nodeValue)+"\"";
}
}
if(node.childNodes.length==0){
ret+="/>";
}else{
ret+=">";
for(var i=0;i<node.childNodes.length;++i){
ret+=arguments.callee(node.childNodes[i]);
}
ret+="</"+node.nodeName+">";
}
}else{
if(node.nodeType==DOM_DOCUMENT_NODE||node.nodeType==DOM_DOCUMENT_FRAGMENT_NODE){
for(var i=0;i<node.childNodes.length;++i){
ret+=arguments.callee(node.childNodes[i]);
}
}
}
}
return ret;
}
function mapExec(_1b7,func){
for(var i=0;i<_1b7.length;++i){
func(_1b7[i]);
}
}
function mapExpr(_1ba,func){
var ret=[];
for(var i=0;i<_1ba.length;++i){
ret.push(func(_1ba[i]));
}
return ret;
}
function reverseInplace(_1be){
for(var i=0;i<_1be.length/2;++i){
var h=_1be[i];
var ii=_1be.length-i-1;
_1be[i]=_1be[ii];
_1be[ii]=h;
}
}
function copyArray(dst,src){
for(var i=0;i<src.length;++i){
dst.push(src[i]);
}
}
function assert(b){
if(!b){
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(s){
return s.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");
}
function xmlEscapeAttr(s){
return xmlEscapeText(s).replace(/\"/g,"&quot;");
}
function xmlEscapeTags(s){
return s.replace(/</g,"&lt;").replace(/>/g,"&gt;");
}
var logging__=true;
function Log(){
}
Log.lines=[];
Log.write=function(s){
if(logging__){
this.lines.push(xmlEscapeText(s));
this.show();
}
};
Log.writeXML=function(xml){
if(logging__){
var s0=xml.replace(/</g,"\n<");
var s1=xmlEscapeText(s0);
var s2=s1.replace(/\s*\n(\s|\n)*/g,"<br/>");
this.lines.push(s2);
this.show();
}
};
Log.writeRaw=function(s){
if(logging__){
this.lines.push(s);
this.show();
}
};
Log.clear=function(){
if(logging__){
var l=this.div();
l.innerHTML="";
this.lines=[];
}
};
Log.show=function(){
var l=this.div();
l.innerHTML+=this.lines.join("<br/>")+"<br/>";
this.lines=[];
l.scrollTop=l.scrollHeight;
};
Log.div=function(){
var l=document.getElementById("log");
if(!l){
l=document.createElement("div");
l.id="log";
l.style.position="absolute";
l.style.right="5px";
l.style.top="5px";
l.style.width="250px";
l.style.height="150px";
l.style.overflow="auto";
l.style.backgroundColor="#f0f0f0";
l.style.border="1px solid gray";
l.style.fontSize="10px";
l.style.padding="5px";
document.body.appendChild(l);
}
return l;
};
function Timer(){
}
Timer.start=function(){
};
Timer.end=function(){
};

