//Basic Ajax Routine- Author: Dynamic Drive (http://www.dynamicdrive.com)
//Last updated: Jan 15th, 06'
//http://www.dynamicdrive.com/dynamicindex17/ajaxroutine.htm
function ajax()
{
    //var basedomain="http://"+window.location.hostname
    //var soapPost = "";
    var host = window.location.hostname;
    var ajaxobj=createAjaxObj()
    var filetype="txt"
    var addrandomnumber=1 //Set to 1 or 0. See documentation.
    var result;
    var url;
    this.getRequest = getMyAjaxRequest;
    this.postRequest = postMyAjaxRequest;
    this.soapRequest = soapMyAjaxRequest;
    this.getResponse = getMyResponse;
    this.callbackfunction;
    
    function getMyAjaxRequest(url, parameters, callbackfun,filetype)
    {
        this.url = url;
        ajaxobj=createAjaxObj() //recreate ajax object to defeat cache problem in IE
        if (addrandomnumber==1) //Further defeat caching problem in IE?
            var parameters=parameters+"&ajaxcachebust="+new Date().getTime()
        if (ajaxobj)
        {            
            callbackfunction = callbackfun;
            ajaxobj.onreadystatechange=this.getResponse;
            ajaxobj.open('GET', url+"?"+parameters, true);
            ajaxobj.send(null);
        }
    }
    function postMyAjaxRequest(url, parameters, callbackfun, filetype)
    {
        ajaxobj=createAjaxObj() //recreate ajax object to defeat cache problem in IE
        if (ajaxobj)
        {
           ajaxobj.onreadystatechange = this.getResponse;
           callbackfunction = callbackfun;
            ajaxobj.open('POST', url, true);
            ajaxobj.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            ajaxobj.setRequestHeader("Content-length", parameters.length);
            ajaxobj.setRequestHeader("Connection", "close");
            ajaxobj.send(parameters);
        }
    }
    
    function soapMyAjaxRequest(url, parameters, callbackfun)
    {
        ajaxobj=createAjaxObj() //recreate ajax object to defeat cache problem in IE
        if (ajaxobj)
        {
            ajaxobj.onreadystatechange = getSoapResponse;
            callbackfunction = callbackfun;
            ajaxobj.open('POST', url, true);
            ajaxobj.setRequestHeader("Man", "POST " + url + " HTTP/1.1");
            ajaxobj.setRequestHeader("Host", host);
            ajaxobj.setRequestHeader("Content-Type", "application/soap+xml; charset=utf-8");
            ajaxobj.setRequestHeader("Content-length", parameters.length); 
            ajaxobj.send(parameters);
        }
    }
    
    function getSoapResponse()
    {
	    var myajax = ajaxobj;
	    var myfiletype = filetype;
	    if (myajax.readyState == 4) 
	    {
	        callbackfunction(myajax.responseText);
	    }

    }
    function getMyResponse()
    {
	    var myajax = ajaxobj;
	    var myfiletype = filetype;
	    if (myajax.readyState == 4) 
		    if (myajax.status==200 || window.location.href.indexOf("http")==-1)
		    {    
			    result = myajax.responseText;
			    callbackfunction(result)
			 }

    }
}

function createAjaxObj()
{
    var xmlhttp=false;
    /*@cc_on @*/
    /*@if (@_jscript_version >= 5)
    // JScript gives us Conditional compilation, we can cope with old IE versions.
    // and security blocked creation of the objects.
     try {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
     } catch (e) {
      try {
       xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (E) {
       xmlhttp = false;
      }
     }
    @end @*/
    if (!xmlhttp && typeof XMLHttpRequest!='undefined') 
    {
        try 
        {
            xmlhttp = new XMLHttpRequest();
        } 
        catch (e) 
        {
            xmlhttp=false;
        }
    }
    if (!xmlhttp && window.createRequest) 
    {
        try 
        {
        xmlhttp = window.createRequest();
        } 
        catch (e) 
        {
            xmlhttp=false;
        }
    }
    return xmlhttp
}


function xsltProcess(xmlDoc,stylesheet){var output=domCreateDocumentFragment(new XDocument);xsltProcessContext(new ExprContext(xmlDoc),stylesheet,output);var ret=xmlText(output);return ret;}
function xsltProcessContext(input,template,output){var outputDocument=xmlOwnerDocument(output);var nodename=template.nodeName.split(/:/);if(nodename.length==1||nodename[0]!='xsl'){xsltPassThrough(input,template,output,outputDocument);}else{switch(nodename[1]){case'apply-imports':alert('not implemented: '+nodename[1]);break;case'apply-templates':var select=xmlGetAttribute(template,'select');var nodes;if(select){nodes=xpathEval(select,input).nodeSetValue();}else{nodes=input.node.childNodes;}
var sortContext=input.clone(nodes[0],0,nodes);xsltWithParam(sortContext,template);xsltSort(sortContext,template);var mode=xmlGetAttribute(template,'mode');var top=template.ownerDocument.documentElement;var templates=[];for(var i=0;i<top.childNodes.length;++i){var c=top.childNodes[i];if(c.nodeType==DOM_ELEMENT_NODE&&c.nodeName=='xsl:template'&&c.getAttribute('mode')==mode){templates.push(c);}}
for(var j=0;j<sortContext.contextSize();++j){var nj=sortContext.nodelist[j];for(var i=0;i<templates.length;++i){xsltProcessContext(sortContext.clone(nj,j),templates[i],output);}}
break;case'attribute':var nameexpr=xmlGetAttribute(template,'name');var name=xsltAttributeValue(nameexpr,input);var node=domCreateDocumentFragment(outputDocument);xsltChildNodes(input,template,node);var value=xmlValue(node);domSetAttribute(output,name,value);break;case'attribute-set':alert('not implemented: '+nodename[1]);break;case'call-template':var name=xmlGetAttribute(template,'name');var top=template.ownerDocument.documentElement;var paramContext=input.clone();xsltWithParam(paramContext,template);for(var i=0;i<top.childNodes.length;++i){var c=top.childNodes[i];if(c.nodeType==DOM_ELEMENT_NODE&&c.nodeName=='xsl:template'&&domGetAttribute(c,'name')==name){xsltChildNodes(paramContext,c,output);break;}}
break;case'choose':xsltChoose(input,template,output);break;case'comment':var node=domCreateDocumentFragment(outputDocument);xsltChildNodes(input,template,node);var commentData=xmlValue(node);var commentNode=domCreateComment(outputDocument,commentData);output.appendChild(commentNode);break;case'copy':var node=xsltCopy(output,input.node,outputDocument);if(node){xsltChildNodes(input,template,node);}
break;case'copy-of':var select=xmlGetAttribute(template,'select');var value=xpathEval(select,input);if(value.type=='node-set'){var nodes=value.nodeSetValue();for(var i=0;i<nodes.length;++i){xsltCopyOf(output,nodes[i],outputDocument);}}else{var node=domCreateTextNode(outputDocument,value.stringValue());domAppendChild(output,node);}
break;case'decimal-format':alert('not implemented: '+nodename[1]);break;case'element':var nameexpr=xmlGetAttribute(template,'name');var name=xsltAttributeValue(nameexpr,input);var node=domCreateElement(outputDocument,name);domAppendChild(output,node);xsltChildNodes(input,template,node);break;case'fallback':alert('not implemented: '+nodename[1]);break;case'for-each':xsltForEach(input,template,output);break;case'if':var test=xmlGetAttribute(template,'test');if(xpathEval(test,input).booleanValue()){xsltChildNodes(input,template,output);}
break;case'import':alert('not implemented: '+nodename[1]);break;case'include':alert('not implemented: '+nodename[1]);break;case'key':alert('not implemented: '+nodename[1]);break;case'message':alert('not implemented: '+nodename[1]);break;case'namespace-alias':alert('not implemented: '+nodename[1]);break;case'number':alert('not implemented: '+nodename[1]);break;case'otherwise':alert('error if here: '+nodename[1]);break;case'output':break;case'preserve-space':alert('not implemented: '+nodename[1]);break;case'processing-instruction':alert('not implemented: '+nodename[1]);break;case'sort':break;case'strip-space':alert('not implemented: '+nodename[1]);break;case'stylesheet':case'transform':xsltChildNodes(input,template,output);break;case'template':var match=xmlGetAttribute(template,'match');if(match&&xsltMatch(match,input)){xsltChildNodes(input,template,output);}
break;case'text':var text=xmlValue(template);var node=domCreateTextNode(outputDocument,text);output.appendChild(node);break;case'value-of':var select=xmlGetAttribute(template,'select');var value=xpathEval(select,input).stringValue();var node=domCreateTextNode(outputDocument,value);output.appendChild(node);break;case'param':xsltVariable(input,template,false);break;case'variable':xsltVariable(input,template,true);break;case'when':alert('error if here: '+nodename[1]);break;case'with-param':alert('error if here: '+nodename[1]);break;default:alert('error if here: '+nodename[1]);break;}}}
function xsltWithParam(input,template){for(var i=0;i<template.childNodes.length;++i){var c=template.childNodes[i];if(c.nodeType==DOM_ELEMENT_NODE&&c.nodeName=='xsl:with-param'){xsltVariable(input,c,true);}}}
function xsltSort(input,template){var sort=[];for(var i=0;i<template.childNodes.length;++i){var c=template.childNodes[i];if(c.nodeType==DOM_ELEMENT_NODE&&c.nodeName=='xsl:sort'){var select=xmlGetAttribute(c,'select');var expr=xpathParse(select);var type=xmlGetAttribute(c,'data-type')||'text';var order=xmlGetAttribute(c,'order')||'ascending';sort.push({expr:expr,type:type,order:order});}}
xpathSort(input,sort);}
function xsltVariable(input,template,override){var name=xmlGetAttribute(template,'name');var select=xmlGetAttribute(template,'select');var value;if(template.childNodes.length>0){var root=domCreateDocumentFragment(template.ownerDocument);xsltChildNodes(input,template,root);value=new NodeSetValue([root]);}else if(select){value=xpathEval(select,input);}else{value=new StringValue('');}
if(override||!input.getVariable(name)){input.setVariable(name,value);}}
function xsltChoose(input,template,output){for(var i=0;i<template.childNodes.length;++i){var childNode=template.childNodes[i];if(childNode.nodeType!=DOM_ELEMENT_NODE){continue;}else if(childNode.nodeName=='xsl:when'){var test=xmlGetAttribute(childNode,'test');if(xpathEval(test,input).booleanValue()){xsltChildNodes(input,childNode,output);break;}}else if(childNode.nodeName=='xsl:otherwise'){xsltChildNodes(input,childNode,output);break;}}}
function xsltForEach(input,template,output){var select=xmlGetAttribute(template,'select');var nodes=xpathEval(select,input).nodeSetValue();var sortContext=input.clone(nodes[0],0,nodes);xsltSort(sortContext,template);for(var i=0;i<sortContext.contextSize();++i){var ni=sortContext.nodelist[i];xsltChildNodes(sortContext.clone(ni,i),template,output);}}
function xsltChildNodes(input,template,output){var context=input.clone();for(var i=0;i<template.childNodes.length;++i){xsltProcessContext(context,template.childNodes[i],output);}}
function xsltPassThrough(input,template,output,outputDocument){if(template.nodeType==DOM_TEXT_NODE){if(xsltPassText(template)){var node=domCreateTextNode(outputDocument,template.nodeValue);domAppendChild(output,node);}}else if(template.nodeType==DOM_ELEMENT_NODE){var node=domCreateElement(outputDocument,template.nodeName);for(var i=0;i<template.attributes.length;++i){var a=template.attributes[i];if(a){var name=a.nodeName;var value=xsltAttributeValue(a.nodeValue,input);domSetAttribute(node,name,value);}}
domAppendChild(output,node);xsltChildNodes(input,template,node);}else{xsltChildNodes(input,template,output);}}
function xsltPassText(template){if(!template.nodeValue.match(/^\s*$/)){return true;}
var element=template.parentNode;if(element.nodeName=='xsl:text'){return true;}
while(element&&element.nodeType==DOM_ELEMENT_NODE){var xmlspace=domGetAttribute(element,'xml:space');if(xmlspace){if(xmlspace=='default'){return false;}else if(xmlspace=='preserve'){return true;}}
element=element.parentNode;}
return false;}
function xsltAttributeValue(value,context){var parts=stringSplit(value,'{');if(parts.length==1){return value;}
var ret='';for(var i=0;i<parts.length;++i){var rp=stringSplit(parts[i],'}');if(rp.length!=2){ret+=parts[i];continue;}
var val=xpathEval(rp[0],context).stringValue();ret+=val+rp[1];}
return ret;}
function xmlGetAttribute(node,name){var value=domGetAttribute(node,name);if(value){return xmlResolveEntities(value);}else{return value;}};function xsltCopyOf(dst,src,dstDocument){if(src.nodeType==DOM_DOCUMENT_FRAGMENT_NODE||src.nodeType==DOM_DOCUMENT_NODE){for(var i=0;i<src.childNodes.length;++i){arguments.callee(dst,src.childNodes[i],dstDocument);}}else{var node=xsltCopy(dst,src,dstDocument);if(node){for(var i=0;i<src.attributes.length;++i){arguments.callee(node,src.attributes[i],dstDocument);}
for(var i=0;i<src.childNodes.length;++i){arguments.callee(node,src.childNodes[i],dstDocument);}}}}
function xsltCopy(dst,src,dstDocument){if(src.nodeType==DOM_ELEMENT_NODE){var node=domCreateElement(dstDocument,src.nodeName);domAppendChild(dst,node);return node;}
if(src.nodeType==DOM_TEXT_NODE){var node=domCreateTextNode(dstDocument,src.nodeValue);domAppendChild(dst,node);}else if(src.nodeType==DOM_CDATA_SECTION_NODE){var node=domCreateCDATASection(dstDocument,src.nodeValue);domAppendChild(dst,node);}else if(src.nodeType==DOM_COMMENT_NODE){var node=domCreateComment(dstDocument,src.nodeValue);domAppendChild(dst,node);}else if(src.nodeType==DOM_ATTRIBUTE_NODE){domSetAttribute(dst,src.nodeName,src.nodeValue);}
return null;}
function xsltMatch(match,context){var expr=xpathParse(match);var ret;if(expr.steps&&!expr.absolute&&expr.steps.length==1&&expr.steps[0].axis=='child'&&expr.steps[0].predicate.length==0){ret=expr.steps[0].nodetest.evaluate(context).booleanValue();}else{ret=false;var node=context.node;while(!ret&&node){var result=expr.evaluate(context.clone(node,0,[node])).nodeSetValue();for(var i=0;i<result.length;++i){if(result[i]==context.node){ret=true;break;}}
node=node.parentNode;}}
return ret;}
function xpathParse(expr){xpathLog('parse '+expr);xpathParseInit();var cached=xpathCacheLookup(expr);if(cached){xpathLog(' ... cached');return cached;}
if(expr.match(/^(\$|@)?\w+$/i)){var ret=makeSimpleExpr(expr);xpathParseCache[expr]=ret;xpathLog(' ... simple');return ret;}
if(expr.match(/^\w+(\/\w+)*$/i)){var ret=makeSimpleExpr2(expr);xpathParseCache[expr]=ret;xpathLog(' ... simple 2');return ret;}
var cachekey=expr;var stack=[];var ahead=null;var previous=null;var done=false;var parse_count=0;var lexer_count=0;var reduce_count=0;while(!done){parse_count++;expr=expr.replace(/^\s*/,'');previous=ahead;ahead=null;var rule=null;var match='';for(var i=0;i<xpathTokenRules.length;++i){var result=xpathTokenRules[i].re.exec(expr);lexer_count++;if(result&&result.length>0&&result[0].length>match.length){rule=xpathTokenRules[i];match=result[0];break;}}
if(rule&&(rule==TOK_DIV||rule==TOK_MOD||rule==TOK_AND||rule==TOK_OR)&&(!previous||previous.tag==TOK_AT||previous.tag==TOK_DSLASH||previous.tag==TOK_SLASH||previous.tag==TOK_AXIS||previous.tag==TOK_DOLLAR)){rule=TOK_QNAME;}
if(rule){expr=expr.substr(match.length);xpathLog('token: '+match+' -- '+rule.label);ahead={tag:rule,match:match,prec:rule.prec?rule.prec:0,expr:makeTokenExpr(match)};}else{xpathLog('DONE');done=true;}
while(xpathReduce(stack,ahead)){reduce_count++;xpathLog('stack: '+stackToString(stack));}}
xpathLog('stack: '+stackToString(stack));if(stack.length!=1){throw'XPath parse error '+cachekey+':\n'+stackToString(stack);}
var result=stack[0].expr;xpathParseCache[cachekey]=result;xpathLog('XPath parse: '+parse_count+' / '+
lexer_count+' / '+reduce_count);return result;}
var xpathParseCache={};function xpathCacheLookup(expr){return xpathParseCache[expr];}
function xpathReduce(stack,ahead){var cand=null;if(stack.length>0){var top=stack[stack.length-1];var ruleset=xpathRules[top.tag.key];if(ruleset){for(var i=0;i<ruleset.length;++i){var rule=ruleset[i];var match=xpathMatchStack(stack,rule[1]);if(match.length){cand={tag:rule[0],rule:rule,match:match};cand.prec=xpathGrammarPrecedence(cand);break;}}}}
var ret;if(cand&&(!ahead||cand.prec>ahead.prec||(ahead.tag.left&&cand.prec>=ahead.prec))){for(var i=0;i<cand.match.matchlength;++i){stack.pop();}
xpathLog('reduce '+cand.tag.label+' '+cand.prec+' ahead '+(ahead?ahead.tag.label+' '+ahead.prec+
(ahead.tag.left?' left':''):' none '));var matchexpr=mapExpr(cand.match,function(m){return m.expr;});cand.expr=cand.rule[3].apply(null,matchexpr);stack.push(cand);ret=true;}else{if(ahead){xpathLog('shift '+ahead.tag.label+' '+ahead.prec+
(ahead.tag.left?' left':'')+' over '+(cand?cand.tag.label+' '+
cand.prec:' none'));stack.push(ahead);}
ret=false;}
return ret;}
function xpathMatchStack(stack,pattern){var S=stack.length;var P=pattern.length;var p,s;var match=[];match.matchlength=0;var ds=0;for(p=P-1,s=S-1;p>=0&&s>=0;--p,s-=ds){ds=0;var qmatch=[];if(pattern[p]==Q_MM){p-=1;match.push(qmatch);while(s-ds>=0&&stack[s-ds].tag==pattern[p]){qmatch.push(stack[s-ds]);ds+=1;match.matchlength+=1;}}else if(pattern[p]==Q_01){p-=1;match.push(qmatch);while(s-ds>=0&&ds<2&&stack[s-ds].tag==pattern[p]){qmatch.push(stack[s-ds]);ds+=1;match.matchlength+=1;}}else if(pattern[p]==Q_1M){p-=1;match.push(qmatch);if(stack[s].tag==pattern[p]){while(s-ds>=0&&stack[s-ds].tag==pattern[p]){qmatch.push(stack[s-ds]);ds+=1;match.matchlength+=1;}}else{return[];}}else if(stack[s].tag==pattern[p]){match.push(stack[s]);ds+=1;match.matchlength+=1;}else{return[];}
reverseInplace(qmatch);qmatch.expr=mapExpr(qmatch,function(m){return m.expr;});}
reverseInplace(match);if(p==-1){return match;}else{return[];}}
function xpathTokenPrecedence(tag){return tag.prec||2;}
function xpathGrammarPrecedence(frame){var ret=0;if(frame.rule){if(frame.rule.length>=3&&frame.rule[2]>=0){ret=frame.rule[2];}else{for(var i=0;i<frame.rule[1].length;++i){var p=xpathTokenPrecedence(frame.rule[1][i]);ret=Math.max(ret,p);}}}else if(frame.tag){ret=xpathTokenPrecedence(frame.tag);}else if(frame.length){for(var j=0;j<frame.length;++j){var p=xpathGrammarPrecedence(frame[j]);ret=Math.max(ret,p);}}
return ret;}
function stackToString(stack){var ret='';for(var i=0;i<stack.length;++i){if(ret){ret+='\n';}
ret+=stack[i].tag.label;}
return ret;}
function ExprContext(node,opt_position,opt_nodelist,opt_parent){this.node=node;this.position=opt_position||0;this.nodelist=opt_nodelist||[node];this.variables={};this.parent=opt_parent||null;if(opt_parent){this.root=opt_parent.root;}else if(this.node.nodeType==DOM_DOCUMENT_NODE){this.root=node;}else{this.root=node.ownerDocument;}}
ExprContext.prototype.clone=function(opt_node,opt_position,opt_nodelist){return new ExprContext(opt_node||this.node,typeof opt_position!='undefined'?opt_position:this.position,opt_nodelist||this.nodelist,this);};ExprContext.prototype.setVariable=function(name,value){this.variables[name]=value;};ExprContext.prototype.getVariable=function(name){if(typeof this.variables[name]!='undefined'){return this.variables[name];}else if(this.parent){return this.parent.getVariable(name);}else{return null;}};ExprContext.prototype.setNode=function(position){this.node=this.nodelist[position];this.position=position;};ExprContext.prototype.contextSize=function(){return this.nodelist.length;};function StringValue(value){this.value=value;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(value){this.value=value;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(value){this.value=value;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(value){this.value=value;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 steps0=this.steps;this.steps=[s];for(var i=0;i<steps0.length;++i){this.steps.push(steps0[i]);}};LocationExpr.prototype.evaluate=function(ctx){var start;if(this.absolute){start=ctx.root;}else{start=ctx.node;}
var nodes=[];xPathStep(nodes,this.steps,0,start,ctx);return new NodeSetValue(nodes);};function xPathStep(nodes,steps,step,input,ctx){var s=steps[step];var ctx2=ctx.clone(input);var nodelist=s.evaluate(ctx2).nodeSetValue();for(var i=0;i<nodelist.length;++i){if(step==steps.length-1){nodes.push(nodelist[i]);}else{xPathStep(nodes,steps,step+1,nodelist[i],ctx);}}}
function StepExpr(axis,nodetest,opt_predicate){this.axis=axis;this.nodetest=nodetest;this.predicate=opt_predicate||[];}
StepExpr.prototype.appendPredicate=function(p){this.predicate.push(p);}
StepExpr.prototype.evaluate=function(ctx){var input=ctx.node;var nodelist=[];if(this.axis==xpathAxis.ANCESTOR_OR_SELF){nodelist.push(input);for(var n=input.parentNode;n;n=n.parentNode){nodelist.push(n);}}else if(this.axis==xpathAxis.ANCESTOR){for(var n=input.parentNode;n;n=n.parentNode){nodelist.push(n);}}else if(this.axis==xpathAxis.ATTRIBUTE){copyArray(nodelist,input.attributes);}else if(this.axis==xpathAxis.CHILD){copyArray(nodelist,input.childNodes);}else if(this.axis==xpathAxis.DESCENDANT_OR_SELF){nodelist.push(input);xpathCollectDescendants(nodelist,input);}else if(this.axis==xpathAxis.DESCENDANT){xpathCollectDescendants(nodelist,input);}else if(this.axis==xpathAxis.FOLLOWING){for(var n=input;n;n=n.parentNode){for(var nn=n.nextSibling;nn;nn=nn.nextSibling){nodelist.push(nn);xpathCollectDescendants(nodelist,nn);}}}else if(this.axis==xpathAxis.FOLLOWING_SIBLING){for(var n=input.nextSibling;n;n=n.nextSibling){nodelist.push(n);}}else if(this.axis==xpathAxis.NAMESPACE){alert('not implemented: axis namespace');}else if(this.axis==xpathAxis.PARENT){if(input.parentNode){nodelist.push(input.parentNode);}}else if(this.axis==xpathAxis.PRECEDING){for(var n=input;n;n=n.parentNode){for(var nn=n.previousSibling;nn;nn=nn.previousSibling){nodelist.push(nn);xpathCollectDescendantsReverse(nodelist,nn);}}}else if(this.axis==xpathAxis.PRECEDING_SIBLING){for(var n=input.previousSibling;n;n=n.previousSibling){nodelist.push(n);}}else if(this.axis==xpathAxis.SELF){nodelist.push(input);}else{throw'ERROR -- NO SUCH AXIS: '+this.axis;}
var nodelist0=nodelist;nodelist=[];for(var i=0;i<nodelist0.length;++i){var n=nodelist0[i];if(this.nodetest.evaluate(ctx.clone(n,i,nodelist0)).booleanValue()){nodelist.push(n);}}
for(var i=0;i<this.predicate.length;++i){var nodelist0=nodelist;nodelist=[];for(var ii=0;ii<nodelist0.length;++ii){var n=nodelist0[ii];if(this.predicate[i].evaluate(ctx.clone(n,ii,nodelist0)).booleanValue()){nodelist.push(n);}}}
return new NodeSetValue(nodelist);};function NodeTestAny(){this.value=new BooleanValue(true);}
NodeTestAny.prototype.evaluate=function(ctx){return this.value;};function NodeTestElementOrAttribute(){}
NodeTestElementOrAttribute.prototype.evaluate=function(ctx){return new BooleanValue(ctx.node.nodeType==DOM_ELEMENT_NODE||ctx.node.nodeType==DOM_ATTRIBUTE_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(target){this.target=target;}
NodeTestPI.prototype.evaluate=function(ctx){return new
BooleanValue(ctx.node.nodeType==DOM_PROCESSING_INSTRUCTION_NODE&&(!this.target||ctx.node.nodeName==this.target));}
function NodeTestNC(nsprefix){this.regex=new RegExp("^"+nsprefix+":");this.nsprefix=nsprefix;}
NodeTestNC.prototype.evaluate=function(ctx){var n=ctx.node;return new BooleanValue(this.regex.match(n.nodeName));}
function NodeTestName(name){this.name=name;}
NodeTestName.prototype.evaluate=function(ctx){var n=ctx.node;return new BooleanValue(n.nodeName==this.name);}
function PredicateExpr(expr){this.expr=expr;}
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(name){this.name=name;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{xpathLog('XPath NO SUCH FUNCTION '+fn);return new BooleanValue(false);}};FunctionCallExpr.prototype.xpathfunctions={'last':function(ctx){assert(this.args.length==0);return new NumberValue(ctx.contextSize());},'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[0].evaluate(ctx);var ret=[];var ids;if(e.type=='node-set'){ids=[];var en=e.nodeSetValue();for(var i=0;i<en.length;++i){var v=xmlValue(en[i]).split(/\s+/);for(var ii=0;ii<v.length;++ii){ids.push(v[ii]);}}}else{ids=e.stringValue().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 lang=this.args[0].evaluate(ctx).stringValue();var xmllang;var n=ctx.node;while(n&&n!=n.parentNode){xmllang=n.getAttribute('xml:lang');if(xmllang){break;}
n=n.parentNode;}
if(!xmllang){return new BooleanValue(false);}else{var re=new RegExp('^'+lang+'$','i');return new BooleanValue(xmllang.match(re)||xmllang.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 nodes=this.args[0].evaluate(ctx).nodeSetValue();var delim=this.args[1].evaluate(ctx).stringValue();var ret='';for(var i=0;i<nodes.length;++i){if(ret){ret+=delim;}
ret+=xmlValue(nodes[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-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(expr1,expr2){this.expr1=expr1;this.expr2=expr2;}
UnionExpr.prototype.evaluate=function(ctx){var nodes1=this.expr1.evaluate(ctx).nodeSetValue();var nodes2=this.expr2.evaluate(ctx).nodeSetValue();var I1=nodes1.length;for(var i2=0;i2<nodes2.length;++i2){var n=nodes2[i2];var inBoth=false;for(var i1=0;i1<I1;++i1){if(nodes1[i1]==n){inBoth=true;i1=I1;}}
if(!inBoth){nodes1.push(n);}}
return new NodeSetValue(nodes1);};function PathExpr(filter,rel){this.filter=filter;this.rel=rel;}
PathExpr.prototype.evaluate=function(ctx){var nodes=this.filter.evaluate(ctx).nodeSetValue();var nodes1=[];for(var i=0;i<nodes.length;++i){var nodes0=this.rel.evaluate(ctx.clone(nodes[i],i,nodes)).nodeSetValue();for(var ii=0;ii<nodes0.length;++ii){nodes1.push(nodes0[ii]);}}
return new NodeSetValue(nodes1);};function FilterExpr(expr,predicate){this.expr=expr;this.predicate=predicate;}
FilterExpr.prototype.evaluate=function(ctx){var nodes=this.expr.evaluate(ctx).nodeSetValue();for(var i=0;i<this.predicate.length;++i){var nodes0=nodes;nodes=[];for(var j=0;j<nodes0.length;++j){var n=nodes0[j];if(this.predicate[i].evaluate(ctx.clone(n,j,nodes0)).booleanValue()){nodes.push(n);}}}
return new NodeSetValue(nodes);}
function UnaryMinusExpr(expr){this.expr=expr;}
UnaryMinusExpr.prototype.evaluate=function(ctx){return new NumberValue(-this.expr.evaluate(ctx).numberValue());};function BinaryExpr(expr1,op,expr2){this.expr1=expr1;this.expr2=expr2;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(value){this.value=value;}
LiteralExpr.prototype.evaluate=function(ctx){return new StringValue(this.value);};function NumberExpr(value){this.value=value;}
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(slash,rel){rel.absolute=true;return rel;}
function makeLocationExpr2(dslash,rel){rel.absolute=true;rel.prependStep(makeAbbrevStep(dslash.value));return rel;}
function makeLocationExpr3(slash){var ret=new LocationExpr();ret.appendStep(makeAbbrevStep('.'));ret.absolute=true;return ret;}
function makeLocationExpr4(dslash){var ret=new LocationExpr();ret.absolute=true;ret.appendStep(makeAbbrevStep(dslash.value));return ret;}
function makeLocationExpr5(step){var ret=new LocationExpr();ret.appendStep(step);return ret;}
function makeLocationExpr6(rel,slash,step){rel.appendStep(step);return rel;}
function makeLocationExpr7(rel,dslash,step){rel.appendStep(makeAbbrevStep(dslash.value));return rel;}
function makeStepExpr1(dot){return makeAbbrevStep(dot.value);}
function makeStepExpr2(ddot){return makeAbbrevStep(ddot.value);}
function makeStepExpr3(axisname,axis,nodetest){return new StepExpr(axisname.value,nodetest);}
function makeStepExpr4(at,nodetest){return new StepExpr('attribute',nodetest);}
function makeStepExpr5(nodetest){return new StepExpr('child',nodetest);}
function makeStepExpr6(step,predicate){step.appendPredicate(predicate);return step;}
function makeAbbrevStep(abbrev){switch(abbrev){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(asterisk){return new NodeTestElementOrAttribute;}
function makeNodeTestExpr2(ncname,colon,asterisk){return new NodeTestNC(ncname.value);}
function makeNodeTestExpr3(qname){return new NodeTestName(qname.value);}
function makeNodeTestExpr4(typeo,parenc){var type=typeo.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(typeo,target,parenc){var type=typeo.replace(/\s*\($/,'');if(type!='processing-instruction'){throw type;}
return new NodeTestPI(target.value);}
function makePredicateExpr(pareno,expr,parenc){return new PredicateExpr(expr);}
function makePrimaryExpr(pareno,expr,parenc){return expr;}
function makeFunctionCallExpr1(name,pareno,parenc){return new FunctionCallExpr(name);}
function makeFunctionCallExpr2(name,pareno,arg1,args,parenc){var ret=new FunctionCallExpr(name);ret.appendArg(arg1);for(var i=0;i<args.length;++i){ret.appendArg(args[i]);}
return ret;}
function makeArgumentExpr(comma,expr){return expr;}
function makeUnionExpr(expr1,pipe,expr2){return new UnionExpr(expr1,expr2);}
function makePathExpr1(filter,slash,rel){return new PathExpr(filter,rel);}
function makePathExpr2(filter,dslash,rel){rel.prependStep(makeAbbrevStep(dslash.value));return new PathExpr(filter,rel);}
function makeFilterExpr(expr,predicates){if(predicates.length>0){return new FilterExpr(expr,predicates);}else{return expr;}}
function makeUnaryMinusExpr(minus,expr){return new UnaryMinusExpr(expr);}
function makeBinaryExpr(expr1,op,expr2){return new BinaryExpr(expr1,op,expr2);}
function makeLiteralExpr(token){var value=token.value.substring(1,token.value.length-1);return new LiteralExpr(value);}
function makeNumberExpr(token){return new NumberExpr(token.value);}
function makeVariableReference(dollar,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 steps=stringSplit(expr,'/');var c=new LocationExpr();for(var i=0;i<steps.length;++i){var a=new NodeTestName(steps[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('^'+XML_NC_NAME)};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('^('+XML_NC_NAME+':)?'+XML_NC_NAME)};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++;}
xpathLog('XPath parse INIT: '+k+' rules');function push_(array,position,element){if(!array[position]){array[position]=[];}
array[position].push(element);}
for(i=0;i<xpathGrammarRules.length;++i){var rule=xpathGrammarRules[i];var pattern=rule[1];for(var j=pattern.length-1;j>=0;--j){if(pattern[j]==Q_1M){push_(xpathRules,pattern[j-1].key,rule);break;}else if(pattern[j]==Q_MM||pattern[j]==Q_01){push_(xpathRules,pattern[j-1].key,rule);--j;}else{push_(xpathRules,pattern[j].key,rule);break;}}}
xpathLog('XPath parse INIT: '+xpathRules.length+' rule bins');var sum=0;mapExec(xpathRules,function(i){if(i){sum+=i.length;}});xpathLog('XPath parse INIT: '+(sum/xpathRules.length)+' average bin size');}
function xpathCollectDescendants(nodelist,node){for(var n=node.firstChild;n;n=n.nextSibling){nodelist.push(n);arguments.callee(nodelist,n);}}
function xpathCollectDescendantsReverse(nodelist,node){for(var n=node.lastChild;n;n=n.previousSibling){nodelist.push(n);arguments.callee(nodelist,n);}}
function xpathDomEval(expr,node){var expr1=xpathParse(expr);var ret=expr1.evaluate(new ExprContext(node));return ret;}
function xpathSort(input,sort){if(sort.length==0){return;}
var sortlist=[];for(var i=0;i<input.contextSize();++i){var node=input.nodelist[i];var sortitem={node:node,key:[]};var context=input.clone(node,0,[node]);for(var j=0;j<sort.length;++j){var s=sort[j];var value=s.expr.evaluate(context);var evalue;if(s.type=='text'){evalue=value.stringValue();}else if(s.type=='number'){evalue=value.numberValue();}
sortitem.key.push({value:evalue,order:s.order});}
sortitem.key.push({value:i,order:'ascending'});sortlist.push(sortitem);}
sortlist.sort(xpathSortByKey);var nodes=[];for(var i=0;i<sortlist.length;++i){nodes.push(sortlist[i].node);}
input.nodelist=nodes;input.setNode(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 xpathEval(select,context){var expr=xpathParse(select);var ret=expr.evaluate(context);return ret;}
var REGEXP_UNICODE=function(){var tests=[' ','\u0120',-1,'!','\u0120',-1,'\u0120','\u0120',0,'\u0121','\u0120',-1,'\u0121','\u0120|\u0121',0,'\u0122','\u0120|\u0121',-1,'\u0120','[\u0120]',0,'\u0121','[\u0120]',-1,'\u0121','[\u0120\u0121]',0,'\u0122','[\u0120\u0121]',-1,'\u0121','[\u0120-\u0121]',0,'\u0122','[\u0120-\u0121]',-1];for(var i=0;i<tests.length;i+=3){if(tests[i].search(new RegExp(tests[i+1]))!=tests[i+2]){return false;}}
return true;}();var XML_S='[ \t\r\n]+';var XML_EQ='('+XML_S+')?=('+XML_S+')?';var XML_CHAR_REF='&#[0-9]+;|&#x[0-9a-fA-F]+;';var XML10_VERSION_INFO=XML_S+'version'+XML_EQ+'("1\\.0"|'+"'1\\.0')";var XML10_BASE_CHAR=(REGEXP_UNICODE)?'\u0041-\u005a\u0061-\u007a\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u00ff'+'\u0100-\u0131\u0134-\u013e\u0141-\u0148\u014a-\u017e\u0180-\u01c3'+'\u01cd-\u01f0\u01f4-\u01f5\u01fa-\u0217\u0250-\u02a8\u02bb-\u02c1\u0386'+'\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03ce\u03d0-\u03d6\u03da\u03dc'+'\u03de\u03e0\u03e2-\u03f3\u0401-\u040c\u040e-\u044f\u0451-\u045c'+'\u045e-\u0481\u0490-\u04c4\u04c7-\u04c8\u04cb-\u04cc\u04d0-\u04eb'+'\u04ee-\u04f5\u04f8-\u04f9\u0531-\u0556\u0559\u0561-\u0586\u05d0-\u05ea'+'\u05f0-\u05f2\u0621-\u063a\u0641-\u064a\u0671-\u06b7\u06ba-\u06be'+'\u06c0-\u06ce\u06d0-\u06d3\u06d5\u06e5-\u06e6\u0905-\u0939\u093d'+'\u0958-\u0961\u0985-\u098c\u098f-\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2'+'\u09b6-\u09b9\u09dc-\u09dd\u09df-\u09e1\u09f0-\u09f1\u0a05-\u0a0a'+'\u0a0f-\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32-\u0a33\u0a35-\u0a36'+'\u0a38-\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8b\u0a8d'+'\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2-\u0ab3\u0ab5-\u0ab9'+'\u0abd\u0ae0\u0b05-\u0b0c\u0b0f-\u0b10\u0b13-\u0b28\u0b2a-\u0b30'+'\u0b32-\u0b33\u0b36-\u0b39\u0b3d\u0b5c-\u0b5d\u0b5f-\u0b61\u0b85-\u0b8a'+'\u0b8e-\u0b90\u0b92-\u0b95\u0b99-\u0b9a\u0b9c\u0b9e-\u0b9f\u0ba3-\u0ba4'+'\u0ba8-\u0baa\u0bae-\u0bb5\u0bb7-\u0bb9\u0c05-\u0c0c\u0c0e-\u0c10'+'\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c60-\u0c61\u0c85-\u0c8c'+'\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cde\u0ce0-\u0ce1'+'\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d28\u0d2a-\u0d39\u0d60-\u0d61'+'\u0e01-\u0e2e\u0e30\u0e32-\u0e33\u0e40-\u0e45\u0e81-\u0e82\u0e84'+'\u0e87-\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5'+'\u0ea7\u0eaa-\u0eab\u0ead-\u0eae\u0eb0\u0eb2-\u0eb3\u0ebd\u0ec0-\u0ec4'+'\u0f40-\u0f47\u0f49-\u0f69\u10a0-\u10c5\u10d0-\u10f6\u1100\u1102-\u1103'+'\u1105-\u1107\u1109\u110b-\u110c\u110e-\u1112\u113c\u113e\u1140\u114c'+'\u114e\u1150\u1154-\u1155\u1159\u115f-\u1161\u1163\u1165\u1167\u1169'+'\u116d-\u116e\u1172-\u1173\u1175\u119e\u11a8\u11ab\u11ae-\u11af'+'\u11b7-\u11b8\u11ba\u11bc-\u11c2\u11eb\u11f0\u11f9\u1e00-\u1e9b'+'\u1ea0-\u1ef9\u1f00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d'+'\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc'+'\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec'+'\u1ff2-\u1ff4\u1ff6-\u1ffc\u2126\u212a-\u212b\u212e\u2180-\u2182'+'\u3041-\u3094\u30a1-\u30fa\u3105-\u312c\uac00-\ud7a3':'A-Za-z';var XML10_IDEOGRAPHIC=(REGEXP_UNICODE)?'\u4e00-\u9fa5\u3007\u3021-\u3029':'';var XML10_COMBINING_CHAR=(REGEXP_UNICODE)?'\u0300-\u0345\u0360-\u0361\u0483-\u0486\u0591-\u05a1\u05a3-\u05b9'+'\u05bb-\u05bd\u05bf\u05c1-\u05c2\u05c4\u064b-\u0652\u0670\u06d6-\u06dc'+'\u06dd-\u06df\u06e0-\u06e4\u06e7-\u06e8\u06ea-\u06ed\u0901-\u0903\u093c'+'\u093e-\u094c\u094d\u0951-\u0954\u0962-\u0963\u0981-\u0983\u09bc\u09be'+'\u09bf\u09c0-\u09c4\u09c7-\u09c8\u09cb-\u09cd\u09d7\u09e2-\u09e3\u0a02'+'\u0a3c\u0a3e\u0a3f\u0a40-\u0a42\u0a47-\u0a48\u0a4b-\u0a4d\u0a70-\u0a71'+'\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0b01-\u0b03'+'\u0b3c\u0b3e-\u0b43\u0b47-\u0b48\u0b4b-\u0b4d\u0b56-\u0b57\u0b82-\u0b83'+'\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0c01-\u0c03\u0c3e-\u0c44'+'\u0c46-\u0c48\u0c4a-\u0c4d\u0c55-\u0c56\u0c82-\u0c83\u0cbe-\u0cc4'+'\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5-\u0cd6\u0d02-\u0d03\u0d3e-\u0d43'+'\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1'+'\u0eb4-\u0eb9\u0ebb-\u0ebc\u0ec8-\u0ecd\u0f18-\u0f19\u0f35\u0f37\u0f39'+'\u0f3e\u0f3f\u0f71-\u0f84\u0f86-\u0f8b\u0f90-\u0f95\u0f97\u0f99-\u0fad'+'\u0fb1-\u0fb7\u0fb9\u20d0-\u20dc\u20e1\u302a-\u302f\u3099\u309a':'';var XML10_DIGIT=(REGEXP_UNICODE)?'\u0030-\u0039\u0660-\u0669\u06f0-\u06f9\u0966-\u096f\u09e6-\u09ef'+'\u0a66-\u0a6f\u0ae6-\u0aef\u0b66-\u0b6f\u0be7-\u0bef\u0c66-\u0c6f'+'\u0ce6-\u0cef\u0d66-\u0d6f\u0e50-\u0e59\u0ed0-\u0ed9\u0f20-\u0f29':'0-9';var XML10_EXTENDER=(REGEXP_UNICODE)?'\u00b7\u02d0\u02d1\u0387\u0640\u0e46\u0ec6\u3005\u3031-\u3035'+'\u309d-\u309e\u30fc-\u30fe':'';var XML10_LETTER=XML10_BASE_CHAR+XML10_IDEOGRAPHIC;var XML10_NAME_CHAR=XML10_LETTER+XML10_DIGIT+'\\._:'+
XML10_COMBINING_CHAR+XML10_EXTENDER+'-';var XML10_NAME='['+XML10_LETTER+'_:]['+XML10_NAME_CHAR+']*';var XML10_ENTITY_REF='&'+XML10_NAME+';';var XML10_REFERENCE=XML10_ENTITY_REF+'|'+XML_CHAR_REF;var XML10_ATT_VALUE='"(([^<&"]|'+XML10_REFERENCE+')*)"|'+"'(([^<&']|"+XML10_REFERENCE+")*)'";var XML10_ATTRIBUTE='('+XML10_NAME+')'+XML_EQ+'('+XML10_ATT_VALUE+')';var XML11_VERSION_INFO=XML_S+'version'+XML_EQ+'("1\\.1"|'+"'1\\.1')";var XML11_NAME_START_CHAR=(REGEXP_UNICODE)?':A-Z_a-z\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02ff\u0370-\u037d'+'\u037f-\u1fff\u200c-\u200d\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff'+'\uf900-\ufdcf\ufdf0-\ufffd':':A-Z_a-z';var XML11_NAME_CHAR=XML11_NAME_START_CHAR+
((REGEXP_UNICODE)?'\\.0-9\u00b7\u0300-\u036f\u203f-\u2040-':'\\.0-9-');var XML11_NAME='['+XML11_NAME_START_CHAR+']['+XML11_NAME_CHAR+']*';var XML11_ENTITY_REF='&'+XML11_NAME+';';var XML11_REFERENCE=XML11_ENTITY_REF+'|'+XML_CHAR_REF;var XML11_ATT_VALUE='"(([^<&"]|'+XML11_REFERENCE+')*)"|'+"'(([^<&']|"+XML11_REFERENCE+")*)'";var XML11_ATTRIBUTE='('+XML11_NAME+')'+XML_EQ+'('+XML11_ATT_VALUE+')';var XML_NC_NAME_CHAR=XML10_LETTER+XML10_DIGIT+'\\._'+
XML10_COMBINING_CHAR+XML10_EXTENDER+'-';var XML_NC_NAME='['+XML10_LETTER+'_]['+XML_NC_NAME_CHAR+']*';function xpathLog(msg){};function xsltLog(msg){};function xsltLogXml(msg){};function assert(b){if(!b){throw"Assertion failed";}}
function stringSplit(s,c){var a=s.indexOf(c);if(a==-1){return[s];}
var parts=[];parts.push(s.substr(0,a));while(a!=-1){var a1=s.indexOf(c,a+1);if(a1!=-1){parts.push(s.substr(a+1,a1-a-1));}else{parts.push(s.substr(a+1));}
a=a1;}
return parts;}
function xmlImportNode(doc,node){if(node.nodeType==DOM_TEXT_NODE){return domCreateTextNode(doc,node.nodeValue);}else if(node.nodeType==DOM_CDATA_SECTION_NODE){return domCreateCDATASection(doc,node.nodeValue);}else if(node.nodeType==DOM_ELEMENT_NODE){var newNode=domCreateElement(doc,node.nodeName);for(var i=0;i<node.attributes.length;++i){var an=node.attributes[i];var name=an.nodeName;var value=an.nodeValue;domSetAttribute(newNode,name,value);}
for(var c=node.firstChild;c;c=c.nextSibling){var cn=arguments.callee(doc,c);domAppendChild(newNode,cn);}
return newNode;}else{return domCreateComment(doc,node.nodeName);}}
function Set(){this.keys=[];}
Set.prototype.size=function(){return this.keys.length;}
Set.prototype.add=function(key,opt_value){var value=opt_value||1;if(!this.contains(key)){this[':'+key]=value;this.keys.push(key);}}
Set.prototype.set=function(key,opt_value){var value=opt_value||1;if(!this.contains(key)){this[':'+key]=value;this.keys.push(key);}else{this[':'+key]=value;}}
Set.prototype.inc=function(key){if(!this.contains(key)){this[':'+key]=1;this.keys.push(key);}else{this[':'+key]++;}}
Set.prototype.get=function(key){if(this.contains(key)){return this[':'+key];}else{var undefined;return undefined;}}
Set.prototype.remove=function(key){if(this.contains(key)){delete this[':'+key];removeFromArray(this.keys,key,true);}}
Set.prototype.contains=function(entry){return typeof this[':'+entry]!='undefined';}
Set.prototype.items=function(){var list=[];for(var i=0;i<this.keys.length;++i){var k=this.keys[i];var v=this[':'+k];list.push(v);}
return list;}
Set.prototype.map=function(f){for(var i=0;i<this.keys.length;++i){var k=this.keys[i];f.call(this,k,this[':'+k]);}}
Set.prototype.clear=function(){for(var i=0;i<this.keys.length;++i){delete this[':'+this.keys[i]];}
this.keys.length=0;}
function mapExec(array,func){for(var i=0;i<array.length;++i){func.call(this,array[i],i);}}
function mapExpr(array,func){var ret=[];for(var i=0;i<array.length;++i){ret.push(func(array[i]));}
return ret;};function reverseInplace(array){for(var i=0;i<array.length/2;++i){var h=array[i];var ii=array.length-i-1;array[i]=array[ii];array[ii]=h;}}
function removeFromArray(array,value,opt_notype){var shift=0;for(var i=0;i<array.length;++i){if(array[i]===value||(opt_notype&&array[i]==value)){array.splice(i--,1);shift++;}}
return shift;}
function copyArray(dst,src){for(var i=0;i<src.length;++i){dst.push(src[i]);}}
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,opt_cdata){var buf=[];xmlTextR(node,buf,opt_cdata);return buf.join('');}
function xmlTextR(node,buf,cdata){if(node.nodeType==DOM_TEXT_NODE){buf.push(xmlEscapeText(node.nodeValue));}else if(node.nodeType==DOM_CDATA_SECTION_NODE){if(cdata){buf.push(node.nodeValue);}else{buf.push('<![CDATA['+node.nodeValue+']]>');}}else if(node.nodeType==DOM_COMMENT_NODE){buf.push('<!--'+node.nodeValue+'-->');}else if(node.nodeType==DOM_ELEMENT_NODE){buf.push('<'+xmlFullNodeName(node));for(var i=0;i<node.attributes.length;++i){var a=node.attributes[i];if(a&&a.nodeName&&a.nodeValue){buf.push(' '+xmlFullNodeName(a)+'="'+
xmlEscapeAttr(a.nodeValue)+'"');}}
if(node.childNodes.length==0){buf.push('/>');}else{buf.push('>');for(var i=0;i<node.childNodes.length;++i){arguments.callee(node.childNodes[i],buf,cdata);}
buf.push('</'+xmlFullNodeName(node)+'>');}}else if(node.nodeType==DOM_DOCUMENT_NODE||node.nodeType==DOM_DOCUMENT_FRAGMENT_NODE){for(var i=0;i<node.childNodes.length;++i){arguments.callee(node.childNodes[i],buf,cdata);}}}
function xmlFullNodeName(n){if(n.prefix&&n.nodeName.indexOf(n.prefix+':')!=0){return n.prefix+':'+n.nodeName;}else{return n.nodeName;}}
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;');}
function xmlOwnerDocument(node){if(node.nodeType==DOM_DOCUMENT_NODE){return node;}else{return node.ownerDocument;}}
function domGetAttribute(node,name){return node.getAttribute(name);}
function domSetAttribute(node,name,value){return node.setAttribute(name,value);}
function domRemoveAttribute(node,name){return node.removeAttribute(name);}
function domAppendChild(node,child){return node.appendChild(child);}
function domRemoveChild(node,child){return node.removeChild(child);}
function domReplaceChild(node,newChild,oldChild){return node.replaceChild(newChild,oldChild);}
function domInsertBefore(node,newChild,oldChild){return node.insertBefore(newChild,oldChild);}
function domRemoveNode(node){return domRemoveChild(node.parentNode,node);}
function domCreateTextNode(doc,text){return doc.createTextNode(text);}
function domCreateElement(doc,name){return doc.createElement(name);}
function domCreateAttribute(doc,name){return doc.createAttribute(name);}
function domCreateCDATASection(doc,data){return doc.createCDATASection(data);}
function domCreateComment(doc,text){return doc.createComment(text);}
function domCreateDocumentFragment(doc){return doc.createDocumentFragment();}
function domGetElementById(doc,id){return doc.getElementById(id);}
function windowSetInterval(win,fun,time){return win.setInterval(fun,time);}
function windowClearInterval(win,id){return win.clearInterval(id);}
function xmlResolveEntities(s){var parts=stringSplit(s,'&');var ret=parts[0];for(var i=1;i<parts.length;++i){var rp=parts[i].indexOf(';');if(rp==-1){ret+=parts[i];continue;}
var entityName=parts[i].substring(0,rp);var remainderText=parts[i].substring(rp+1);var ch;switch(entityName){case'lt':ch='<';break;case'gt':ch='>';break;case'amp':ch='&';break;case'quot':ch='"';break;case'apos':ch='\'';break;case'nbsp':ch=String.fromCharCode(160);break;default:var span=domCreateElement(window.document,'span');span.innerHTML='&'+entityName+'; ';ch=span.childNodes[0].nodeValue.charAt(0);}
ret+=ch+remainderText;}
return ret;}
var XML10_TAGNAME_REGEXP=new RegExp('^('+XML10_NAME+')');var XML10_ATTRIBUTE_REGEXP=new RegExp(XML10_ATTRIBUTE,'g');var XML11_TAGNAME_REGEXP=new RegExp('^('+XML11_NAME+')');var XML11_ATTRIBUTE_REGEXP=new RegExp(XML11_ATTRIBUTE,'g');function xmlParse(xml){var regex_empty=/\/$/;var regex_tagname;var regex_attribute;if(xml.match(/^<\?xml/)){if(xml.search(new RegExp(XML10_VERSION_INFO))==5){regex_tagname=XML10_TAGNAME_REGEXP;regex_attribute=XML10_ATTRIBUTE_REGEXP;}else if(xml.search(new RegExp(XML11_VERSION_INFO))==5){regex_tagname=XML11_TAGNAME_REGEXP;regex_attribute=XML11_ATTRIBUTE_REGEXP;}else{alert('VersionInfo is missing, or unknown version number.');}}else{regex_tagname=XML10_TAGNAME_REGEXP;regex_attribute=XML10_ATTRIBUTE_REGEXP;}
var xmldoc=new XDocument();var root=xmldoc;var stack=[];var parent=root;stack.push(parent);var slurp='';var x=stringSplit(xml,'<');for(var i=1;i<x.length;++i){var xx=stringSplit(x[i],'>');var tag=xx[0];var text=xmlResolveEntities(xx[1]||'');if(slurp){var end=x[i].indexOf(slurp);if(end!=-1){var data=x[i].substring(0,end);parent.nodeValue+='<'+data;stack.pop();parent=stack[stack.length-1];text=x[i].substring(end+slurp.length);slurp='';}else{parent.nodeValue+='<'+x[i];text=null;}}else if(tag.indexOf('![CDATA[')==0){var start='![CDATA['.length;var end=x[i].indexOf(']]>');if(end!=-1){var data=x[i].substring(start,end);var node=domCreateCDATASection(xmldoc,data);domAppendChild(parent,node);}else{var data=x[i].substring(start);text=null;var node=domCreateCDATASection(xmldoc,data);domAppendChild(parent,node);parent=node;stack.push(node);slurp=']]>';}}else if(tag.indexOf('!--')==0){var start='!--'.length;var end=x[i].indexOf('-->');if(end!=-1){var data=x[i].substring(start,end);var node=domCreateComment(xmldoc,data);domAppendChild(parent,node);}else{var data=x[i].substring(start);text=null;var node=domCreateComment(xmldoc,data);domAppendChild(parent,node);parent=node;stack.push(node);slurp='-->';}}else if(tag.charAt(0)=='/'){stack.pop();parent=stack[stack.length-1];}else if(tag.charAt(0)=='?'){}else if(tag.charAt(0)=='!'){}else{var empty=tag.match(regex_empty);var tagname=regex_tagname.exec(tag)[1];var node=domCreateElement(xmldoc,tagname);var att;while(att=regex_attribute.exec(tag)){var val=xmlResolveEntities(att[5]||att[7]||'');domSetAttribute(node,att[1],val);}
domAppendChild(parent,node);if(!empty){parent=node;stack.push(node);}}
if(text&&parent!=root){domAppendChild(parent,domCreateTextNode(xmldoc,text));}}
return root;}
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;function domTraverseElements(node,opt_pre,opt_post){var ret;if(opt_pre){ret=opt_pre.call(null,node);if(typeof ret=='boolean'&&!ret){return false;}}
for(var c=node.firstChild;c;c=c.nextSibling){if(c.nodeType==DOM_ELEMENT_NODE){ret=arguments.callee.call(this,c,opt_pre,opt_post);if(typeof ret=='boolean'&&!ret){return false;}}}
if(opt_post){ret=opt_post.call(null,node);if(typeof ret=='boolean'&&!ret){return false;}}}
function XNode(type,name,opt_value,opt_owner){this.attributes=[];this.childNodes=[];XNode.init.call(this,type,name,opt_value,opt_owner);}
XNode.init=function(type,name,value,owner){this.nodeType=type-0;this.nodeName=''+name;this.nodeValue=''+value;this.ownerDocument=owner;this.firstChild=null;this.lastChild=null;this.nextSibling=null;this.previousSibling=null;this.parentNode=null;}
XNode.unused_=[];XNode.recycle=function(node){if(!node){return;}
if(node.constructor==XDocument){XNode.recycle(node.documentElement);return;}
if(node.constructor!=this){return;}
XNode.unused_.push(node);for(var a=0;a<node.attributes.length;++a){XNode.recycle(node.attributes[a]);}
for(var c=0;c<node.childNodes.length;++c){XNode.recycle(node.childNodes[c]);}
node.attributes.length=0;node.childNodes.length=0;XNode.init.call(node,0,'','',null);}
XNode.create=function(type,name,value,owner){if(XNode.unused_.length>0){var node=XNode.unused_.pop();XNode.init.call(node,type,name,value,owner);return node;}else{return new XNode(type,name,value,owner);}}
XNode.prototype.appendChild=function(node){if(this.childNodes.length==0){this.firstChild=node;}
node.previousSibling=this.lastChild;node.nextSibling=null;if(this.lastChild){this.lastChild.nextSibling=node;}
node.parentNode=this;this.lastChild=node;this.childNodes.push(node);}
XNode.prototype.replaceChild=function(newNode,oldNode){if(oldNode==newNode){return;}
for(var i=0;i<this.childNodes.length;++i){if(this.childNodes[i]==oldNode){this.childNodes[i]=newNode;var p=oldNode.parentNode;oldNode.parentNode=null;newNode.parentNode=p;p=oldNode.previousSibling;oldNode.previousSibling=null;newNode.previousSibling=p;if(newNode.previousSibling){newNode.previousSibling.nextSibling=newNode;}
p=oldNode.nextSibling;oldNode.nextSibling=null;newNode.nextSibling=p;if(newNode.nextSibling){newNode.nextSibling.previousSibling=newNode;}
if(this.firstChild==oldNode){this.firstChild=newNode;}
if(this.lastChild==oldNode){this.lastChild=newNode;}
break;}}}
XNode.prototype.insertBefore=function(newNode,oldNode){if(oldNode==newNode){return;}
if(oldNode.parentNode!=this){return;}
if(newNode.parentNode){newNode.parentNode.removeChild(newNode);}
var newChildren=[];for(var i=0;i<this.childNodes.length;++i){var c=this.childNodes[i];if(c==oldNode){newChildren.push(newNode);newNode.parentNode=this;newNode.previousSibling=oldNode.previousSibling;oldNode.previousSibling=newNode;if(newNode.previousSibling){newNode.previousSibling.nextSibling=newNode;}
newNode.nextSibling=oldNode;if(this.firstChild==oldNode){this.firstChild=newNode;}}
newChildren.push(c);}
this.childNodes=newChildren;}
XNode.prototype.removeChild=function(node){var newChildren=[];for(var i=0;i<this.childNodes.length;++i){var c=this.childNodes[i];if(c!=node){newChildren.push(c);}else{if(c.previousSibling){c.previousSibling.nextSibling=c.nextSibling;}
if(c.nextSibling){c.nextSibling.previousSibling=c.previousSibling;}
if(this.firstChild==c){this.firstChild=c.nextSibling;}
if(this.lastChild==c){this.lastChild=c.previousSibling;}}}
this.childNodes=newChildren;}
XNode.prototype.hasAttributes=function(){return this.attributes.length>0;}
XNode.prototype.setAttribute=function(name,value){for(var i=0;i<this.attributes.length;++i){if(this.attributes[i].nodeName==name){this.attributes[i].nodeValue=''+value;return;}}
this.attributes.push(XNode.create(DOM_ATTRIBUTE_NODE,name,value,this));}
XNode.prototype.getAttribute=function(name){for(var i=0;i<this.attributes.length;++i){if(this.attributes[i].nodeName==name){return this.attributes[i].nodeValue;}}
return null;}
XNode.prototype.removeAttribute=function(name){var a=[];for(var i=0;i<this.attributes.length;++i){if(this.attributes[i].nodeName!=name){a.push(this.attributes[i]);}}
this.attributes=a;}
XNode.prototype.getElementsByTagName=function(name){var ret=[];domTraverseElements(this,function(node){if(node.nodeName==name){ret.push(node);}},null);return ret;}
XNode.prototype.getElementById=function(id){var ret=null;domTraverseElements(this,function(node){if(node.getAttribute('id')==id){ret=node;return false;}},null);return ret;}
function XDocument(){XNode.call(this,DOM_DOCUMENT_NODE,'#document',null,null);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(node){XNode.prototype.appendChild.call(this,node);this.documentElement=this.childNodes[0];}
XDocument.prototype.createElement=function(name){return XNode.create(DOM_ELEMENT_NODE,name,null,this);}
XDocument.prototype.createDocumentFragment=function(){return XNode.create(DOM_DOCUMENT_FRAGMENT_NODE,'#document-fragment',null,this);}
XDocument.prototype.createTextNode=function(value){return XNode.create(DOM_TEXT_NODE,'#text',value,this);}
XDocument.prototype.createAttribute=function(name){return XNode.create(DOM_ATTRIBUTE_NODE,name,null,this);}
XDocument.prototype.createComment=function(data){return XNode.create(DOM_COMMENT_NODE,'#comment',data,this);}
XDocument.prototype.createCDATASection=function(data){return XNode.create(DOM_CDATA_SECTION_NODE,'#cdata-section',data,this);}
function SOAPClientParameters()
{var _pl=new Array();this.add=function(name,value)
{_pl[name]=value;return this;}
this.toXml=function()
{var xml="";for(var p in _pl)
{if(typeof(_pl[p])!="function")
xml+="<"+p+">"+_pl[p].toString().replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")+"</"+p+">";}
return xml;}}
function SOAPClient(){}
SOAPClient.invoke=function(url,method,parameters,async,callback)
{if(async)
SOAPClient._loadWsdl(url,method,parameters,async,callback);else
return SOAPClient._loadWsdl(url,method,parameters,async,callback);}
SOAPClient_cacheWsdl=new Array();SOAPClient._loadWsdl=function(url,method,parameters,async,callback)
{var wsdl=SOAPClient_cacheWsdl[url];if(wsdl+""!=""&&wsdl+""!="undefined")
return SOAPClient._sendSoapRequest(url,method,parameters,async,callback,wsdl);var xmlHttp=SOAPClient._getXmlHttp();xmlHttp.open("GET",url+"?wsdl",async);if(async)
{xmlHttp.onreadystatechange=function()
{if(xmlHttp.readyState==4)
SOAPClient._onLoadWsdl(url,method,parameters,async,callback,xmlHttp);}}
xmlHttp.send(null);if(!async)
return SOAPClient._onLoadWsdl(url,method,parameters,async,callback,xmlHttp);}
SOAPClient._onLoadWsdl=function(url,method,parameters,async,callback,req)
{var wsdl=req.responseXML;SOAPClient_cacheWsdl[url]=wsdl;return SOAPClient._sendSoapRequest(url,method,parameters,async,callback,wsdl);}
SOAPClient._sendSoapRequest=function(url,method,parameters,async,callback,wsdl)
{var ns=(wsdl.documentElement.attributes["targetNamespace"]+""=="undefined")?wsdl.documentElement.attributes.getNamedItem("targetNamespace").nodeValue:wsdl.documentElement.attributes["targetNamespace"].value;var sr="<?xml version=\"1.0\" encoding=\"utf-8\"?>"+"<soap:Envelope "+"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "+"xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" "+"xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"+"<soap:Body>"+"<"+method+" xmlns=\""+ns+"\">"+
parameters.toXml()+"</"+method+"></soap:Body></soap:Envelope>";var xmlHttp=SOAPClient._getXmlHttp();xmlHttp.open("POST",url,async);var soapaction=((ns.lastIndexOf("/")!=ns.length-1)?ns+"/":ns)+method;xmlHttp.setRequestHeader("SOAPAction",soapaction);xmlHttp.setRequestHeader("Content-Type","text/xml; charset=utf-8");if(async)
{xmlHttp.onreadystatechange=function()
{if(xmlHttp.readyState==4)
SOAPClient._onSendSoapRequest(method,async,callback,wsdl,xmlHttp);}}
xmlHttp.send(sr);if(!async)
return SOAPClient._onSendSoapRequest(method,async,callback,wsdl,xmlHttp);}
SOAPClient._onSendSoapRequest=function(method,async,callback,wsdl,req)
{var o=null;var nd=SOAPClient._getElementsByTagName(req.responseXML,method+"Result");if(nd.length==0)
{if(req.responseXML.getElementsByTagName("faultcode").length>0)
throw new Error(500,req.responseXML.getElementsByTagName("faultstring")[0].childNodes[0].nodeValue);}
else
o=SOAPClient._soapresult2object(nd[0],wsdl);if(callback)
callback(o,req.responseXML);if(!async)
return o;}
SOAPClient._getElementsByTagName=function(document,tagName)
{try
{return document.selectNodes(".//*[local-name()=\""+tagName+"\"]");}
catch(ex){}
return document.getElementsByTagName(tagName);}
SOAPClient._soapresult2object=function(node,wsdl)
{return SOAPClient._node2object(node,wsdl);}
SOAPClient._node2object=function(node,wsdl)
{if(node==null)
return null;if(node.nodeType==3||node.nodeType==4)
return SOAPClient._extractValue(node,wsdl);if(node.childNodes.length==1&&(node.childNodes[0].nodeType==3||node.childNodes[0].nodeType==4))
return SOAPClient._node2object(node.childNodes[0],wsdl);var isarray=SOAPClient._getTypeFromWsdl(node.nodeName,wsdl).toLowerCase().indexOf("arrayof")!=-1;if(!isarray)
{var obj=null;if(node.hasChildNodes())
obj=new Object();for(var i=0;i<node.childNodes.length;i++)
{var p=SOAPClient._node2object(node.childNodes[i],wsdl);obj[node.childNodes[i].nodeName]=p;}
return obj;}
else
{var l=new Array();for(var i=0;i<node.childNodes.length;i++)
l[l.length]=SOAPClient._node2object(node.childNodes[i],wsdl);return l;}
return null;}
SOAPClient._extractValue=function(node,wsdl)
{var value=node.nodeValue;switch(SOAPClient._getTypeFromWsdl(node.parentNode.nodeName,wsdl).toLowerCase())
{default:case"s:string":return(value!=null)?value+"":"";case"s:boolean":return value+""=="true";case"s:int":case"s:long":return(value!=null)?parseInt(value+"",10):0;case"s:double":return(value!=null)?parseFloat(value+""):0;case"s:datetime":if(value==null)
return null;else
{value=value+"";value=value.substring(0,value.lastIndexOf("."));value=value.replace(/T/gi," ");value=value.replace(/-/gi,"/");var d=new Date();d.setTime(Date.parse(value));return d;}}}
SOAPClient._getTypeFromWsdl=function(elementname,wsdl)
{var ell=wsdl.getElementsByTagName("s:element");if(ell.length==0)
ell=wsdl.getElementsByTagName("element");for(var i=0;i<ell.length;i++)
{if(ell[i].attributes["name"]+""=="undefined")
{if(ell[i].attributes.getNamedItem("name")!=null&&ell[i].attributes.getNamedItem("name").nodeValue==elementname&&ell[i].attributes.getNamedItem("type")!=null)
return ell[i].attributes.getNamedItem("type").nodeValue;}
else
{if(ell[i].attributes["name"]!=null&&ell[i].attributes["name"].value==elementname&&ell[i].attributes["type"]!=null)
return ell[i].attributes["type"].value;}}
return"";}
SOAPClient._getXmlHttp=function()
{try
{if(window.XMLHttpRequest)
{var req=new XMLHttpRequest();if(req.readyState==null)
{req.readyState=1;req.addEventListener("load",function()
{req.readyState=4;if(typeof req.onreadystatechange=="function")
req.onreadystatechange();},false);}
return req;}
if(window.ActiveXObject)
return new ActiveXObject(SOAPClient._getXmlHttpProgID());}
catch(ex){}
throw new Error("Your browser does not support XmlHttp objects");}
SOAPClient._getXmlHttpProgID=function()
{if(SOAPClient._getXmlHttpProgID.progid)
return SOAPClient._getXmlHttpProgID.progid;var progids=["Msxml2.XMLHTTP.5.0","Msxml2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"];var o;for(var i=0;i<progids.length;i++)
{try
{o=new ActiveXObject(progids[i]);return SOAPClient._getXmlHttpProgID.progid=progids[i];}
catch(ex){};}
throw new Error("Could not find an installed XML parser");}
function Fill_LienKetWebsite(_LinkLienKet){myLink=document.getElementById("ctl00_ctl00_ContentPlaceHolder1_FooterMenu1_"+_LinkLienKet);if(myLink.options[myLink.selectedIndex].value!="0"){window.open(myLink.options[myLink.selectedIndex].value);myLink.selectedIndex=0;}}
