var t=this; var ajaxSending=0; var aqueue=new Array(); function callAjax(sendQuery) { if(ajaxSending) { aqueue.push(sendQuery); } else { doAjax(sendQuery); } } function doAjax(query) { ajaxSending=1; var url='/ajax'; if(query.overrideUrl) { url=query.overrideUrl; } var sendQuery=''; if(typeof(query)=='object') { query['ajax']=1; var r=Math.floor(Math.random()*1000000000); query['noCache']=r; for(var i in query) { var sToChange=String(query[i]); var re=/\;/g; var changed=sToChange.replace(re, "0x3B"); query[i]=changed; sendQuery+="&"+i+"="+query[i]; } } else if(typeof(query)=='string') { var sToChange=String(query); var re=/\;/; var changed=sToChange.replace(re, "0x3B"); query=changed; sendQuery+="&"+query+"&ajax=1"; } myRequest.open("POST",url,true); myRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); myRequest.send(sendQuery); myRequest.onreadystatechange=responseHandler; } function getXMLHttpRequest() { var request=false; try { request=new XMLHttpRequest(); } catch(err1) { try { request=new ActiveXObject("Msxml2.XMLHTTP"); } catch(err2) { try { request=new ActiveXObject("Microsoft.XMLHTTP"); } catch(err3) { request=false; } } } return request; } function responseHandler() { if(myRequest.readyState == 4) { if(myRequest.status == 200) { ajaxSending=0; var myXML=myRequest.responseXML; if(myXML.childNodes[0]) { var myAtt=myXML.childNodes[0].getAttribute('feature'); var myHandler=myXML.childNodes[0].getAttribute('handler'); if(myHandler) { if(w[myHandler]) { w[myHandler](myXML); } } else if(myAtt) { if(t[myAtt+'_Event']) { t[myAtt+'_Event'](myXML); } } } if(aqueue.length) { callAjax(aqueue[0]); aqueue.shift(); } } } } var myRequest=getXMLHttpRequest();var FunTags=0; var fta=new Array(); function AIR_FunTag(e) { var pieces=e.innerHTML.split(" "); var appName=''; var url=pieces[0]; for(var i=0;i0) { appName+=pieces[i]; if(i<(pieces.length-1)) { appName+=' '; } } } while(e.firstChild) { e.removeChild(e.firstChild); } appName=encodeURIComponent(appName); url=encodeURIComponent(url); var ilf=document.createElement('iframe'); if(isIE) { ilf.style.height='168px'; ilf.style.width='245px'; e.style.height='168px'; e.style.width='245px'; } else { ilf.style.height='138px'; ilf.style.width='215px'; e.style.height='168px'; e.style.width='245px'; } ilf.setAttribute('src','http://www.airapps.net/badge.pl?appname='+appName+'&appurl='+url+'&airversion=1.0.M4&fColor=FFFFFF'); ilf.style.borderStyle='none'; ilf.setAttribute('frameborder','no'); ilf.setAttribute('overflow','hidden'); ilf.style.overflow='hidden'; e.appendChild(ilf); } function AudioPlay_FunTag(e) { var sound=e.innerHTML.split(" "); var s=''; var uid=sound[0]; for(var i=0;i0) { s+=sound[i]; if(i<(sound.length-1)) { s+=' '; } } } e.innerHTML=''; } function AudioRecord_FunTag(e) { e.innerHTML=''; } function DoFunTags(e) { if(!e) { e=document; } fta=[]; var ft=new Object(); ft["About"]=1; ft["Actor"]=1; ft["AIR"]=2; ft["Amazon"]=1; ft["AIRApps"]=1; ft["AudioPlay"]=2; ft["AudioRecord"]=2; ft["Blogger"]=1; ft["Calculator"]=1; ft["Dictionary"]=1; ft["Extension"]=1; ft["Film"]=1; ft["Flickr"]=1; ft["Forecast"]=1; ft["Google"]=1; ft["GoogleImages"]=1; ft["GoogleMaps"]=2; ft["GoogleNews"]=1; ft["GoogleVideo"]=1; ft["IP"]=1; ft["Merlot"]=1; ft["Odeo"]=1; ft["Register"]=2; ft["SpellCheck"]=1; ft["Stock"]=1; ft["Technorati"]=1; ft["Telephone"]=2; ft["VideoPlay"]=2; ft["VideoRecord"]=2; ft["Weather"]=1; ft["WebMD"]=1; ft["Wikipedia"]=1; ft["YouTube"]=1; ft["Zap2It"]=1; ft["Spanish"]=1; ft["French"]=1; ft["German"]=1; ft["Italian"]=1; ft["Dutch"]=1; ft["Portuguese"]=1; var ftx=''; var tags=e.getElementsByTagName('div'); var matchTags=0; for(var i=0;i'; fta[matchTags]=tags[i]; tags[i].style.visibility='hidden'; matchTags++; } else if(ft[tags[i].className]==2) { t[tags[i].className+'_FunTag'](tags[i]); } } ftx+=''; if(matchTags) { var query=new Object(); query['feature']='Search'; query['module']='FunTags'; query['method']='doFunTags'; query['funTags']=escape(ftx); query['handler']='DoFunTags_handler'; callWebService(query); } } function DoFunTags_handler(xmlObject) { var result=getXPath(xmlObject,"//FunTag"); for(var i=0;i'+result[i].childNodes[0].childNodes[j].childNodes[0].nodeValue+''; } } else if(result[i].childNodes[0].childNodes[j].nodeName=='a') { xhtml+=''+result[i].childNodes[0].childNodes[j].childNodes[0].nodeValue+''; } else { xhtml+=createStringFromXml(result[i].childNodes[0].childNodes[j]); } } } if((tagType) && (fta[i])) { fta[i].innerHTML=xhtml; fta[i].style.visibility='visible'; } } } function DoRegister() { var uid=document.getElementById('Register_Email').value; var password=document.getElementById('Register_Password').value; if((!uid) || (!password)) { alert('Enter an e-mail address and password'); } else { var a=uid.split("@"); if(!a[1]) { alert('Enter a valid e-mail address'); } else { var query=new Object(); query['feature']='Search'; query['method']='preRegister'; query['uid']=uid; query['password']=password; query['makeSecure']=1; query['handler']='DoRegister_handler'; callWebService(query); } } } function DoRegister_handler(xmlObject) { var result=getXPath(xmlObject,"//uid"); var error=Number(result[0].getAttribute("error")); alert(result[0].getAttribute("message")); if(!error) { var a=document.getElementsByTagName("DIV"); for(var i=0;i'; } function VideoPlay_FunTag(e) { var sound=e.innerHTML.split(" "); var s=''; var uid=sound[0]; for(var i=0;i0) { s+=sound[i]; if(i<(sound.length-1)) { s+=' '; } } } e.innerHTML=''; } function VideoRecord_FunTag(e) { e.innerHTML=''; }var doAuth=function() { if(!getCookie("S_uid")) { var d=document.createElement('div'); d.setAttribute('id','Auth_div'); d.style.position='absolute'; d.className='S_RegularText'; d.style.width='300px'; d.style.padding='5px'; d.style.backgroundColor='#2677B6'; d.style.color='#FFFFFF'; d.style.zIndex=1000030; d.style.borderColor='#FFFFFF'; d.style.borderStyle='solid'; d.style.borderWidth='1px'; var b=getBrowserObject(); d.style.left=(b.clientWidth/2) - 150 + 'px'; d.style.top=(b.clientHeight/2) - 50 + 'px'; var s=document.createElement('span'); s.innerHTML='Enter your Enrich Username and Password:

YOUR INFORMATION IS STRONGLY ENCRYPTED FOR YOUR PROTECTION

'; s.innerHTML+='Email
'; s.innerHTML+='

Password

'; s.innerHTML+=' '; d.appendChild(s); document.body.appendChild(d); var i=document.getElementById('Auth_uid'); i.onkeypress=function() { var event=EventUtil.getEvent(); if ((event && event.which == 13) || (event && event.keyCode == 13)) { document.getElementById('Auth_password').focus(); } else { return true; } } var i=document.getElementById('Auth_password'); i.onkeypress=function() { var event=EventUtil.getEvent(); if ((event && event.which == 13) || (event && event.keyCode == 13)) { Auth_sendUID(); } else { return true; } } return -1; } else { if(S_searchDevicesObject[module].doAuth) { S_searchDevicesObject[module].doAuth(getCookie("S_uid")); return -1; } else { var thisObject=new Object(); thisObject['uid']=getCookie("S_uid"); return thisObject; } } } function Auth_sendUID() { var email=document.getElementById('Auth_uid').value; var password=document.getElementById('Auth_password').value; if((!email) || (!password)) { alert('Enter your Enrich E-Mail/Username and Password!'); } else { var query=new Object(); query['feature']='Search'; query['method']='authenticate'; query['uid']=email; query['password']=password; query['handler']='AuthInitialize_Event'; query['moduleNamespace']='Auth'; callWebService(query); } } function Auth_cancelUID() { var e=document.getElementById('Auth_div'); e.parentNode.removeChild(e); } function AuthInitialize_Event(xmlObject) { var result=getXPath(xmlObject,"//uid"); var uid=Number(result[0].getAttribute('value')); if(uid<1) { alert('Invalid Enrich E-Mail/Username and/or Password!'); } else { Auth_cancelUID(); setCookie("S_uid",uid); if(S_searchDevicesObject[module].doAuth) { S_searchDevicesObject[module].doAuth(uid); } else { S_startSearch(S_cachedSearch,0,1); } } }var sUserAgent=navigator.userAgent; var fAppVersion=parseFloat(navigator.appVersion); var isSafari; function compareVersions(sVersion1, sVersion2) { var aVersion1=sVersion1.split("."); var aVersion2=sVersion2.split("."); if (aVersion1.length > aVersion2.length) { for (var i=0; i < aVersion1.length - aVersion2.length; i++) { aVersion2.push("0"); } } else if (aVersion1.length < aVersion2.length) { for (var i=0; i < aVersion2.length - aVersion1.length; i++) { aVersion1.push("0"); } } for (var i=0; i < aVersion1.length; i++) { if (aVersion1[i] < aVersion2[i]) { return -1; } else if (aVersion1[i] > aVersion2[i]) { return 1; } } return 0; } var isOpera=sUserAgent.indexOf("Opera") > -1; var isMinOpera4=isMinOpera5=isMinOpera6=isMinOpera7=isMinOpera7_5=false; if (isOpera) { var fOperaVersion; if(navigator.appName == "Opera") { fOperaVersion=fAppVersion; } else { var reOperaVersion=new RegExp("Opera (\\d+\\.\\d+)"); reOperaVersion.test(sUserAgent); fOperaVersion=parseFloat(RegExp["$1"]); } isMinOpera4=fOperaVersion >= 4; isMinOpera5=fOperaVersion >= 5; isMinOpera6=fOperaVersion >= 6; isMinOpera7=fOperaVersion >= 7; isMinOpera7_5=fOperaVersion >= 7.5; } var isKHTML=sUserAgent.indexOf("KHTML") > -1 || sUserAgent.indexOf("Konqueror") > -1 || sUserAgent.indexOf("AppleWebKit") > -1; var isMinSafari1=isMinSafari1_2=false; var isMinKonq2_2=isMinKonq3=isMinKonq3_1=isMinKonq3_2=false; if (isKHTML) { isSafari=sUserAgent.indexOf("AppleWebKit") > -1; isKonq=sUserAgent.indexOf("Konqueror") > -1; if (isSafari) { var reAppleWebKit=new RegExp("AppleWebKit\\/(\\d+(?:\\.\\d*)?)"); reAppleWebKit.test(sUserAgent); var fAppleWebKitVersion=parseFloat(RegExp["$1"]); isMinSafari1=fAppleWebKitVersion >= 85; isMinSafari1_2=fAppleWebKitVersion >= 124; } else if (isKonq) { var reKonq=new RegExp("Konqueror\\/(\\d+(?:\\.\\d+(?:\\.\\d)?)?)"); reKonq.test(sUserAgent); isMinKonq2_2=compareVersions(RegExp["$1"], "2.2") >= 0; isMinKonq3=compareVersions(RegExp["$1"], "3.0") >= 0; isMinKonq3_1=compareVersions(RegExp["$1"], "3.1") >= 0; isMinKonq3_2=compareVersions(RegExp["$1"], "3.2") >= 0; } } var isIE=sUserAgent.indexOf("compatible") > -1 && sUserAgent.indexOf("MSIE") > -1 && !isOpera; var isMinIE4=isMinIE5=isMinIE5_5=isMinIE6=false; var fIEVersion; if (isIE) { var reIE=new RegExp("MSIE (\\d+\\.\\d+);"); reIE.test(sUserAgent); fIEVersion=parseFloat(RegExp["$1"]); isMinIE4=fIEVersion >= 4; isMinIE5=fIEVersion >= 5; isMinIE5_5=fIEVersion >= 5.5; isMinIE6=fIEVersion >= 6.0; } var isMoz=sUserAgent.indexOf("Gecko") > -1 && !isKHTML; var isMinMoz1=sMinMoz1_4=isMinMoz1_5=false; if (isMoz) { var reMoz=new RegExp("rv:(\\d+\\.\\d+(?:\\.\\d+)?)"); reMoz.test(sUserAgent); isMinMoz1=compareVersions(RegExp["$1"], "1.0") >= 0; isMinMoz1_4=compareVersions(RegExp["$1"], "1.4") >= 0; isMinMoz1_5=compareVersions(RegExp["$1"], "1.5") >= 0; } var isNS4=!isIE && !isOpera && !isMoz && !isKHTML && (sUserAgent.indexOf("Mozilla") == 0) && (navigator.appName == "Netscape") && (fAppVersion >= 4.0 && fAppVersion < 5.0); var isMinNS4=isMinNS4_5=isMinNS4_7=isMinNS4_8=false; if (isNS4) { isMinNS4=true; isMinNS4_5=fAppVersion >= 4.5; isMinNS4_7=fAppVersion >= 4.7; isMinNS4_8=fAppVersion >= 4.8; } var isWin=(navigator.platform == "Win32") || (navigator.platform == "Windows"); var isMac=(navigator.platform == "Mac68K") || (navigator.platform == "MacPPC") || (navigator.platform == "Macintosh"); var isUnix=(navigator.platform == "X11") && !isWin && !isMac; var isWin95=isWin98=isWinNT4=isWin2K=isWinME=isWinXP=false; var isMac68K=isMacPPC=false; var isSunOS=isMinSunOS4=isMinSunOS5=isMinSunOS5_5=false; if (isWin) { isWin95=sUserAgent.indexOf("Win95") > -1 || sUserAgent.indexOf("Windows 95") > -1; isWin98=sUserAgent.indexOf("Win98") > -1 || sUserAgent.indexOf("Windows 98") > -1; isWinME=sUserAgent.indexOf("Win 9x 4.90") > -1 || sUserAgent.indexOf("Windows ME") > -1; isWin2K=sUserAgent.indexOf("Windows NT 5.0") > -1 || sUserAgent.indexOf("Windows 2000") > -1; isWinXP=sUserAgent.indexOf("Windows NT 5.1") > -1 || sUserAgent.indexOf("Windows XP") > -1; isWinNT4=sUserAgent.indexOf("WinNT") > -1 || sUserAgent.indexOf("Windows NT") > -1 || sUserAgent.indexOf("WinNT4.0") > -1 || sUserAgent.indexOf("Windows NT 4.0") > -1 && (!isWinME && !isWin2K && !isWinXP); } if (isMac) { isMac68K=sUserAgent.indexOf("Mac_68000") > -1 || sUserAgent.indexOf("68K") > -1; isMacPPC=sUserAgent.indexOf("Mac_PowerPC") > -1 || sUserAgent.indexOf("PPC") > -1; } if (isUnix) { isSunOS=sUserAgent.indexOf("SunOS") > -1; if (isSunOS) { var reSunOS=new RegExp("SunOS (\\d+\\.\\d+(?:\\.\\d+)?)"); reSunOS.test(sUserAgent); isMinSunOS4=compareVersions(RegExp["$1"], "4.0") >= 0; isMinSunOS5=compareVersions(RegExp["$1"], "5.0") >= 0; isMinSunOS5_5=compareVersions(RegExp["$1"], "5.5") >= 0; } } var EventUtil=new Object; EventUtil.addEventHandler=function (oTarget, sEventType, fnHandler) { if (oTarget.addEventListener) { oTarget.addEventListener(sEventType, fnHandler, false); } else if (oTarget.attachEvent) { oTarget.attachEvent("on" + sEventType, fnHandler); } else { oTarget["on" + sEventType]=fnHandler; } }; EventUtil.removeEventHandler=function (oTarget, sEventType, fnHandler) { if (oTarget.removeEventListener) { oTarget.removeEventListener(sEventType, fnHandler, false); } else if (oTarget.detachEvent) { oTarget.detachEvent("on" + sEventType, fnHandler); } else { oTarget["on" + sEventType]=null; } }; EventUtil.formatEvent=function (oEvent) { if (isIE && isWin) { oEvent.charCode=(oEvent.type == "keypress") ? oEvent.keyCode : 0; oEvent.eventPhase=2; oEvent.isChar=(oEvent.charCode > 0); oEvent.pageX=oEvent.clientX + document.body.scrollLeft; oEvent.pageY=oEvent.clientY + document.body.scrollTop; oEvent.preventDefault=function () { this.returnValue=false; }; if (oEvent.type == "mouseout") { oEvent.relatedTarget=oEvent.toElement; } else if (oEvent.type == "mouseover") { oEvent.relatedTarget=oEvent.fromElement; } oEvent.stopPropagation=function () { this.cancelBubble=true; }; oEvent.target=oEvent.srcElement; oEvent.time=(new Date).getTime(); } return oEvent; }; EventUtil.getEvent=function() { if (window.event) { return this.formatEvent(window.event); } else { return EventUtil.getEvent.caller.arguments[0]; } }; var feature=''; var module=''; var method=''; var Enrich=0; var S_Initialized=0; var Educator_username; var Educator_instructorId; var Educator_courseId; var Educator_typeOfUser; var EnrichWPS_resourceId; var EnrichWPS_writeAccess; var EnrichWPS_websiteId; var pilotFishGateway='http://pilotfish.ucompass.com'; var URLSPLIT=document.location.toString().split(":"); var http=URLSPLIT[0]; if((http=='https') || (http=='HTTPS')) { pilotFishGateway='https://pilotfish.ucompass.com'; } var haloColor1='#5192C5'; var haloColor2='#CDF1F1'; function GlobalInit() { var bodyTag=document.getElementsByTagName('body').item(0); if(bodyTag) { var headTag=document.getElementsByTagName('head').item(0); if(headTag) { var styleElement=document.createElement('link'); var cssQuery=''; if(isIE) { cssQuery='?type=ie'; } styleElement.setAttribute('href',pilotFishGateway+'/getcss'+cssQuery); styleElement.setAttribute('rel','stylesheet'); styleElement.setAttribute('type','text/css'); headTag.appendChild(styleElement); DoFunTags(); } clearInterval(InitializeInterval); } } var InitializeInterval=setInterval(GlobalInit,100); function addRoundedTop(e,fgColor) { var bgColor='#FFFFFF'; if(document.body.getAttribute('bgcolor')) { bgColor=document.body.getAttribute('bgcolor'); } else { bgColor='#FFFFFF'; } var d=document.createElement("b");; d.style.display='block'; d.style.backgroundColor=bgColor; for(var i=1;i<=4;i++) { var x=document.createElement("b"); x.style.display='block'; x.style.height='1px'; x.style.overflow='hidden'; if(i==1) { x.style.margin='0px 5px'; } else if(i==2) { x.style.margin='0px 3px'; } else if(i==3) { x.style.margin='0px 2px'; } else if(i==4) { x.style.margin='0px 1px'; x.style.height='2px'; } x.style.backgroundColor=fgColor; d.appendChild(x); } e.insertBefore(d,e.firstChild); } function createStringFromXml(thisXml) { var thisString=''; if(isIE) { thisString=thisXml.xml; } else { thisString=(new XMLSerializer()).serializeToString(thisXml); } return thisString; } function createXmlObject(thisStr) { var thisXml; if (typeof DOMParser == "undefined") { DOMParser=function () {} DOMParser.prototype.parseFromString=function (str, contentType) { if (typeof ActiveXObject != "undefined") { var d=new ActiveXObject("MSXML.DomDocument"); d.loadXML(str); return d; } else if (typeof XMLHttpRequest != "undefined") { var req=new XMLHttpRequest; req.open("GET", "data:" + (contentType || "application/xml") + ";charset=utf-8," + encodeURIComponent(str), false); if (req.overrideMimeType) { req.overrideMimeType(contentType); } req.send(null); return req.responseXML; } } var xo=new DOMParser(); thisXml=xo.parseFromString(thisStr,"text/xml"); } else { thisXml=(new DOMParser()).parseFromString(thisStr, "text/xml"); } return thisXml; } function debug(value) { var e=document.getElementById('debug'); if(!e) { e=document.createElement('p'); e.setAttribute('id','debug'); document.body.appendChild(e); } e.innerHTML+='

'+value; } function deleteCookie(sName, sPath, sDomain) { setCookie(sName, "", new Date(0), sPath, sDomain); } function determineAbsolutePosition(obj) { var curleft=curtop=0; if (obj.offsetParent) { curleft=obj.offsetLeft curtop=obj.offsetTop while (obj=obj.offsetParent) { curleft += obj.offsetLeft curtop += obj.offsetTop } } var returnObject=new Object(); returnObject['eL']=curleft; returnObject['eT']=curtop; return returnObject; } function getBrowserObject() { var browserObject=new Object(); if (window.pageYOffset) { yOffset=window.pageYOffset xOffset=window.pageXOffset browserObject.scrollTop=yOffset; browserObject.scrollLeft=xOffset; } else if (document.documentElement && document.documentElement.scrollTop) { browserObject.scrollTop=document.documentElement.scrollTop; browserObject.scrollLeft=document.documentElement.scrollLeft; } else if (document.body) { browserObject.scrollTop=document.body.scrollTop; browserObject.scrollLeft=document.body.scrollLeft; } if (window.innerWidth) { browserObject.clientWidth=window.innerWidth; browserObject.clientHeight=window.innerHeight; } else if (document.documentElement && document.documentElement.clientWidth) { browserObject.clientWidth=document.documentElement.clientWidth; browserObject.clientHeight=document.documentElement.clientHeight; } else if (document.body) { browserObject.clientWidth=document.body.clientWidth; browserObject.clientHeight=document.body.clientHeight; } return browserObject; } function getCookie(sName) { var sRE="(?:; )?" + sName + "=([^;]*);?"; var oRE=new RegExp(sRE); if(oRE.test(document.cookie)) { return decodeURIComponent(RegExp["$1"]); } else { return null; } } function getSelectedText() { var selectedText; if(isIE) { selectedText=document.selection.createRange().text; } else if((isMoz) || (isMinSafari1)) { selectedText=window.getSelection(); } else { selectedText=document.getSelection(); } return selectedText; } function getTextNode(node) { var textNode; try { textNode=node.childNodes[0].nodeValue; } catch(error) { } if(textNode==undefined) { textNode=''; } return textNode; } function removeAPIContent() { var myAPI=document.getElementById('myAPI'); while(myAPI.firstChild) { myAPI.removeChild(myAPI.firstChild); } } function setCookie(sName, sValue, oExpires, sPath, sDomain, bSecure) { if(!sValue) { sValue=0; } if(!sPath) { sPath="/"; } var sCookie=sName + "=" + encodeURIComponent(sValue); if(oExpires) { sCookie += "; expires=" + oExpires; } if(sPath) { sCookie += "; path=" + sPath; } if(sDomain) { sCookie += "; domain=" + sDomain; } if(bSecure) { sCookie += "; secure"; } document.cookie=sCookie; }var returnedXML=''; var w=this; var webServiceSending=0; var callbackFunction="webServiceResponseHandler();"; var queue=new Array(); function callWebService(sendQuery) { if((parent.frames.length) && (fIEVersion==6)) { return callAjax(sendQuery); } if(webServiceSending) { queue.push(sendQuery); } else { doWebService(sendQuery); } } function doWebService(query) { if(S_Initialized==1) { S_swapImage(document.getElementById('S_stopButton'),'stopButton.gif'); } webServiceSending=1; returnedXML=''; var scriptTag=document.getElementById('webService'); var headTag=document.getElementsByTagName('head').item(0); if(scriptTag) { headTag.removeChild(scriptTag); } scriptTag=document.createElement('script'); var xmlQuery=''; var normalQuery=''; var r=Math.floor(Math.random()*1000000000); query['noCache']=r; for(var i in query) { var sToChange=String(query[i]); var re=/\;/g; var changed=sToChange.replace(re,"0x3B"); query[i]=changed; xmlQuery+='<'+i+'>'; var encodedQ=encodeURIComponent(query[i]); normalQuery+=i+'='+encodedQ+'&'; } xmlQuery+=''; xmlQuery=encodeURIComponent(xmlQuery); var url=pilotFishGateway+'/ws.pl?'+xmlQuery; if(query['makeSecure']) { url=url.replace('http','https'); } scriptTag.setAttribute("type","text/javascript"); scriptTag.setAttribute("src",url); scriptTag.setAttribute("id","webService"); headTag.appendChild(scriptTag); if (isIE) { if(scriptTag.readyState == "loaded") { eval(callbackFunction); scriptTag.onreadystatechange=null; } else { scriptTag.onreadystatechange=reCheck; } } else { eval(callbackFunction); } } function reCheck() { var scriptTag=document.getElementById('webService'); if(scriptTag.readyState=="loaded") { eval(callbackFunction); scriptTag.onreadystatechange=null; } } function webServiceResponseHandler() { if(returnedXML=='') { setTimeout("webServiceResponseHandler()",100); } else { if(webServiceSending == 1) { var xmlObject=createXmlObject(returnedXML); webServiceSending=0; if(xmlObject.childNodes[0]) { var myAtt=xmlObject.childNodes[0].getAttribute('feature'); var myHandler=xmlObject.childNodes[0].getAttribute('handler'); if(myHandler) { if(w[myHandler]) { w[myHandler](xmlObject); } } else if(myAtt) { if(w[myAtt+'_Event']) { S_swapImage(document.getElementById('S_stopButton'),'stopButtonLight.gif'); w[myAtt+'_Event'](xmlObject); } } } if(queue.length) { callWebService(queue[0]); queue.shift(); } } } } XPathParser.prototype=new Object(); XPathParser.prototype.constructor=XPathParser; XPathParser.superclass=Object.prototype; function XPathParser() { this.init(); } XPathParser.prototype.init=function() { this.reduceActions=[]; this.reduceActions[3]=function(rhs) { return new OrOperation(rhs[0], rhs[2]); }; this.reduceActions[5]=function(rhs) { return new AndOperation(rhs[0], rhs[2]); }; this.reduceActions[7]=function(rhs) { return new EqualsOperation(rhs[0], rhs[2]); }; this.reduceActions[8]=function(rhs) { return new NotEqualOperation(rhs[0], rhs[2]); }; this.reduceActions[10]=function(rhs) { return new LessThanOperation(rhs[0], rhs[2]); }; this.reduceActions[11]=function(rhs) { return new GreaterThanOperation(rhs[0], rhs[2]); }; this.reduceActions[12]=function(rhs) { return new LessThanOrEqualOperation(rhs[0], rhs[2]); }; this.reduceActions[13]=function(rhs) { return new GreaterThanOrEqualOperation(rhs[0], rhs[2]); }; this.reduceActions[15]=function(rhs) { return new PlusOperation(rhs[0], rhs[2]); }; this.reduceActions[16]=function(rhs) { return new MinusOperation(rhs[0], rhs[2]); }; this.reduceActions[18]=function(rhs) { return new MultiplyOperation(rhs[0], rhs[2]); }; this.reduceActions[19]=function(rhs) { return new DivOperation(rhs[0], rhs[2]); }; this.reduceActions[20]=function(rhs) { return new ModOperation(rhs[0], rhs[2]); }; this.reduceActions[22]=function(rhs) { return new UnaryMinusOperation(rhs[1]); }; this.reduceActions[24]=function(rhs) { return new BarOperation(rhs[0], rhs[2]); }; this.reduceActions[25]=function(rhs) { return new PathExpr(undefined, undefined, rhs[0]); }; this.reduceActions[27]=function(rhs) { rhs[0].locationPath=rhs[2]; return rhs[0]; }; this.reduceActions[28]=function(rhs) { rhs[0].locationPath=rhs[2]; rhs[0].locationPath.steps.unshift(new Step(Step.DESCENDANTORSELF, new NodeTest(NodeTest.NODE, undefined), [])); return rhs[0]; }; this.reduceActions[29]=function(rhs) { return new PathExpr(rhs[0], [], undefined); }; this.reduceActions[30]=function(rhs) { if (Utilities.instance_of(rhs[0], PathExpr)) { if (rhs[0].filterPredicates == undefined) { rhs[0].filterPredicates=[]; } rhs[0].filterPredicates.push(rhs[1]); return rhs[0]; } else { return new PathExpr(rhs[0], [rhs[1]], undefined); } }; this.reduceActions[32]=function(rhs) { return rhs[1]; }; this.reduceActions[33]=function(rhs) { return new XString(rhs[0]); }; this.reduceActions[34]=function(rhs) { return new XNumber(rhs[0]); }; this.reduceActions[36]=function(rhs) { return new FunctionCall(rhs[0], []); }; this.reduceActions[37]=function(rhs) { return new FunctionCall(rhs[0], rhs[2]); }; this.reduceActions[38]=function(rhs) { return [ rhs[0] ]; }; this.reduceActions[39]=function(rhs) { rhs[2].unshift(rhs[0]); return rhs[2]; }; this.reduceActions[43]=function(rhs) { return new LocationPath(true, []); }; this.reduceActions[44]=function(rhs) { rhs[1].absolute=true; return rhs[1]; }; this.reduceActions[46]=function(rhs) { return new LocationPath(false, [ rhs[0] ]); }; this.reduceActions[47]=function(rhs) { rhs[0].steps.push(rhs[2]); return rhs[0]; }; this.reduceActions[49]=function(rhs) { return new Step(rhs[0], rhs[1], []); }; this.reduceActions[50]=function(rhs) { return new Step(Step.CHILD, rhs[0], []); }; this.reduceActions[51]=function(rhs) { return new Step(rhs[0], rhs[1], rhs[2]); }; this.reduceActions[52]=function(rhs) { return new Step(Step.CHILD, rhs[0], rhs[1]); }; this.reduceActions[54]=function(rhs) { return [ rhs[0] ]; }; this.reduceActions[55]=function(rhs) { rhs[1].unshift(rhs[0]); return rhs[1]; }; this.reduceActions[56]=function(rhs) { if (rhs[0] == "ancestor") { return Step.ANCESTOR; } else if (rhs[0] == "ancestor-or-self") { return Step.ANCESTORORSELF; } else if (rhs[0] == "attribute") { return Step.ATTRIBUTE; } else if (rhs[0] == "child") { return Step.CHILD; } else if (rhs[0] == "descendant") { return Step.DESCENDANT; } else if (rhs[0] == "descendant-or-self") { return Step.DESCENDANTORSELF; } else if (rhs[0] == "following") { return Step.FOLLOWING; } else if (rhs[0] == "following-sibling") { return Step.FOLLOWINGSIBLING; } else if (rhs[0] == "namespace") { return Step.NAMESPACE; } else if (rhs[0] == "parent") { return Step.PARENT; } else if (rhs[0] == "preceding") { return Step.PRECEDING; } else if (rhs[0] == "preceding-sibling") { return Step.PRECEDINGSIBLING; } else if (rhs[0] == "self") { return Step.SELF; } return -1; }; this.reduceActions[57]=function(rhs) { return Step.ATTRIBUTE; }; this.reduceActions[59]=function(rhs) { if (rhs[0] == "comment") { return new NodeTest(NodeTest.COMMENT, undefined); } else if (rhs[0] == "text") { return new NodeTest(NodeTest.TEXT, undefined); } else if (rhs[0] == "processing-instruction") { return new NodeTest(NodeTest.PI, undefined); } else if (rhs[0] == "node") { return new NodeTest(NodeTest.NODE, undefined); } return new NodeTest(-1, undefined); }; this.reduceActions[60]=function(rhs) { return new NodeTest(NodeTest.PI, rhs[2]); }; this.reduceActions[61]=function(rhs) { return rhs[1]; }; this.reduceActions[63]=function(rhs) { rhs[1].absolute=true; rhs[1].steps.unshift(new Step(Step.DESCENDANTORSELF, new NodeTest(NodeTest.NODE, undefined), [])); return rhs[1]; }; this.reduceActions[64]=function(rhs) { rhs[0].steps.push(new Step(Step.DESCENDANTORSELF, new NodeTest(NodeTest.NODE, undefined), [])); rhs[0].steps.push(rhs[2]); return rhs[0]; }; this.reduceActions[65]=function(rhs) { return new Step(Step.SELF, new NodeTest(NodeTest.NODE, undefined), []); }; this.reduceActions[66]=function(rhs) { return new Step(Step.PARENT, new NodeTest(NodeTest.NODE, undefined), []); }; this.reduceActions[67]=function(rhs) { return new VariableReference(rhs[1]); }; this.reduceActions[68]=function(rhs) { return new NodeTest(NodeTest.NAMETESTANY, undefined); }; this.reduceActions[69]=function(rhs) { var prefix=rhs[0].substring(0, rhs[0].indexOf(":")); return new NodeTest(NodeTest.NAMETESTPREFIXANY, prefix); }; this.reduceActions[70]=function(rhs) { return new NodeTest(NodeTest.NAMETESTQNAME, rhs[0]); }; }; XPathParser.actionTable=[ " s s sssssssss s ss s ss", " s ", "r rrrrrrrrr rrrrrrr rr r ", " rrrrr ", " s s sssssssss s ss s ss", "rs rrrrrrrr s sssssrrrrrr rrs rs ", " s s sssssssss s ss s ss", " s ", " s ", "r rrrrrrrrr rrrrrrr rr rr ", "r rrrrrrrrr rrrrrrr rr rr ", "r rrrrrrrrr rrrrrrr rr rr ", "r rrrrrrrrr rrrrrrr rr rr ", "r rrrrrrrrr rrrrrrr rr rr ", " s ", " s ", " s s sssss s s ", "r rrrrrrrrr rrrrrrr rr r ", "a ", "r s rr r ", "r sr rr r ", "r s rr s rr r ", "r rssrr rss rr r ", "r rrrrr rrrss rr r ", "r rrrrrsss rrrrr rr r ", "r rrrrrrrr rrrrr rr r ", "r rrrrrrrr rrrrrs rr r ", "r rrrrrrrr rrrrrr rr r ", "r rrrrrrrr rrrrrr rr r ", "r srrrrrrrr rrrrrrs rr sr ", "r srrrrrrrr rrrrrrs rr r ", "r rrrrrrrrr rrrrrrr rr rr ", "r rrrrrrrrr rrrrrrr rr rr ", "r rrrrrrrrr rrrrrrr rr rr ", "r rrrrrrrr rrrrrr rr r ", "r rrrrrrrr rrrrrr rr r ", "r rrrrrrrrr rrrrrrr rr r ", "r rrrrrrrrr rrrrrrr rr r ", " sssss ", "r rrrrrrrrr rrrrrrr rr sr ", "r rrrrrrrrr rrrrrrr rr r ", "r rrrrrrrrr rrrrrrr rr rr ", "r rrrrrrrrr rrrrrrr rr rr ", " s ", "r srrrrrrrr rrrrrrs rr r ", "r rrrrrrrr rrrrr rr r ", " s ", " s ", " rrrrr ", " s s sssssssss s sss s ss", "r srrrrrrrr rrrrrrs rr r ", " s s sssssssss s ss s ss", " s s sssssssss s ss s ss", " s s sssssssss s ss s ss", " s s sssssssss s ss s ss", " s s sssssssss s ss s ss", " s s sssssssss s ss s ss", " s s sssssssss s ss s ss", " s s sssssssss s ss s ss", " s s sssssssss s ss s ss", " s s sssssssss s ss s ss", " s s sssssssss s ss s ss", " s s sssssssss s ss s ss", " s s sssssssss s ss s ss", " s s sssssssss ss s ss", " s s sssssssss s ss s ss", " s s sssss s s ", " s s sssss s s ", "r rrrrrrrrr rrrrrrr rr rr ", " s s sssss s s ", " s s sssss s s ", "r rrrrrrrrr rrrrrrr rr sr ", "r rrrrrrrrr rrrrrrr rr sr ", "r rrrrrrrrr rrrrrrr rr r ", "r rrrrrrrrr rrrrrrr rr rr ", " s ", "r rrrrrrrrr rrrrrrr rr rr ", "r rrrrrrrrr rrrrrrr rr rr ", " rr ", " s ", " rs ", "r sr rr r ", "r s rr s rr r ", "r rssrr rss rr r ", "r rssrr rss rr r ", "r rrrrr rrrss rr r ", "r rrrrr rrrss rr r ", "r rrrrr rrrss rr r ", "r rrrrr rrrss rr r ", "r rrrrrsss rrrrr rr r ", "r rrrrrsss rrrrr rr r ", "r rrrrrrrr rrrrr rr r ", "r rrrrrrrr rrrrr rr r ", "r rrrrrrrr rrrrr rr r ", "r rrrrrrrr rrrrrr rr r ", " r ", " s ", "r srrrrrrrr rrrrrrs rr r ", "r srrrrrrrr rrrrrrs rr r ", "r rrrrrrrrr rrrrrrr rr r ", "r rrrrrrrrr rrrrrrr rr r ", "r rrrrrrrrr rrrrrrr rr r ", "r rrrrrrrrr rrrrrrr rr r ", "r rrrrrrrrr rrrrrrr rr rr ", "r rrrrrrrrr rrrrrrr rr rr ", " s s sssssssss s ss s ss", "r rrrrrrrrr rrrrrrr rr rr ", " r " ]; XPathParser.actionTableNumber=[ " 1 0 /.-,+*)(' & %$ # \"!", " J ", "a aaaaaaaaa aaaaaaa aa a ", " YYYYY ", " 1 0 /.-,+*)(' & %$ # \"!", "K1 KKKKKKKK . +*)('KKKKKK KK# K\" ", " 1 0 /.-,+*)(' & %$ # \"!", " N ", " O ", "e eeeeeeeee eeeeeee ee ee ", "f fffffffff fffffff ff ff ", "d ddddddddd ddddddd dd dd ", "B BBBBBBBBB BBBBBBB BB BB ", "A AAAAAAAAA AAAAAAA AA AA ", " P ", " Q ", " 1 . +*)(' # \" ", "b bbbbbbbbb bbbbbbb bb b ", " ", "! S !! ! ", "\" T\" \"\" \" ", "$ V $$ U $$ $ ", "& &ZY&& &XW && & ", ") ))))) )))\\[ )) ) ", ". ....._^] ..... .. . ", "1 11111111 11111 11 1 ", "5 55555555 55555` 55 5 ", "7 77777777 777777 77 7 ", "9 99999999 999999 99 9 ", ": c:::::::: ::::::b :: a: ", "I fIIIIIIII IIIIIIe II I ", "= ========= ======= == == ", "? ????????? ??????? ?? ?? ", "C CCCCCCCCC CCCCCCC CC CC ", "J JJJJJJJJ JJJJJJ JJ J ", "M MMMMMMMM MMMMMM MM M ", "N NNNNNNNNN NNNNNNN NN N ", "P PPPPPPPPP PPPPPPP PP P ", " +*)(' ", "R RRRRRRRRR RRRRRRR RR aR ", "U UUUUUUUUU UUUUUUU UU U ", "Z ZZZZZZZZZ ZZZZZZZ ZZ ZZ ", "c ccccccccc ccccccc cc cc ", " j ", "L fLLLLLLLL LLLLLLe LL L ", "6 66666666 66666 66 6 ", " k ", " l ", " XXXXX ", " 1 0 /.-,+*)(' & %$m # \"!", "_ f________ ______e __ _ ", " 1 0 /.-,+*)(' & %$ # \"!", " 1 0 /.-,+*)(' & %$ # \"!", " 1 0 /.-,+*)(' & %$ # \"!", " 1 0 /.-,+*)(' & %$ # \"!", " 1 0 /.-,+*)(' & %$ # \"!", " 1 0 /.-,+*)(' & %$ # \"!", " 1 0 /.-,+*)(' & %$ # \"!", " 1 0 /.-,+*)(' & %$ # \"!", " 1 0 /.-,+*)(' & %$ # \"!", " 1 0 /.-,+*)(' & %$ # \"!", " 1 0 /.-,+*)(' & %$ # \"!", " 1 0 /.-,+*)(' & %$ # \"!", " 1 0 /.-,+*)(' & %$ # \"!", " 1 0 /.-,+*)(' %$ # \"!", " 1 0 /.-,+*)(' & %$ # \"!", " 1 . +*)(' # \" ", " 1 . +*)(' # \" ", "> >>>>>>>>> >>>>>>> >> >> ", " 1 . +*)(' # \" ", " 1 . +*)(' # \" ", "Q QQQQQQQQQ QQQQQQQ QQ aQ ", "V VVVVVVVVV VVVVVVV VV aV ", "T TTTTTTTTT TTTTTTT TT T ", "@ @@@@@@@@@ @@@@@@@ @@ @@ ", " \x87 ", "[ [[[[[[[[[ [[[[[[[ [[ [[ ", "D DDDDDDDDD DDDDDDD DD DD ", " HH ", " \x88 ", " F\x89 ", "# T# ## # ", "% V %% U %% % ", "' 'ZY'' 'XW '' ' ", "( (ZY(( (XW (( ( ", "+ +++++ +++\\[ ++ + ", "* ***** ***\\[ ** * ", "- ----- ---\\[ -- - ", ", ,,,,, ,,,\\[ ,, , ", "0 00000_^] 00000 00 0 ", "/ /////_^] ///// // / ", "2 22222222 22222 22 2 ", "3 33333333 33333 33 3 ", "4 44444444 44444 44 4 ", "8 88888888 888888 88 8 ", " ^ ", " \x8a ", "; f;;;;;;;; ;;;;;;e ;; ; ", "< f<<<<<<<< <<<<<?@ AB CDEFGH IJ ", " ", " ", " ", "L456789:;<=>?@ AB CDEFGH IJ ", " M EFGH IJ ", " N;<=>?@ AB CDEFGH IJ ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " S EFGH IJ ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " e ", " ", " ", " ", " ", " ", " ", " ", " ", " h J ", " i j ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "o456789:;<=>?@ ABpqCDEFGH IJ ", " ", " r6789:;<=>?@ AB CDEFGH IJ ", " s789:;<=>?@ AB CDEFGH IJ ", " t89:;<=>?@ AB CDEFGH IJ ", " u89:;<=>?@ AB CDEFGH IJ ", " v9:;<=>?@ AB CDEFGH IJ ", " w9:;<=>?@ AB CDEFGH IJ ", " x9:;<=>?@ AB CDEFGH IJ ", " y9:;<=>?@ AB CDEFGH IJ ", " z:;<=>?@ AB CDEFGH IJ ", " {:;<=>?@ AB CDEFGH IJ ", " |;<=>?@ AB CDEFGH IJ ", " };<=>?@ AB CDEFGH IJ ", " ~;<=>?@ AB CDEFGH IJ ", " \x7f=>?@ AB CDEFGH IJ ", "\x80456789:;<=>?@ AB CDEFGH IJ\x81", " \x82 EFGH IJ ", " \x83 EFGH IJ ", " ", " \x84 GH IJ ", " \x85 GH IJ ", " i \x86 ", " i \x87 ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "o456789:;<=>?@ AB\x8cqCDEFGH IJ ", " ", " " ]; XPathParser.productions=[ [1, 1, 2], [2, 1, 3], [3, 1, 4], [3, 3, 3, -9, 4], [4, 1, 5], [4, 3, 4, -8, 5], [5, 1, 6], [5, 3, 5, -22, 6], [5, 3, 5, -5, 6], [6, 1, 7], [6, 3, 6, -23, 7], [6, 3, 6, -24, 7], [6, 3, 6, -6, 7], [6, 3, 6, -7, 7], [7, 1, 8], [7, 3, 7, -25, 8], [7, 3, 7, -26, 8], [8, 1, 9], [8, 3, 8, -12, 9], [8, 3, 8, -11, 9], [8, 3, 8, -10, 9], [9, 1, 10], [9, 2, -26, 9], [10, 1, 11], [10, 3, 10, -27, 11], [11, 1, 12], [11, 1, 13], [11, 3, 13, -28, 14], [11, 3, 13, -4, 14], [13, 1, 15], [13, 2, 13, 16], [15, 1, 17], [15, 3, -29, 2, -30], [15, 1, -15], [15, 1, -16], [15, 1, 18], [18, 3, -13, -29, -30], [18, 4, -13, -29, 19, -30], [19, 1, 20], [19, 3, 20, -31, 19], [20, 1, 2], [12, 1, 14], [12, 1, 21], [21, 1, -28], [21, 2, -28, 14], [21, 1, 22], [14, 1, 23], [14, 3, 14, -28, 23], [14, 1, 24], [23, 2, 25, 26], [23, 1, 26], [23, 3, 25, 26, 27], [23, 2, 26, 27], [23, 1, 28], [27, 1, 16], [27, 2, 16, 27], [25, 2, -14, -3], [25, 1, -32], [26, 1, 29], [26, 3, -20, -29, -30], [26, 4, -21, -29, -15, -30], [16, 3, -33, 30, -34], [30, 1, 2], [22, 2, -4, 14], [24, 3, 14, -4, 23], [28, 1, -35], [28, 1, -2], [17, 2, -36, -18], [29, 1, -17], [29, 1, -19], [29, 1, -18] ]; XPathParser.DOUBLEDOT=2; XPathParser.DOUBLECOLON=3; XPathParser.DOUBLESLASH=4; XPathParser.NOTEQUAL=5; XPathParser.LESSTHANOREQUAL=6; XPathParser.GREATERTHANOREQUAL=7; XPathParser.AND=8; XPathParser.OR=9; XPathParser.MOD=10; XPathParser.DIV=11; XPathParser.MULTIPLYOPERATOR=12; XPathParser.FUNCTIONNAME=13; XPathParser.AXISNAME=14; XPathParser.LITERAL=15; XPathParser.NUMBER=16; XPathParser.ASTERISKNAMETEST=17; XPathParser.QNAME=18; XPathParser.NCNAMECOLONASTERISK=19; XPathParser.NODETYPE=20; XPathParser.PROCESSINGINSTRUCTIONWITHLITERAL=21; XPathParser.EQUALS=22; XPathParser.LESSTHAN=23; XPathParser.GREATERTHAN=24; XPathParser.PLUS=25; XPathParser.MINUS=26; XPathParser.BAR=27; XPathParser.SLASH=28; XPathParser.LEFTPARENTHESIS=29; XPathParser.RIGHTPARENTHESIS=30; XPathParser.COMMA=31; XPathParser.AT=32; XPathParser.LEFTBRACKET=33; XPathParser.RIGHTBRACKET=34; XPathParser.DOT=35; XPathParser.DOLLAR=36; XPathParser.prototype.tokenize=function(s1) { var types=[]; var values=[]; var s=s1 + '\0'; var pos=0; var c=s.charAt(pos++); while (1) { while (c == ' ' || c == '\t' || c == '\r' || c == '\n') { c=s.charAt(pos++); } if (c == '\0' || pos >= s.length) { break; } if (c == '(') { types.push(XPathParser.LEFTPARENTHESIS); values.push(c); c=s.charAt(pos++); continue; } if (c == ')') { types.push(XPathParser.RIGHTPARENTHESIS); values.push(c); c=s.charAt(pos++); continue; } if (c == '[') { types.push(XPathParser.LEFTBRACKET); values.push(c); c=s.charAt(pos++); continue; } if (c == ']') { types.push(XPathParser.RIGHTBRACKET); values.push(c); c=s.charAt(pos++); continue; } if (c == '@') { types.push(XPathParser.AT); values.push(c); c=s.charAt(pos++); continue; } if (c == ',') { types.push(XPathParser.COMMA); values.push(c); c=s.charAt(pos++); continue; } if (c == '|') { types.push(XPathParser.BAR); values.push(c); c=s.charAt(pos++); continue; } if (c == '+') { types.push(XPathParser.PLUS); values.push(c); c=s.charAt(pos++); continue; } if (c == '-') { types.push(XPathParser.MINUS); values.push(c); c=s.charAt(pos++); continue; } if (c == '=') { types.push(XPathParser.EQUALS); values.push(c); c=s.charAt(pos++); continue; } if (c == '$') { types.push(XPathParser.DOLLAR); values.push(c); c=s.charAt(pos++); continue; } if (c == '.') { c=s.charAt(pos++); if (c == '.') { types.push(XPathParser.DOUBLEDOT); values.push(".."); c=s.charAt(pos++); continue; } if (c >= '0' && c <= '9') { var number="." + c; c=s.charAt(pos++); while (c >= '0' && c <= '9') { number += c; c=s.charAt(pos++); } types.push(XPathParser.NUMBER); values.push(number); continue; } types.push(XPathParser.DOT); values.push('.'); continue; } if (c == '\'' || c == '"') { var delimiter=c; var literal=""; while ((c=s.charAt(pos++)) != delimiter) { literal += c; } types.push(XPathParser.LITERAL); values.push(literal); c=s.charAt(pos++); continue; } if (c >= '0' && c <= '9') { var number=c; c=s.charAt(pos++); while (c >= '0' && c <= '9') { number += c; c=s.charAt(pos++); } if (c == '.') { if (s.charAt(pos) >= '0' && s.charAt(pos) <= '9') { number += c; number += s.charAt(pos++); c=s.charAt(pos++); while (c >= '0' && c <= '9') { number += c; c=s.charAt(pos++); } } } types.push(XPathParser.NUMBER); values.push(number); continue; } if (c == '*') { if (types.length > 0) { var last=types[types.length - 1]; if (last != XPathParser.AT && last != XPathParser.DOUBLECOLON && last != XPathParser.LEFTPARENTHESIS && last != XPathParser.LEFTBRACKET && last != XPathParser.AND && last != XPathParser.OR && last != XPathParser.MOD && last != XPathParser.DIV && last != XPathParser.MULTIPLYOPERATOR && last != XPathParser.SLASH && last != XPathParser.DOUBLESLASH && last != XPathParser.BAR && last != XPathParser.PLUS && last != XPathParser.MINUS && last != XPathParser.EQUALS && last != XPathParser.NOTEQUAL && last != XPathParser.LESSTHAN && last != XPathParser.LESSTHANOREQUAL && last != XPathParser.GREATERTHAN && last != XPathParser.GREATERTHANOREQUAL) { types.push(XPathParser.MULTIPLYOPERATOR); values.push(c); c=s.charAt(pos++); continue; } } types.push(XPathParser.ASTERISKNAMETEST); values.push(c); c=s.charAt(pos++); continue; } if (c == ':') { if (s.charAt(pos) == ':') { types.push(XPathParser.DOUBLECOLON); values.push("::"); pos++; c=s.charAt(pos++); continue; } } if (c == '/') { c=s.charAt(pos++); if (c == '/') { types.push(XPathParser.DOUBLESLASH); values.push("//"); c=s.charAt(pos++); continue; } types.push(XPathParser.SLASH); values.push('/'); continue; } if (c == '!') { if (s.charAt(pos) == '=') { types.push(XPathParser.NOTEQUAL); values.push("!="); pos++; c=s.charAt(pos++); continue; } } if (c == '<') { if (s.charAt(pos) == '=') { types.push(XPathParser.LESSTHANOREQUAL); values.push("<="); pos++; c=s.charAt(pos++); continue; } types.push(XPathParser.LESSTHAN); values.push('<'); c=s.charAt(pos++); continue; } if (c == '>') { if (s.charAt(pos) == '=') { types.push(XPathParser.GREATERTHANOREQUAL); values.push(">="); pos++; c=s.charAt(pos++); continue; } types.push(XPathParser.GREATERTHAN); values.push('>'); c=s.charAt(pos++); continue; } if (c == '_' || Utilities.isLetter(c.charCodeAt(0))) { var name=c; c=s.charAt(pos++); while (Utilities.isNCNameChar(c.charCodeAt(0))) { name += c; c=s.charAt(pos++); } if (types.length > 0) { var last=types[types.length - 1]; if (last != XPathParser.AT && last != XPathParser.DOUBLECOLON && last != XPathParser.LEFTPARENTHESIS && last != XPathParser.LEFTBRACKET && last != XPathParser.AND && last != XPathParser.OR && last != XPathParser.MOD && last != XPathParser.DIV && last != XPathParser.MULTIPLYOPERATOR && last != XPathParser.SLASH && last != XPathParser.DOUBLESLASH && last != XPathParser.BAR && last != XPathParser.PLUS && last != XPathParser.MINUS && last != XPathParser.EQUALS && last != XPathParser.NOTEQUAL && last != XPathParser.LESSTHAN && last != XPathParser.LESSTHANOREQUAL && last != XPathParser.GREATERTHAN && last != XPathParser.GREATERTHANOREQUAL) { if (name == "and") { types.push(XPathParser.AND); values.push(name); continue; } if (name == "or") { types.push(XPathParser.OR); values.push(name); continue; } if (name == "mod") { types.push(XPathParser.MOD); values.push(name); continue; } if (name == "div") { types.push(XPathParser.DIV); values.push(name); continue; } } } if (c == ':') { if (s.charAt(pos) == '*') { types.push(XPathParser.NCNAMECOLONASTERISK); values.push(name + ":*"); pos++; c=s.charAt(pos++); continue; } if (s.charAt(pos) == '_' || Utilities.isLetter(s.charCodeAt(pos))) { name += ':'; c=s.charAt(pos++); while (Utilities.isNCNameChar(c.charCodeAt(0))) { name += c; c=s.charAt(pos++); } if (c == '(') { types.push(XPathParser.FUNCTIONNAME); values.push(name); continue; } types.push(XPathParser.QNAME); values.push(name); continue; } if (s.charAt(pos) == ':') { types.push(XPathParser.AXISNAME); values.push(name); continue; } } if (c == '(') { if (name == "comment" || name == "text" || name == "node") { types.push(XPathParser.NODETYPE); values.push(name); continue; } if (name == "processing-instruction") { if (s.charAt(pos) == ')') { types.push(XPathParser.NODETYPE); } else { types.push(XPathParser.PROCESSINGINSTRUCTIONWITHLITERAL); } values.push(name); continue; } types.push(XPathParser.FUNCTIONNAME); values.push(name); continue; } types.push(XPathParser.QNAME); values.push(name); continue; } throw new Error("Unexpected character " + c); } types.push(1); values.push("[EOF]"); return [types, values]; }; XPathParser.SHIFT='s'; XPathParser.REDUCE='r'; XPathParser.ACCEPT='a'; XPathParser.prototype.parse=function(s) { var types; var values; var res=this.tokenize(s); if (res == undefined) { return undefined; } types=res[0]; values=res[1]; var tokenPos=0; var state=[]; var tokenType=[]; var tokenValue=[]; var s; var a; var t; state.push(0); tokenType.push(1); tokenValue.push("_S"); a=types[tokenPos]; t=values[tokenPos++]; while (1) { s=state[state.length - 1]; switch (XPathParser.actionTable[s].charAt(a - 1)) { case XPathParser.SHIFT: tokenType.push(-a); tokenValue.push(t); state.push(XPathParser.actionTableNumber[s].charCodeAt(a - 1) - 32); a=types[tokenPos]; t=values[tokenPos++]; break; case XPathParser.REDUCE: var num=XPathParser.productions[XPathParser.actionTableNumber[s].charCodeAt(a - 1) - 32][1]; var rhs=[]; for (var i=0; i < num; i++) { tokenType.pop(); rhs.unshift(tokenValue.pop()); state.pop(); } var s_=state[state.length - 1]; tokenType.push(XPathParser.productions[XPathParser.actionTableNumber[s].charCodeAt(a - 1) - 32][0]); if (this.reduceActions[XPathParser.actionTableNumber[s].charCodeAt(a - 1) - 32] == undefined) { tokenValue.push(rhs[0]); } else { tokenValue.push(this.reduceActions[XPathParser.actionTableNumber[s].charCodeAt(a - 1) - 32](rhs)); } state.push(XPathParser.gotoTable[s_].charCodeAt(XPathParser.productions[XPathParser.actionTableNumber[s].charCodeAt(a - 1) - 32][0] - 2) - 33); break; case XPathParser.ACCEPT: return new XPath(tokenValue.pop()); default: throw new Error("XPath parse error"); } } }; XPath.prototype=new Object(); XPath.prototype.constructor=XPath; XPath.superclass=Object.prototype; function XPath(e) { this.expression=e; } XPath.prototype.toString=function() { return this.expression.toString(); }; XPath.prototype.evaluate=function(c) { c.contextNode=c.expressionContextNode; c.contextSize=1; c.contextPosition=1; c.caseInsensitive=false; if (c.contextNode != null) { var doc=c.contextNode; if (doc.nodeType != 9 ) { doc=doc.ownerDocument; } try { c.caseInsensitive=doc.implementation.hasFeature("HTML", "2.0"); } catch (e) { c.caseInsensitive=true; } } return this.expression.evaluate(c); }; XPath.XML_NAMESPACE_URI="http://www.w3.org/XML/1998/namespace"; XPath.XMLNS_NAMESPACE_URI="http://www.w3.org/2000/xmlns/"; Expression.prototype=new Object(); Expression.prototype.constructor=Expression; Expression.superclass=Object.prototype; function Expression() { } Expression.prototype.init=function() { }; Expression.prototype.toString=function() { return ""; }; Expression.prototype.evaluate=function(c) { throw new Error("Could not evaluate expression."); }; UnaryOperation.prototype=new Expression(); UnaryOperation.prototype.constructor=UnaryOperation; UnaryOperation.superclass=Expression.prototype; function UnaryOperation(rhs) { if (arguments.length > 0) { this.init(rhs); } } UnaryOperation.prototype.init=function(rhs) { this.rhs=rhs; }; UnaryMinusOperation.prototype=new UnaryOperation(); UnaryMinusOperation.prototype.constructor=UnaryMinusOperation; UnaryMinusOperation.superclass=UnaryOperation.prototype; function UnaryMinusOperation(rhs) { if (arguments.length > 0) { this.init(rhs); } } UnaryMinusOperation.prototype.init=function(rhs) { UnaryMinusOperation.superclass.init.call(this, rhs); }; UnaryMinusOperation.prototype.evaluate=function(c) { return this.rhs.evaluate(c).number().negate(); }; UnaryMinusOperation.prototype.toString=function() { return "-" + this.rhs.toString(); }; BinaryOperation.prototype=new Expression(); BinaryOperation.prototype.constructor=BinaryOperation; BinaryOperation.superclass=Expression.prototype; function BinaryOperation(lhs, rhs) { if (arguments.length > 0) { this.init(lhs, rhs); } } BinaryOperation.prototype.init=function(lhs, rhs) { this.lhs=lhs; this.rhs=rhs; }; OrOperation.prototype=new BinaryOperation(); OrOperation.prototype.constructor=OrOperation; OrOperation.superclass=BinaryOperation.prototype; function OrOperation(lhs, rhs) { if (arguments.length > 0) { this.init(lhs, rhs); } } OrOperation.prototype.init=function(lhs, rhs) { OrOperation.superclass.init.call(this, lhs, rhs); }; OrOperation.prototype.toString=function() { return "(" + this.lhs.toString() + " or " + this.rhs.toString() + ")"; }; OrOperation.prototype.evaluate=function(c) { var b=this.lhs.evaluate(c).bool(); if (b.booleanValue()) { return b; } return this.rhs.evaluate(c).bool(); }; AndOperation.prototype=new BinaryOperation(); AndOperation.prototype.constructor=AndOperation; AndOperation.superclass=BinaryOperation.prototype; function AndOperation(lhs, rhs) { if (arguments.length > 0) { this.init(lhs, rhs); } } AndOperation.prototype.init=function(lhs, rhs) { AndOperation.superclass.init.call(this, lhs, rhs); }; AndOperation.prototype.toString=function() { return "(" + this.lhs.toString() + " and " + this.rhs.toString() + ")"; }; AndOperation.prototype.evaluate=function(c) { var b=this.lhs.evaluate(c).bool(); if (!b.booleanValue()) { return b; } return this.rhs.evaluate(c).bool(); }; EqualsOperation.prototype=new BinaryOperation(); EqualsOperation.prototype.constructor=EqualsOperation; EqualsOperation.superclass=BinaryOperation.prototype; function EqualsOperation(lhs, rhs) { if (arguments.length > 0) { this.init(lhs, rhs); } } EqualsOperation.prototype.init=function(lhs, rhs) { EqualsOperation.superclass.init.call(this, lhs, rhs); }; EqualsOperation.prototype.toString=function() { return "(" + this.lhs.toString() + "=" + this.rhs.toString() + ")"; }; EqualsOperation.prototype.evaluate=function(c) { return this.lhs.evaluate(c).equals(this.rhs.evaluate(c)); }; NotEqualOperation.prototype=new BinaryOperation(); NotEqualOperation.prototype.constructor=NotEqualOperation; NotEqualOperation.superclass=BinaryOperation.prototype; function NotEqualOperation(lhs, rhs) { if (arguments.length > 0) { this.init(lhs, rhs); } } NotEqualOperation.prototype.init=function(lhs, rhs) { NotEqualOperation.superclass.init.call(this, lhs, rhs); }; NotEqualOperation.prototype.toString=function() { return "(" + this.lhs.toString() + " != " + this.rhs.toString() + ")"; }; NotEqualOperation.prototype.evaluate=function(c) { return this.lhs.evaluate(c).notequal(this.rhs.evaluate(c)); }; LessThanOperation.prototype=new BinaryOperation(); LessThanOperation.prototype.constructor=LessThanOperation; LessThanOperation.superclass=BinaryOperation.prototype; function LessThanOperation(lhs, rhs) { if (arguments.length > 0) { this.init(lhs, rhs); } } LessThanOperation.prototype.init=function(lhs, rhs) { LessThanOperation.superclass.init.call(this, lhs, rhs); }; LessThanOperation.prototype.evaluate=function(c) { return this.lhs.evaluate(c).lessthan(this.rhs.evaluate(c)); }; LessThanOperation.prototype.toString=function() { return "(" + this.lhs.toString() + " < " + this.rhs.toString() + ")"; }; GreaterThanOperation.prototype=new BinaryOperation(); GreaterThanOperation.prototype.constructor=GreaterThanOperation; GreaterThanOperation.superclass=BinaryOperation.prototype; function GreaterThanOperation(lhs, rhs) { if (arguments.length > 0) { this.init(lhs, rhs); } } GreaterThanOperation.prototype.init=function(lhs, rhs) { GreaterThanOperation.superclass.init.call(this, lhs, rhs); }; GreaterThanOperation.prototype.evaluate=function(c) { return this.lhs.evaluate(c).greaterthan(this.rhs.evaluate(c)); }; GreaterThanOperation.prototype.toString=function() { return "(" + this.lhs.toString() + " > " + this.rhs.toString() + ")"; }; LessThanOrEqualOperation.prototype=new BinaryOperation(); LessThanOrEqualOperation.prototype.constructor=LessThanOrEqualOperation; LessThanOrEqualOperation.superclass=BinaryOperation.prototype; function LessThanOrEqualOperation(lhs, rhs) { if (arguments.length > 0) { this.init(lhs, rhs); } } LessThanOrEqualOperation.prototype.init=function(lhs, rhs) { LessThanOrEqualOperation.superclass.init.call(this, lhs, rhs); }; LessThanOrEqualOperation.prototype.evaluate=function(c) { return this.lhs.evaluate(c).lessthanorequal(this.rhs.evaluate(c)); }; LessThanOrEqualOperation.prototype.toString=function() { return "(" + this.lhs.toString() + " <= " + this.rhs.toString() + ")"; }; GreaterThanOrEqualOperation.prototype=new BinaryOperation(); GreaterThanOrEqualOperation.prototype.constructor=GreaterThanOrEqualOperation; GreaterThanOrEqualOperation.superclass=BinaryOperation.prototype; function GreaterThanOrEqualOperation(lhs, rhs) { if (arguments.length > 0) { this.init(lhs, rhs); } } GreaterThanOrEqualOperation.prototype.init=function(lhs, rhs) { GreaterThanOrEqualOperation.superclass.init.call(this, lhs, rhs); }; GreaterThanOrEqualOperation.prototype.evaluate=function(c) { return this.lhs.evaluate(c).greaterthanorequal(this.rhs.evaluate(c)); }; GreaterThanOrEqualOperation.prototype.toString=function() { return "(" + this.lhs.toString() + " >= " + this.rhs.toString() + ")"; }; PlusOperation.prototype=new BinaryOperation(); PlusOperation.prototype.constructor=PlusOperation; PlusOperation.superclass=BinaryOperation.prototype; function PlusOperation(lhs, rhs) { if (arguments.length > 0) { this.init(lhs, rhs); } } PlusOperation.prototype.init=function(lhs, rhs) { PlusOperation.superclass.init.call(this, lhs, rhs); }; PlusOperation.prototype.evaluate=function(c) { return this.lhs.evaluate(c).number().plus(this.rhs.evaluate(c).number()); }; PlusOperation.prototype.toString=function() { return "(" + this.lhs.toString() + " + " + this.rhs.toString() + ")"; }; MinusOperation.prototype=new BinaryOperation(); MinusOperation.prototype.constructor=MinusOperation; MinusOperation.superclass=BinaryOperation.prototype; function MinusOperation(lhs, rhs) { if (arguments.length > 0) { this.init(lhs, rhs); } } MinusOperation.prototype.init=function(lhs, rhs) { MinusOperation.superclass.init.call(this, lhs, rhs); }; MinusOperation.prototype.evaluate=function(c) { return this.lhs.evaluate(c).number().minus(this.rhs.evaluate(c).number()); }; MinusOperation.prototype.toString=function() { return "(" + this.lhs.toString() + " - " + this.rhs.toString() + ")"; }; MultiplyOperation.prototype=new BinaryOperation(); MultiplyOperation.prototype.constructor=MultiplyOperation; MultiplyOperation.superclass=BinaryOperation.prototype; function MultiplyOperation(lhs, rhs) { if (arguments.length > 0) { this.init(lhs, rhs); } } MultiplyOperation.prototype.init=function(lhs, rhs) { MultiplyOperation.superclass.init.call(this, lhs, rhs); }; MultiplyOperation.prototype.evaluate=function(c) { return this.lhs.evaluate(c).number().multiply(this.rhs.evaluate(c).number()); }; MultiplyOperation.prototype.toString=function() { return "(" + this.lhs.toString() + " * " + this.rhs.toString() + ")"; }; DivOperation.prototype=new BinaryOperation(); DivOperation.prototype.constructor=DivOperation; DivOperation.superclass=BinaryOperation.prototype; function DivOperation(lhs, rhs) { if (arguments.length > 0) { this.init(lhs, rhs); } } DivOperation.prototype.init=function(lhs, rhs) { DivOperation.superclass.init.call(this, lhs, rhs); }; DivOperation.prototype.evaluate=function(c) { return this.lhs.evaluate(c).number().div(this.rhs.evaluate(c).number()); }; DivOperation.prototype.toString=function() { return "(" + this.lhs.toString() + " div " + this.rhs.toString() + ")"; }; ModOperation.prototype=new BinaryOperation(); ModOperation.prototype.constructor=ModOperation; ModOperation.superclass=BinaryOperation.prototype; function ModOperation(lhs, rhs) { if (arguments.length > 0) { this.init(lhs, rhs); } } ModOperation.prototype.init=function(lhs, rhs) { ModOperation.superclass.init.call(this, lhs, rhs); }; ModOperation.prototype.evaluate=function(c) { return this.lhs.evaluate(c).number().mod(this.rhs.evaluate(c).number()); }; ModOperation.prototype.toString=function() { return "(" + this.lhs.toString() + " mod " + this.rhs.toString() + ")"; }; BarOperation.prototype=new BinaryOperation(); BarOperation.prototype.constructor=BarOperation; BarOperation.superclass=BinaryOperation.prototype; function BarOperation(lhs, rhs) { if (arguments.length > 0) { this.init(lhs, rhs); } } BarOperation.prototype.init=function(lhs, rhs) { BarOperation.superclass.init.call(this, lhs, rhs); }; BarOperation.prototype.evaluate=function(c) { return this.lhs.evaluate(c).nodeset().union(this.rhs.evaluate(c).nodeset()); }; BarOperation.prototype.toString=function() { return this.lhs.toString() + " | " + this.rhs.toString(); }; PathExpr.prototype=new Expression(); PathExpr.prototype.constructor=PathExpr; PathExpr.superclass=Expression.prototype; function PathExpr(filter, filterPreds, locpath) { if (arguments.length > 0) { this.init(filter, filterPreds, locpath); } } PathExpr.prototype.init=function(filter, filterPreds, locpath) { PathExpr.superclass.init.call(this); this.filter=filter; this.filterPredicates=filterPreds; this.locationPath=locpath; }; PathExpr.prototype.evaluate=function(c) { var nodes; var xpc=new XPathContext(); xpc.variableResolver=c.variableResolver; xpc.functionResolver=c.functionResolver; xpc.namespaceResolver=c.namespaceResolver; xpc.expressionContextNode=c.expressionContextNode; xpc.virtualRoot=c.virtualRoot; xpc.caseInsensitive=c.caseInsensitive; if (this.filter == null) { nodes=[ c.contextNode ]; } else { var ns=this.filter.evaluate(c); if (!Utilities.instance_of(ns, XNodeSet)) { if (this.filterPredicates != null && this.filterPredicates.length > 0 || this.locationPath != null) { throw new Error("Path expression filter must evaluate to a nodset if predicates or location path are used"); } return ns; } nodes=ns.toArray(); if (this.filterPredicates != null) { for (var j=0; j < this.filterPredicates.length; j++) { var pred=this.filterPredicates[j]; var newNodes=[]; xpc.contextSize=nodes.length; for (xpc.contextPosition=1; xpc.contextPosition <= xpc.contextSize; xpc.contextPosition++) { xpc.contextNode=nodes[xpc.contextPosition - 1]; if (this.predicateMatches(pred, xpc)) { newNodes.push(xpc.contextNode); } } nodes=newNodes; } } } if (this.locationPath != null) { if (this.locationPath.absolute) { if (nodes[0].nodeType != 9 ) { if (xpc.virtualRoot != null) { nodes=[ xpc.virtualRoot ]; } else { if (nodes[0].ownerDocument == null) { var n=nodes[0]; while (n.parentNode != null) { n=n.parentNode; } nodes=[ n ]; } else { nodes=[ nodes[0].ownerDocument ]; } } } else { nodes=[ nodes[0] ]; } } for (var i=0; i < this.locationPath.steps.length; i++) { var step=this.locationPath.steps[i]; var newNodes=[]; for (var j=0; j < nodes.length; j++) { xpc.contextNode=nodes[j]; switch (step.axis) { case Step.ANCESTOR: if (xpc.contextNode === xpc.virtualRoot) { break; } var m; if (xpc.contextNode.nodeType == 2 ) { m=this.getOwnerElement(xpc.contextNode); } else { m=xpc.contextNode.parentNode; } while (m != null) { if (step.nodeTest.matches(m, xpc)) { newNodes.push(m); } if (m === xpc.virtualRoot) { break; } m=m.parentNode; } break; case Step.ANCESTORORSELF: for (var m=xpc.contextNode; m != null; m=m.nodeType == 2 ? this.getOwnerElement(m) : m.parentNode) { if (step.nodeTest.matches(m, xpc)) { newNodes.push(m); } if (m === xpc.virtualRoot) { break; } } break; case Step.ATTRIBUTE: var nnm=xpc.contextNode.attributes; if (nnm != null) { for (var k=0; k < nnm.length; k++) { var m=nnm.item(k); if (step.nodeTest.matches(m, xpc)) { newNodes.push(m); } } } break; case Step.CHILD: for (var m=xpc.contextNode.firstChild; m != null; m=m.nextSibling) { if (step.nodeTest.matches(m, xpc)) { newNodes.push(m); } } break; case Step.DESCENDANT: var st=[ xpc.contextNode.firstChild ]; while (st.length > 0) { for (var m=st.pop(); m != null; ) { if (step.nodeTest.matches(m, xpc)) { newNodes.push(m); } if (m.firstChild != null) { st.push(m.nextSibling); m=m.firstChild; } else { m=m.nextSibling; } } } break; case Step.DESCENDANTORSELF: if (step.nodeTest.matches(xpc.contextNode, xpc)) { newNodes.push(xpc.contextNode); } var st=[ xpc.contextNode.firstChild ]; while (st.length > 0) { for (var m=st.pop(); m != null; ) { if (step.nodeTest.matches(m, xpc)) { newNodes.push(m); } if (m.firstChild != null) { st.push(m.nextSibling); m=m.firstChild; } else { m=m.nextSibling; } } } break; case Step.FOLLOWING: if (xpc.contextNode === xpc.virtualRoot) { break; } var st=[]; if (xpc.contextNode.firstChild != null) { st.unshift(xpc.contextNode.firstChild); } else { st.unshift(xpc.contextNode.nextSibling); } for (var m=xpc.contextNode.parentNode; m != null && m.nodeType != 9 && m !== xpc.virtualRoot; m=m.parentNode) { st.unshift(m.nextSibling); } do { for (var m=st.pop(); m != null; ) { if (step.nodeTest.matches(m, xpc)) { newNodes.push(m); } if (m.firstChild != null) { st.push(m.nextSibling); m=m.firstChild; } else { m=m.nextSibling; } } } while (st.length > 0); break; case Step.FOLLOWINGSIBLING: if (xpc.contextNode === xpc.virtualRoot) { break; } for (var m=xpc.contextNode.nextSibling; m != null; m=m.nextSibling) { if (step.nodeTest.matches(m, xpc)) { newNodes.push(m); } } break; case Step.NAMESPACE: var n={}; if (xpc.contextNode.nodeType == 1 ) { n["xml"]=XPath.XML_NAMESPACE_URI; n["xmlns"]=XPath.XMLNS_NAMESPACE_URI; for (var m=xpc.contextNode; m != null && m.nodeType == 1 ; m=m.parentNode) { for (var k=0; k < m.attributes.length; k++) { var attr=m.attributes.item(k); var nm=String(attr.name); if (nm == "xmlns") { if (n[""] == undefined) { n[""]=attr.value; } } else if (nm.length > 6 && nm.substring(0, 6) == "xmlns:") { var pre=nm.substring(6, nm.length); if (n[pre] == undefined) { n[pre]=attr.value; } } } } for (var pre in n) { var nsn=new NamespaceNode(pre, n[pre], xpc.contextNode); if (step.nodeTest.matches(nsn, xpc)) { newNodes.push(nsn); } } } break; case Step.PARENT: m=null; if (xpc.contextNode !== xpc.virtualRoot) { if (xpc.contextNode.nodeType == 2 ) { m=this.getOwnerElement(xpc.contextNode); } else { m=xpc.contextNode.parentNode; } } if (m != null && step.nodeTest.matches(m, xpc)) { newNodes.push(m); } break; case Step.PRECEDING: var st; if (xpc.virtualRoot != null) { st=[ xpc.virtualRoot ]; } else { st=xpc.contextNode.nodeType == 9 ? [ xpc.contextNode ] : [ xpc.contextNode.ownerDocument ]; } outer: while (st.length > 0) { for (var m=st.pop(); m != null; ) { if (m == xpc.contextNode) { break outer; } if (step.nodeTest.matches(m, xpc)) { newNodes.unshift(m); } if (m.firstChild != null) { st.push(m.nextSibling); m=m.firstChild; } else { m=m.nextSibling; } } } break; case Step.PRECEDINGSIBLING: if (xpc.contextNode === xpc.virtualRoot) { break; } for (var m=xpc.contextNode.previousSibling; m != null; m=m.previousSibling) { if (step.nodeTest.matches(m, xpc)) { newNodes.push(m); } } break; case Step.SELF: if (step.nodeTest.matches(xpc.contextNode, xpc)) { newNodes.push(xpc.contextNode); } break; default: } } nodes=newNodes; for (var j=0; j < step.predicates.length; j++) { var pred=step.predicates[j]; var newNodes=[]; xpc.contextSize=nodes.length; for (xpc.contextPosition=1; xpc.contextPosition <= xpc.contextSize; xpc.contextPosition++) { xpc.contextNode=nodes[xpc.contextPosition - 1]; if (this.predicateMatches(pred, xpc)) { newNodes.push(xpc.contextNode); } else { } } nodes=newNodes; } } } var ns=new XNodeSet(); ns.addArray(nodes); return ns; }; PathExpr.prototype.predicateMatches=function(pred, c) { var res=pred.evaluate(c); if (Utilities.instance_of(res, XNumber)) { return c.contextPosition == res.numberValue(); } return res.booleanValue(); }; PathExpr.prototype.toString=function() { if (this.filter != undefined) { var s=this.filter.toString(); if (Utilities.instance_of(this.filter, XString)) { s="'" + s + "'"; } if (this.filterPredicates != undefined) { for (var i=0; i < this.filterPredicates.length; i++) { s=s + "[" + this.filterPredicates[i].toString() + "]"; } } if (this.locationPath != undefined) { if (!this.locationPath.absolute) { s += "/"; } s += this.locationPath.toString(); } return s; } return this.locationPath.toString(); }; PathExpr.prototype.getOwnerElement=function(n) { if (n.ownerElement) { return n.ownerElement; } try { if (n.selectSingleNode) { return n.selectSingleNode(".."); } } catch (e) { } var doc=n.nodeType == 9 ? n : n.ownerDocument; var elts=doc.getElementsByTagName("*"); for (var i=0; i < elts.length; i++) { var elt=elts.item(i); var nnm=elt.attributes; for (var j=0; j < nnm.length; j++) { var an=nnm.item(j); if (an === n) { return elt; } } } return null; }; LocationPath.prototype=new Object(); LocationPath.prototype.constructor=LocationPath; LocationPath.superclass=Object.prototype; function LocationPath(abs, steps) { if (arguments.length > 0) { this.init(abs, steps); } } LocationPath.prototype.init=function(abs, steps) { this.absolute=abs; this.steps=steps; }; LocationPath.prototype.toString=function() { var s; if (this.absolute) { s="/"; } else { s=""; } for (var i=0; i < this.steps.length; i++) { if (i != 0) { s += "/"; } s += this.steps[i].toString(); } return s; }; Step.prototype=new Object(); Step.prototype.constructor=Step; Step.superclass=Object.prototype; function Step(axis, nodetest, preds) { if (arguments.length > 0) { this.init(axis, nodetest, preds); } } Step.prototype.init=function(axis, nodetest, preds) { this.axis=axis; this.nodeTest=nodetest; this.predicates=preds; }; Step.prototype.toString=function() { var s; switch (this.axis) { case Step.ANCESTOR: s="ancestor"; break; case Step.ANCESTORORSELF: s="ancestor-or-self"; break; case Step.ATTRIBUTE: s="attribute"; break; case Step.CHILD: s="child"; break; case Step.DESCENDANT: s="descendant"; break; case Step.DESCENDANTORSELF: s="descendant-or-self"; break; case Step.FOLLOWING: s="following"; break; case Step.FOLLOWINGSIBLING: s="following-sibling"; break; case Step.NAMESPACE: s="namespace"; break; case Step.PARENT: s="parent"; break; case Step.PRECEDING: s="preceding"; break; case Step.PRECEDINGSIBLING: s="preceding-sibling"; break; case Step.SELF: s="self"; break; } s += "::"; s += this.nodeTest.toString(); for (var i=0; i < this.predicates.length; i++) { s += "[" + this.predicates[i].toString() + "]"; } return s; }; Step.ANCESTOR=0; Step.ANCESTORORSELF=1; Step.ATTRIBUTE=2; Step.CHILD=3; Step.DESCENDANT=4; Step.DESCENDANTORSELF=5; Step.FOLLOWING=6; Step.FOLLOWINGSIBLING=7; Step.NAMESPACE=8; Step.PARENT=9; Step.PRECEDING=10; Step.PRECEDINGSIBLING=11; Step.SELF=12; NodeTest.prototype=new Object(); NodeTest.prototype.constructor=NodeTest; NodeTest.superclass=Object.prototype; function NodeTest(type, value) { if (arguments.length > 0) { this.init(type, value); } } NodeTest.prototype.init=function(type, value) { this.type=type; this.value=value; }; NodeTest.prototype.toString=function() { switch (this.type) { case NodeTest.NAMETESTANY: return "*"; case NodeTest.NAMETESTPREFIXANY: return this.value + ":*"; case NodeTest.NAMETESTRESOLVEDANY: return "{" + this.value + "}*"; case NodeTest.NAMETESTQNAME: return this.value; case NodeTest.NAMETESTRESOLVEDNAME: return "{" + this.namespaceURI + "}" + this.value; case NodeTest.COMMENT: return "comment()"; case NodeTest.TEXT: return "text()"; case NodeTest.PI: if (this.value != undefined) { return "processing-instruction(\"" + this.value + "\")"; } return "processing-instruction()"; case NodeTest.NODE: return "node()"; } return ""; }; NodeTest.prototype.matches=function(n, xpc) { switch (this.type) { case NodeTest.NAMETESTANY: if (n.nodeType == 2 || n.nodeType == 1 || n.nodeType == XPathNamespace.XPATH_NAMESPACE_NODE) { return true; } return false; case NodeTest.NAMETESTPREFIXANY: if ((n.nodeType == 2 || n.nodeType == 1 )) { var ns=xpc.namespaceResolver.getNamespace(this.value, xpc.expressionContextNode); if (ns == null) { throw new Error("Cannot resolve QName " + this.value); } return true; } return false; case NodeTest.NAMETESTQNAME: if (n.nodeType == 2 || n.nodeType == 1 || n.nodeType == XPathNamespace.XPATH_NAMESPACE_NODE) { var test=Utilities.resolveQName(this.value, xpc.namespaceResolver, xpc.expressionContextNode, false); if (test[0] == null) { throw new Error("Cannot resolve QName " + this.value); } test[0]=String(test[0]); test[1]=String(test[1]); if (test[0] == "") { test[0]=null; } var node=Utilities.resolveQName(n.nodeName, xpc.namespaceResolver, n, n.nodeType == 1 ); node[0]=String(node[0]); node[1]=String(node[1]); if (node[0] == "") { node[0]=null; } if (xpc.caseInsensitive) { return test[0] == node[0] && String(test[1]).toLowerCase() == String(node[1]).toLowerCase(); } return test[0] == node[0] && test[1] == node[1]; } return false; case NodeTest.COMMENT: return n.nodeType == 8 ; case NodeTest.TEXT: return n.nodeType == 3 || n.nodeType == 4 ; case NodeTest.PI: return n.nodeType == 7 && (this.value == null || n.nodeName == this.value); case NodeTest.NODE: return n.nodeType == 9 || n.nodeType == 1 || n.nodeType == 2 || n.nodeType == 3 || n.nodeType == 4 || n.nodeType == 8 || n.nodeType == 7 ; } return false; }; NodeTest.NAMETESTANY=0; NodeTest.NAMETESTPREFIXANY=1; NodeTest.NAMETESTQNAME=2; NodeTest.COMMENT=3; NodeTest.TEXT=4; NodeTest.PI=5; NodeTest.NODE=6; VariableReference.prototype=new Expression(); VariableReference.prototype.constructor=VariableReference; VariableReference.superclass=Expression.prototype; function VariableReference(v) { if (arguments.length > 0) { this.init(v); } } VariableReference.prototype.init=function(v) { this.variable=v; }; VariableReference.prototype.toString=function() { return "$" + this.variable; }; VariableReference.prototype.evaluate=function(c) { return c.variableResolver.getVariable(this.variable, c); }; FunctionCall.prototype=new Expression(); FunctionCall.prototype.constructor=FunctionCall; FunctionCall.superclass=Expression.prototype; function FunctionCall(fn, args) { if (arguments.length > 0) { this.init(fn, args); } } FunctionCall.prototype.init=function(fn, args) { this.functionName=fn; this.arguments=args; }; FunctionCall.prototype.toString=function() { var s=this.functionName + "("; for (var i=0; i < this.arguments.length; i++) { if (i > 0) { s += ", "; } s += this.arguments[i].toString(); } return s + ")"; }; FunctionCall.prototype.evaluate=function(c) { var f=c.functionResolver.getFunction(this.functionName, c); if (f == undefined) { throw new Error("Unknown function " + this.functionName); } var a=[c].concat(this.arguments); return f.apply(c.functionResolver.thisArg, a); }; XString.prototype=new Expression(); XString.prototype.constructor=XString; XString.superclass=Expression.prototype; function XString(s) { if (arguments.length > 0) { this.init(s); } } XString.prototype.init=function(s) { this.str=s; }; XString.prototype.toString=function() { return this.str; }; XString.prototype.evaluate=function(c) { return this; }; XString.prototype.string=function() { return this; }; XString.prototype.number=function() { return new XNumber(this.str); }; XString.prototype.bool=function() { return new XBoolean(this.str); }; XString.prototype.nodeset=function() { throw new Error("Cannot convert string to nodeset"); }; XString.prototype.stringValue=function() { return this.str; }; XString.prototype.numberValue=function() { return this.number().numberValue(); }; XString.prototype.booleanValue=function() { return this.bool().booleanValue(); }; XString.prototype.equals=function(r) { if (Utilities.instance_of(r, XBoolean)) { return this.bool().equals(r); } if (Utilities.instance_of(r, XNumber)) { return this.number().equals(r); } if (Utilities.instance_of(r, XNodeSet)) { return r.compareWithString(this, Operators.equals); } return new XBoolean(this.str == r.str); }; XString.prototype.notequal=function(r) { if (Utilities.instance_of(r, XBoolean)) { return this.bool().notequal(r); } if (Utilities.instance_of(r, XNumber)) { return this.number().notequal(r); } if (Utilities.instance_of(r, XNodeSet)) { return r.compareWithString(this, Operators.notequal); } return new XBoolean(this.str != r.str); }; XString.prototype.lessthan=function(r) { if (Utilities.instance_of(r, XNodeSet)) { return r.compareWithNumber(this.number(), Operators.greaterthanorequal); } return this.number().lessthan(r.number()); }; XString.prototype.greaterthan=function(r) { if (Utilities.instance_of(r, XNodeSet)) { return r.compareWithNumber(this.number(), Operators.lessthanorequal); } return this.number().greaterthan(r.number()); }; XString.prototype.lessthanorequal=function(r) { if (Utilities.instance_of(r, XNodeSet)) { return r.compareWithNumber(this.number(), Operators.greaterthan); } return this.number().lessthanorequal(r.number()); }; XString.prototype.greaterthanorequal=function(r) { if (Utilities.instance_of(r, XNodeSet)) { return r.compareWithNumber(this.number(), Operators.lessthan); } return this.number().greaterthanorequal(r.number()); }; XNumber.prototype=new Expression(); XNumber.prototype.constructor=XNumber; XNumber.superclass=Expression.prototype; function XNumber(n) { if (arguments.length > 0) { this.init(n); } } XNumber.prototype.init=function(n) { this.num=Number(n); }; XNumber.prototype.toString=function() { return this.num; }; XNumber.prototype.evaluate=function(c) { return this; }; XNumber.prototype.string=function() { return new XString(this.num); }; XNumber.prototype.number=function() { return this; }; XNumber.prototype.bool=function() { return new XBoolean(this.num); }; XNumber.prototype.nodeset=function() { throw new Error("Cannot convert number to nodeset"); }; XNumber.prototype.stringValue=function() { return this.string().stringValue(); }; XNumber.prototype.numberValue=function() { return this.num; }; XNumber.prototype.booleanValue=function() { return this.bool().booleanValue(); }; XNumber.prototype.negate=function() { return new XNumber(-this.num); }; XNumber.prototype.equals=function(r) { if (Utilities.instance_of(r, XBoolean)) { return this.bool().equals(r); } if (Utilities.instance_of(r, XString)) { return this.equals(r.number()); } if (Utilities.instance_of(r, XNodeSet)) { return r.compareWithNumber(this, Operators.equals); } return new XBoolean(this.num == r.num); }; XNumber.prototype.notequal=function(r) { if (Utilities.instance_of(r, XBoolean)) { return this.bool().notequal(r); } if (Utilities.instance_of(r, XString)) { return this.notequal(r.number()); } if (Utilities.instance_of(r, XNodeSet)) { return r.compareWithNumber(this, Operators.notequal); } return new XBoolean(this.num != r.num); }; XNumber.prototype.lessthan=function(r) { if (Utilities.instance_of(r, XNodeSet)) { return r.compareWithNumber(this, Operators.greaterthanorequal); } if (Utilities.instance_of(r, XBoolean) || Utilities.instance_of(r, XString)) { return this.lessthan(r.number()); } return new XBoolean(this.num < r.num); }; XNumber.prototype.greaterthan=function(r) { if (Utilities.instance_of(r, XNodeSet)) { return r.compareWithNumber(this, Operators.lessthanorequal); } if (Utilities.instance_of(r, XBoolean) || Utilities.instance_of(r, XString)) { return this.greaterthan(r.number()); } return new XBoolean(this.num > r.num); }; XNumber.prototype.lessthanorequal=function(r) { if (Utilities.instance_of(r, XNodeSet)) { return r.compareWithNumber(this, Operators.greaterthan); } if (Utilities.instance_of(r, XBoolean) || Utilities.instance_of(r, XString)) { return this.lessthanorequal(r.number()); } return new XBoolean(this.num <= r.num); }; XNumber.prototype.greaterthanorequal=function(r) { if (Utilities.instance_of(r, XNodeSet)) { return r.compareWithNumber(this, Operators.lessthan); } if (Utilities.instance_of(r, XBoolean) || Utilities.instance_of(r, XString)) { return this.greaterthanorequal(r.number()); } return new XBoolean(this.num >= r.num); }; XNumber.prototype.plus=function(r) { return new XNumber(this.num + r.num); }; XNumber.prototype.minus=function(r) { return new XNumber(this.num - r.num); }; XNumber.prototype.multiply=function(r) { return new XNumber(this.num * r.num); }; XNumber.prototype.div=function(r) { return new XNumber(this.num / r.num); }; XNumber.prototype.mod=function(r) { return new XNumber(this.num % r.num); }; XBoolean.prototype=new Expression(); XBoolean.prototype.constructor=XBoolean; XBoolean.superclass=Expression.prototype; function XBoolean(b) { if (arguments.length > 0) { this.init(b); } } XBoolean.prototype.init=function(b) { this.b=Boolean(b); }; XBoolean.prototype.toString=function() { return this.b.toString(); }; XBoolean.prototype.evaluate=function(c) { return this; }; XBoolean.prototype.string=function() { return new XString(this.b); }; XBoolean.prototype.number=function() { return new XNumber(this.b); }; XBoolean.prototype.bool=function() { return this; }; XBoolean.prototype.nodeset=function() { throw new Error("Cannot convert boolean to nodeset"); }; XBoolean.prototype.stringValue=function() { return this.string().stringValue(); }; XBoolean.prototype.numberValue=function() { return this.num().numberValue(); }; XBoolean.prototype.booleanValue=function() { return this.b; }; XBoolean.prototype.not=function() { return new XBoolean(!this.b); }; XBoolean.prototype.equals=function(r) { if (Utilities.instance_of(r, XString) || Utilities.instance_of(r, XNumber)) { return this.equals(r.bool()); } if (Utilities.instance_of(r, XNodeSet)) { return r.compareWithBoolean(this, Operators.equals); } return new XBoolean(this.b == r.b); }; XBoolean.prototype.notequal=function(r) { if (Utilities.instance_of(r, XString) || Utilities.instance_of(r, XNumber)) { return this.notequal(r.bool()); } if (Utilities.instance_of(r, XNodeSet)) { return r.compareWithBoolean(this, Operators.notequal); } return new XBoolean(this.b != r.b); }; XBoolean.prototype.lessthan=function(r) { if (Utilities.instance_of(r, XNodeSet)) { return r.compareWithNumber(this.number(), Operators.greaterthanorequal); } return this.number().lessthan(r.number()); }; XBoolean.prototype.greaterthan=function(r) { if (Utilities.instance_of(r, XNodeSet)) { return r.compareWithNumber(this.number(), Operators.lessthanorequal); } return this.number().greaterthan(r.number()); }; XBoolean.prototype.lessthanorequal=function(r) { if (Utilities.instance_of(r, XNodeSet)) { return r.compareWithNumber(this.number(), Operators.greaterthan); } return this.number().lessthanorequal(r.number()); }; XBoolean.prototype.greaterthanorequal=function(r) { if (Utilities.instance_of(r, XNodeSet)) { return r.compareWithNumber(this.number(), Operators.lessthan); } return this.number().greaterthanorequal(r.number()); }; AVLTree.prototype=new Object(); AVLTree.prototype.constructor=AVLTree; AVLTree.superclass=Object.prototype; function AVLTree(n) { this.init(n); } AVLTree.prototype.init=function(n) { this.left=null; this.right=null; this.node=n; this.depth=1; }; AVLTree.prototype.balance=function() { var ldepth=this.left == null ? 0 : this.left.depth; var rdepth=this.right == null ? 0 : this.right.depth; if (ldepth > rdepth + 1) { var lldepth=this.left.left == null ? 0 : this.left.left.depth; var lrdepth=this.left.right == null ? 0 : this.left.right.depth; if (lldepth < lrdepth) { this.left.rotateRR(); } this.rotateLL(); } else if (ldepth + 1 < rdepth) { var rrdepth=this.right.right == null ? 0 : this.right.right.depth; var rldepth=this.right.left == null ? 0 : this.right.left.depth; if (rldepth > rrdepth) { this.right.rotateLL(); } this.rotateRR(); } }; AVLTree.prototype.rotateLL=function() { var nodeBefore=this.node; var rightBefore=this.right; this.node=this.left.node; this.right=this.left; this.left=this.left.left; this.right.left=this.right.right; this.right.right=rightBefore; this.right.node=nodeBefore; this.right.updateInNewLocation(); this.updateInNewLocation(); }; AVLTree.prototype.rotateRR=function() { var nodeBefore=this.node; var leftBefore=this.left; this.node=this.right.node; this.left=this.right; this.right=this.right.right; this.left.right=this.left.left; this.left.left=leftBefore; this.left.node=nodeBefore; this.left.updateInNewLocation(); this.updateInNewLocation(); }; AVLTree.prototype.updateInNewLocation=function() { this.getDepthFromChildren(); }; AVLTree.prototype.getDepthFromChildren=function() { this.depth=this.node == null ? 0 : 1; if (this.left != null) { this.depth=this.left.depth + 1; } if (this.right != null && this.depth <= this.right.depth) { this.depth=this.right.depth + 1; } }; AVLTree.prototype.order=function(n1, n2) { if (n1 === n2) { return 0; } var d1=0; var d2=0; for (var m1=n1; m1 != null; m1=m1.parentNode) { d1++; } for (var m2=n2; m2 != null; m2=m2.parentNode) { d2++; } if (d1 > d2) { while (d1 > d2) { n1=n1.parentNode; d1--; } if (n1 == n2) { return 1; } } else if (d2 > d1) { while (d2 > d1) { n2=n2.parentNode; d2--; } if (n1 == n2) { return -1; } } while (n1.parentNode != n2.parentNode) { n1=n1.parentNode; n2=n2.parentNode; } while (n1.previousSibling != null && n2.previousSibling != null) { n1=n1.previousSibling; n2=n2.previousSibling; } if (n1.previousSibling == null) { return -1; } return 1; }; AVLTree.prototype.add=function(n) { if (n === this.node) { return false; } var o=this.order(n, this.node); var ret=false; if (o == -1) { if (this.left == null) { this.left=new AVLTree(n); ret=true; } else { ret=this.left.add(n); if (ret) { this.balance(); } } } else if (o == 1) { if (this.right == null) { this.right=new AVLTree(n); ret=true; } else { ret=this.right.add(n); if (ret) { this.balance(); } } } if (ret) { this.getDepthFromChildren(); } return ret; }; XNodeSet.prototype=new Expression(); XNodeSet.prototype.constructor=XNodeSet; XNodeSet.superclass=Expression.prototype; function XNodeSet() { this.init(); } XNodeSet.prototype.init=function() { this.tree=null; this.size=0; }; XNodeSet.prototype.toString=function() { var p=this.first(); if (p == null) { return ""; } return this.stringForNode(p); }; XNodeSet.prototype.evaluate=function(c) { return this; }; XNodeSet.prototype.string=function() { return new XString(this.toString()); }; XNodeSet.prototype.stringValue=function() { return this.toString(); }; XNodeSet.prototype.number=function() { return new XNumber(this.string()); }; XNodeSet.prototype.numberValue=function() { return Number(this.string()); }; XNodeSet.prototype.bool=function() { return new XBoolean(this.tree != null); }; XNodeSet.prototype.booleanValue=function() { return this.tree != null; }; XNodeSet.prototype.nodeset=function() { return this; }; XNodeSet.prototype.stringForNode=function(n) { if (n.nodeType == 9 ) { n=n.documentElement; } if (n.nodeType == 1 ) { return this.stringForNodeRec(n); } if (n.isNamespaceNode) { return n.namespace; } return n.nodeValue; }; XNodeSet.prototype.stringForNodeRec=function(n) { var s=""; for (var n2=n.firstChild; n2 != null; n2=n2.nextSibling) { if (n2.nodeType == 3 ) { s += n2.nodeValue; } else if (n2.nodeType == 1 ) { s += this.stringForNodeRec(n2); } } return s; }; XNodeSet.prototype.first=function() { var p=this.tree; if (p == null) { return null; } while (p.left != null) { p=p.left; } return p.node; }; XNodeSet.prototype.add=function(n) { var added; if (this.tree == null) { this.tree=new AVLTree(n); added=true; } else { added=this.tree.add(n); } if (added) { this.size++; } }; XNodeSet.prototype.addArray=function(ns) { for (var i=0; i < ns.length; i++) { this.add(ns[i]); } }; XNodeSet.prototype.toArray=function() { var a=[]; this.toArrayRec(this.tree, a); return a; }; XNodeSet.prototype.toArrayRec=function(t, a) { if (t != null) { this.toArrayRec(t.left, a); a.push(t.node); this.toArrayRec(t.right, a); } }; XNodeSet.prototype.compareWithString=function(r, o) { var a=this.toArray(); for (var i=0; i < a.length; i++) { var n=a[i]; var l=new XString(this.stringForNode(n)); var res=o(l, r); if (res.booleanValue()) { return res; } } return new XBoolean(false); }; XNodeSet.prototype.compareWithNumber=function(r, o) { var a=this.toArray(); for (var i=0; i < a.length; i++) { var n=a[i]; var l=new XNumber(this.stringForNode(n)); var res=o(l, r); if (res.booleanValue()) { return res; } } return new XBoolean(false); }; XNodeSet.prototype.compareWithBoolean=function(r, o) { return o(this.bool(), r); }; XNodeSet.prototype.compareWithNodeSet=function(r, o) { var a=this.toArray(); for (var i=0; i < a.length; i++) { var n=a[i]; var l=new XString(this.stringForNode(n)); var b=r.toArray(); for (var j=0; j < b.length; j++) { var n2=b[j]; var r=new XString(this.stringForNode(n2)); var res=o(l, r); if (res.booleanValue()) { return res; } } } return new XBoolean(false); }; XNodeSet.prototype.equals=function(r) { if (Utilities.instance_of(r, XString)) { return this.compareWithString(r, Operators.equals); } if (Utilities.instance_of(r, XNumber)) { return this.compareWithNumber(r, Operators.equals); } if (Utilities.instance_of(r, XBoolean)) { return this.compareWithBoolean(r, Operators.equals); } return this.compareWithNodeSet(r, Operators.equals); }; XNodeSet.prototype.notequal=function(r) { if (Utilities.instance_of(r, XString)) { return this.compareWithString(r, Operators.notequal); } if (Utilities.instance_of(r, XNumber)) { return this.compareWithNumber(r, Operators.notequal); } if (Utilities.instance_of(r, XBoolean)) { return this.compareWithBoolean(r, Operators.notequal); } return this.compareWithNodeSet(r, Operators.notequal); }; XNodeSet.prototype.lessthan=function(r) { if (Utilities.instance_of(r, XString)) { return this.compareWithNumber(r.number(), Operators.lessthan); } if (Utilities.instance_of(r, XNumber)) { return this.compareWithNumber(r, Operators.lessthan); } if (Utilities.instance_of(r, XBoolean)) { return this.compareWithBoolean(r, Operators.lessthan); } return this.compareWithNodeSet(r, Operators.lessthan); }; XNodeSet.prototype.greaterthan=function(r) { if (Utilities.instance_of(r, XString)) { return this.compareWithNumber(r.number(), Operators.greaterthan); } if (Utilities.instance_of(r, XNumber)) { return this.compareWithNumber(r, Operators.greaterthan); } if (Utilities.instance_of(r, XBoolean)) { return this.compareWithBoolean(r, Operators.greaterthan); } return this.compareWithNodeSet(r, Operators.greaterthan); }; XNodeSet.prototype.lessthanorequal=function(r) { if (Utilities.instance_of(r, XString)) { return this.compareWithNumber(r.number(), Operators.lessthanorequal); } if (Utilities.instance_of(r, XNumber)) { return this.compareWithNumber(r, Operators.lessthanorequal); } if (Utilities.instance_of(r, XBoolean)) { return this.compareWithBoolean(r, Operators.lessthanorequal); } return this.compareWithNodeSet(r, Operators.lessthanorequal); }; XNodeSet.prototype.greaterthanorequal=function(r) { if (Utilities.instance_of(r, XString)) { return this.compareWithNumber(r.number(), Operators.greaterthanorequal); } if (Utilities.instance_of(r, XNumber)) { return this.compareWithNumber(r, Operators.greaterthanorequal); } if (Utilities.instance_of(r, XBoolean)) { return this.compareWithBoolean(r, Operators.greaterthanorequal); } return this.compareWithNodeSet(r, Operators.greaterthanorequal); }; XNodeSet.prototype.union=function(r) { var ns=new XNodeSet(); ns.tree=this.tree; ns.size=this.size; ns.addArray(r.toArray()); return ns; }; XPathNamespace.prototype=new Object(); XPathNamespace.prototype.constructor=XPathNamespace; XPathNamespace.superclass=Object.prototype; function XPathNamespace(pre, ns, p) { this.isXPathNamespace=true; this.ownerDocument=p.ownerDocument; this.nodeName="#namespace"; this.prefix=pre; this.localName=pre; this.namespaceURI=ns; this.nodeValue=ns; this.ownerElement=p; this.nodeType=XPathNamespace.XPATH_NAMESPACE_NODE; } XPathNamespace.prototype.toString=function() { return "{ \"" + this.prefix + "\", \"" + this.namespaceURI + "\" }"; }; var Operators=new Object(); Operators.equals=function(l, r) { return l.equals(r); }; Operators.notequal=function(l, r) { return l.notequal(r); }; Operators.lessthan=function(l, r) { return l.lessthan(r); }; Operators.greaterthan=function(l, r) { return l.greaterthan(r); }; Operators.lessthanorequal=function(l, r) { return l.lessthanorequal(r); }; Operators.greaterthanorequal=function(l, r) { return l.greaterthanorequal(r); }; XPathContext.prototype=new Object(); XPathContext.prototype.constructor=XPathContext; XPathContext.superclass=Object.prototype; function XPathContext(vr, nr, fr) { this.variableResolver=vr != null ? vr : new VariableResolver(); this.namespaceResolver=nr != null ? nr : new NamespaceResolver(); this.functionResolver=fr != null ? fr : new FunctionResolver(); } VariableResolver.prototype=new Object(); VariableResolver.prototype.constructor=VariableResolver; VariableResolver.superclass=Object.prototype; function VariableResolver() { } VariableResolver.prototype.getVariable=function(vn, c) { var parts=Utilities.splitQName(vn); if (parts[0] != null) { parts[0]=c.namespaceResolver.getNamespace(parts[0], c.expressionContextNode); if (parts[0] == null) { throw new Error("Cannot resolve QName " + fn); } } return this.getVariableWithName(parts[0], parts[1], c.expressionContextNode); }; VariableResolver.prototype.getVariableWithName=function(ns, ln, c) { return null; }; FunctionResolver.prototype=new Object(); FunctionResolver.prototype.constructor=FunctionResolver; FunctionResolver.superclass=Object.prototype; function FunctionResolver(thisArg) { this.thisArg=thisArg != null ? thisArg : Functions; this.functions=new Object(); this.addStandardFunctions(); } FunctionResolver.prototype.addStandardFunctions=function() { this.functions["{}last"]=Functions.last; this.functions["{}position"]=Functions.position; this.functions["{}count"]=Functions.count; this.functions["{}id"]=Functions.id; this.functions["{}local-name"]=Functions.localName; this.functions["{}namespace-uri"]=Functions.namespaceURI; this.functions["{}name"]=Functions.name; this.functions["{}string"]=Functions.string; this.functions["{}concat"]=Functions.concat; this.functions["{}starts-with"]=Functions.startsWith; this.functions["{}contains"]=Functions.contains; this.functions["{}substring-before"]=Functions.substringBefore; this.functions["{}substring-after"]=Functions.substringAfter; this.functions["{}substring"]=Functions.substring; this.functions["{}string-length"]=Functions.stringLength; this.functions["{}normalize-space"]=Functions.normalizeSpace; this.functions["{}translate"]=Functions.translate; this.functions["{}boolean"]=Functions.boolean_; this.functions["{}not"]=Functions.not; this.functions["{}true"]=Functions.true_; this.functions["{}false"]=Functions.false_; this.functions["{}lang"]=Functions.lang; this.functions["{}number"]=Functions.number; this.functions["{}sum"]=Functions.sum; this.functions["{}floor"]=Functions.floor; this.functions["{}ceiling"]=Functions.ceiling; this.functions["{}round"]=Functions.round; }; FunctionResolver.prototype.addFunction=function(ns, ln, f) { this.functions["{" + ns + "}" + ln]=f; }; FunctionResolver.prototype.getFunction=function(fn, c) { var parts=Utilities.resolveQName(fn, c.namespaceResolver, c.contextNode, false); if (parts[0] == null) { throw new Error("Cannot resolve QName " + fn); } return this.getFunctionWithName(parts[0], parts[1], c.contextNode); }; FunctionResolver.prototype.getFunctionWithName=function(ns, ln, c) { return this.functions["{" + ns + "}" + ln]; }; NamespaceResolver.prototype=new Object(); NamespaceResolver.prototype.constructor=NamespaceResolver; NamespaceResolver.superclass=Object.prototype; function NamespaceResolver() { } NamespaceResolver.prototype.getNamespace=function(prefix, n) { if (prefix == "xml") { return XPath.XML_NAMESPACE_URI; } else if (prefix == "xmlns") { return XPath.XMLNS_NAMESPACE_URI; } if (n.nodeType == 9 ) { n=n.documentElement; } else if (n.nodeType == 2 ) { n=PathExpr.prototype.getOwnerElement(n); } else if (n.nodeType != 1 ) { n=n.parentNode; } while (n != null && n.nodeType == 1 ) { var nnm=n.attributes; for (var i=0; i < nnm.length; i++) { var a=nnm.item(i); var aname=a.nodeName; if (aname == "xmlns" && prefix == "" || aname == "xmlns:" + prefix) { return String(a.nodeValue); } } n=n.parentNode; } return null; }; Functions=new Object(); Functions.last=function() { var c=arguments[0]; if (arguments.length != 1) { throw new Error("Function last expects ()"); } return new XNumber(c.contextSize); }; Functions.position=function() { var c=arguments[0]; if (arguments.length != 1) { throw new Error("Function position expects ()"); } return new XNumber(c.contextPosition); }; Functions.count=function() { var c=arguments[0]; var ns; if (arguments.length != 2 || !Utilities.instance_of(ns=arguments[1].evaluate(c), XNodeSet)) { throw new Error("Function count expects (node-set)"); } return new XNumber(ns.size); }; Functions.id=function() { var c=arguments[0]; var id; if (arguments.length != 2) { throw new Error("Function id expects (object)"); } id=arguments[1].evaluate(c); if (Utilities.instance_of(id, XNodeSet)) { id=id.toArray().join(" "); } else { id=id.stringValue(); } var ids=id.split(/[\x0d\x0a\x09\x20]+/); var count=0; var ns=new XNodeSet(); var doc=c.contextNode.nodeType == 9 ? c.contextNode : c.contextNode.ownerDocument; for (var i=0; i < ids.length; i++) { var n; if (doc.getElementById) { n=doc.getElementById(ids[i]); } else { n=Utilities.getElementById(doc, ids[i]); } if (n != null) { ns.add(n); count++; } } return ns; }; Functions.localName=function() { var c=arguments[0]; var n; if (arguments.length == 1) { n=c.contextNode; } else if (arguments.length == 2) { n=arguments[1].evaluate(c).first(); } else { throw new Error("Function local-name expects (node-set?)"); } if (n == null) { return new XString(""); } return new XString(n.localName ? n.localName : n.baseName); }; Functions.namespaceURI=function() { var c=arguments[0]; var n; if (arguments.length == 1) { n=c.contextNode; } else if (arguments.length == 2) { n=arguments[1].evaluate(c).first(); } else { throw new Error("Function namespace-uri expects (node-set?)"); } if (n == null) { return new XString(""); } return new XString(n.namespaceURI); }; Functions.name=function() { var c=arguments[0]; var n; if (arguments.length == 1) { n=c.contextNode; } else if (arguments.length == 2) { n=arguments[1].evaluate(c).first(); } else { throw new Error("Function name expects (node-set?)"); } if (n == null) { return new XString(""); } if (n.nodeType == 1 || n.nodeType == 2 ) { return new XString(n.nodeName); } else if (n.localName == null) { return new XString(""); } else { return new XString(n.localName); } }; Functions.string=function() { var c=arguments[0]; if (arguments.length == 1) { return XNodeSet.prototype.stringForNode(c.contextNode); } else if (arguments.length == 2) { return arguments[1].evaluate(c).string(); } throw new Error("Function string expects (object?)"); }; Functions.concat=function() { var c=arguments[0]; if (arguments.length < 3) { throw new Error("Function concat expects (string, string, string*)"); } var s=""; for (var i=1; i < arguments.length; i++) { s += arguments[i].evaluate(c).stringValue(); } return new XString(s); }; Functions.startsWith=function() { var c=arguments[0]; if (arguments.length != 3) { throw new Error("Function startsWith expects (string, string)"); } var s1=arguments[1].evaluate(c).stringValue(); var s2=arguments[2].evaluate(c).stringValue(); return new XBoolean(s1.substring(0, s2.length) == s2); }; Functions.contains=function() { var c=arguments[0]; if (arguments.length != 3) { throw new Error("Function contains expects (string, string)"); } var s1=arguments[1].evaluate(c).stringValue(); var s2=arguments[2].evaluate(c).stringValue(); return new XBoolean(s1.indexOf(s2) != -1); }; Functions.substringBefore=function() { var c=arguments[0]; if (arguments.length != 3) { throw new Error("Function substring-before expects (string, string)"); } var s1=arguments[1].evaluate(c).stringValue(); var s2=arguments[2].evaluate(c).stringValue(); return new XString(s1.substring(0, s1.indexOf(s2))); }; Functions.substringAfter=function() { var c=arguments[0]; if (arguments.length != 3) { throw new Error("Function substring-after expects (string, string)"); } var s1=arguments[1].evaluate(c).stringValue(); var s2=arguments[2].evaluate(c).stringValue(); if (s2.length == 0) { return new XString(s1); } var i=s1.indexOf(s2); if (i == -1) { return new XString(""); } return new XString(s1.substring(s1.indexOf(s2) + 1)); }; Functions.substring=function() { var c=arguments[0]; if (!(arguments.length == 3 || arguments.length == 4)) { throw new Error("Function substring expects (string, number, number?)"); } var s=arguments[1].evaluate(c).stringValue(); var n1=Math.round(arguments[2].evaluate(c).numberValue()) - 1; var n2=arguments.length == 4 ? n1 + Math.round(arguments[3].evaluate(c).numberValue()) : undefined; return new XString(s.substring(n1, n2)); }; Functions.stringLength=function() { var c=arguments[0]; var s; if (arguments.length == 1) { s=XNodeSet.prototype.stringForNode(c.contextNode); } else if (arguments.length == 2) { s=arguments[1].evaluate(c).stringValue(); } else { throw new Error("Function string-length expects (string?)"); } return new XNumber(s.length); }; Functions.normalizeSpace=function() { var c=arguments[0]; var s; if (arguments.length == 1) { s=XNodeSet.prototype.stringForNode(c.contextNode); } else if (arguments.length == 2) { s=arguments[1].evaluate(c).stringValue(); } else { throw new Error("Function normalize-space expects (string?)"); } var i=0; var j=s.length - 1; while (Utilities.isSpace(s.charCodeAt(j))) { j--; } var t=""; while (i <= j && Utilities.isSpace(s.charCodeAt(i))) { i++; } while (i <= j) { if (Utilities.isSpace(s.charCodeAt(i))) { t += " "; while (i <= j && Utilities.isSpace(s.charCodeAt(i))) { i++; } } else { t += s.charAt(i); i++; } } return new XString(t); }; Functions.translate=function() { var c=arguments[0]; if (arguments.length != 4) { throw new Error("Function translate expects (string, string, string)"); } var s1=arguments[1].evaluate(c).stringValue(); var s2=arguments[2].evaluate(c).stringValue(); var s3=arguments[3].evaluate(c).stringValue(); var map=[]; for (var i=0; i < s2.length; i++) { var j=s2.charCodeAt(i); if (map[j] == undefined) { var k=i > s3.length ? "" : s3.charAt(i); map[j]=k; } } var t=""; for (var i=0; i < s1.length; i++) { var c=s1.charCodeAt(i); var r=map[c]; if (r == undefined) { t += s1.charAt(i); } else { t += r; } } return new XString(t); }; Functions.boolean_=function() { var c=arguments[0]; if (arguments.length != 2) { throw new Error("Function boolean expects (object)"); } return arguments[1].evaluate(c).bool(); }; Functions.not=function() { var c=arguments[0]; if (arguments.length != 2) { throw new Error("Function not expects (object)"); } return arguments[1].evaluate(c).bool().not(); }; Functions.true_=function() { if (arguments.length != 1) { throw new Error("Function true expects ()"); } return new XBoolean(true); }; Functions.false_=function() { if (arguments.length != 1) { throw new Error("Function false expects ()"); } return new XBoolean(false); }; Functions.lang=function() { var c=arguments[0]; if (arguments.length != 2) { throw new Error("Function lang expects (string)"); } var lang; for (var n=c.contextNode; n != null && n.nodeType != 9 ; n=n.parentNode) { var a=n.getAttributeNS(XPath.XML_NAMESPACE_URI, "lang"); if (a != null) { lang=String(a); break; } } if (lang == null) { return new XBoolean(false); } var s=arguments[1].evaluate(c).stringValue(); return new XBoolean(lang.substring(0, s.length) == s && (lang.length == s.length || lang.charAt(s.length) == '-')); }; Functions.number=function() { var c=arguments[0]; if (!(arguments.length == 1 || arguments.length == 2)) { throw new Error("Function number expects (object?)"); } if (arguments.length == 1) { return new XNumber(XNodeSet.prototype.stringForNode(c.contextNode)); } return arguments[1].evaluate(c).number(); }; Functions.sum=function() { var c=arguments[0]; var ns; if (arguments.length != 2 || !Utilities.instance_of((ns=arguments[1].evaluate(c)), XNodeSet)) { throw new Error("Function sum expects (node-set)"); } ns=ns.toArray(); var n=0; for (var i=0; i < ns.length; i++) { n += new XNumber(XNodeSet.prototype.stringForNode(ns[i])).numberValue(); } return new XNumber(n); }; Functions.floor=function() { var c=arguments[0]; if (arguments.length != 2) { throw new Error("Function floor expects (number)"); } return new XNumber(Math.floor(arguments[1].evaluate(c).numberValue())); }; Functions.ceiling=function() { var c=arguments[0]; if (arguments.length != 2) { throw new Error("Function ceiling expects (number)"); } return new XNumber(Math.ceil(arguments[1].evaluate(c).numberValue())); }; Functions.round=function() { var c=arguments[0]; if (arguments.length != 2) { throw new Error("Function round expects (number)"); } return new XNumber(Math.round(arguments[1].evaluate(c).numberValue())); }; Utilities=new Object(); Utilities.splitQName=function(qn) { var i=qn.indexOf(":"); if (i == -1) { return [ null, qn ]; } return [ qn.substring(0, i), qn.substring(i + 1) ]; }; Utilities.resolveQName=function(qn, nr, n, useDefault) { var parts=Utilities.splitQName(qn); if (parts[0] != null) { parts[0]=nr.getNamespace(parts[0], n); } else { if (useDefault) { parts[0]=nr.getNamespace("", n); if (parts[0] == null) { parts[0]=""; } } else { parts[0]=""; } } return parts; }; Utilities.isSpace=function(c) { return c == 0x9 || c == 0xd || c == 0xa || c == 0x20; }; Utilities.isLetter=function(c) { return c >= 0x0041 && c <= 0x005A || c >= 0x0061 && c <= 0x007A || c >= 0x00C0 && c <= 0x00D6 || c >= 0x00D8 && c <= 0x00F6 || c >= 0x00F8 && c <= 0x00FF || c >= 0x0100 && c <= 0x0131 || c >= 0x0134 && c <= 0x013E || c >= 0x0141 && c <= 0x0148 || c >= 0x014A && c <= 0x017E || c >= 0x0180 && c <= 0x01C3 || c >= 0x01CD && c <= 0x01F0 || c >= 0x01F4 && c <= 0x01F5 || c >= 0x01FA && c <= 0x0217 || c >= 0x0250 && c <= 0x02A8 || c >= 0x02BB && c <= 0x02C1 || c == 0x0386 || c >= 0x0388 && c <= 0x038A || c == 0x038C || c >= 0x038E && c <= 0x03A1 || c >= 0x03A3 && c <= 0x03CE || c >= 0x03D0 && c <= 0x03D6 || c == 0x03DA || c == 0x03DC || c == 0x03DE || c == 0x03E0 || c >= 0x03E2 && c <= 0x03F3 || c >= 0x0401 && c <= 0x040C || c >= 0x040E && c <= 0x044F || c >= 0x0451 && c <= 0x045C || c >= 0x045E && c <= 0x0481 || c >= 0x0490 && c <= 0x04C4 || c >= 0x04C7 && c <= 0x04C8 || c >= 0x04CB && c <= 0x04CC || c >= 0x04D0 && c <= 0x04EB || c >= 0x04EE && c <= 0x04F5 || c >= 0x04F8 && c <= 0x04F9 || c >= 0x0531 && c <= 0x0556 || c == 0x0559 || c >= 0x0561 && c <= 0x0586 || c >= 0x05D0 && c <= 0x05EA || c >= 0x05F0 && c <= 0x05F2 || c >= 0x0621 && c <= 0x063A || c >= 0x0641 && c <= 0x064A || c >= 0x0671 && c <= 0x06B7 || c >= 0x06BA && c <= 0x06BE || c >= 0x06C0 && c <= 0x06CE || c >= 0x06D0 && c <= 0x06D3 || c == 0x06D5 || c >= 0x06E5 && c <= 0x06E6 || c >= 0x0905 && c <= 0x0939 || c == 0x093D || c >= 0x0958 && c <= 0x0961 || c >= 0x0985 && c <= 0x098C || c >= 0x098F && c <= 0x0990 || c >= 0x0993 && c <= 0x09A8 || c >= 0x09AA && c <= 0x09B0 || c == 0x09B2 || c >= 0x09B6 && c <= 0x09B9 || c >= 0x09DC && c <= 0x09DD || c >= 0x09DF && c <= 0x09E1 || c >= 0x09F0 && c <= 0x09F1 || c >= 0x0A05 && c <= 0x0A0A || c >= 0x0A0F && c <= 0x0A10 || c >= 0x0A13 && c <= 0x0A28 || c >= 0x0A2A && c <= 0x0A30 || c >= 0x0A32 && c <= 0x0A33 || c >= 0x0A35 && c <= 0x0A36 || c >= 0x0A38 && c <= 0x0A39 || c >= 0x0A59 && c <= 0x0A5C || c == 0x0A5E || c >= 0x0A72 && c <= 0x0A74 || c >= 0x0A85 && c <= 0x0A8B || c == 0x0A8D || c >= 0x0A8F && c <= 0x0A91 || c >= 0x0A93 && c <= 0x0AA8 || c >= 0x0AAA && c <= 0x0AB0 || c >= 0x0AB2 && c <= 0x0AB3 || c >= 0x0AB5 && c <= 0x0AB9 || c == 0x0ABD || c == 0x0AE0 || c >= 0x0B05 && c <= 0x0B0C || c >= 0x0B0F && c <= 0x0B10 || c >= 0x0B13 && c <= 0x0B28 || c >= 0x0B2A && c <= 0x0B30 || c >= 0x0B32 && c <= 0x0B33 || c >= 0x0B36 && c <= 0x0B39 || c == 0x0B3D || c >= 0x0B5C && c <= 0x0B5D || c >= 0x0B5F && c <= 0x0B61 || c >= 0x0B85 && c <= 0x0B8A || c >= 0x0B8E && c <= 0x0B90 || c >= 0x0B92 && c <= 0x0B95 || c >= 0x0B99 && c <= 0x0B9A || c == 0x0B9C || c >= 0x0B9E && c <= 0x0B9F || c >= 0x0BA3 && c <= 0x0BA4 || c >= 0x0BA8 && c <= 0x0BAA || c >= 0x0BAE && c <= 0x0BB5 || c >= 0x0BB7 && c <= 0x0BB9 || c >= 0x0C05 && c <= 0x0C0C || c >= 0x0C0E && c <= 0x0C10 || c >= 0x0C12 && c <= 0x0C28 || c >= 0x0C2A && c <= 0x0C33 || c >= 0x0C35 && c <= 0x0C39 || c >= 0x0C60 && c <= 0x0C61 || c >= 0x0C85 && c <= 0x0C8C || c >= 0x0C8E && c <= 0x0C90 || c >= 0x0C92 && c <= 0x0CA8 || c >= 0x0CAA && c <= 0x0CB3 || c >= 0x0CB5 && c <= 0x0CB9 || c == 0x0CDE || c >= 0x0CE0 && c <= 0x0CE1 || c >= 0x0D05 && c <= 0x0D0C || c >= 0x0D0E && c <= 0x0D10 || c >= 0x0D12 && c <= 0x0D28 || c >= 0x0D2A && c <= 0x0D39 || c >= 0x0D60 && c <= 0x0D61 || c >= 0x0E01 && c <= 0x0E2E || c == 0x0E30 || c >= 0x0E32 && c <= 0x0E33 || c >= 0x0E40 && c <= 0x0E45 || c >= 0x0E81 && c <= 0x0E82 || c == 0x0E84 || c >= 0x0E87 && c <= 0x0E88 || c == 0x0E8A || c == 0x0E8D || c >= 0x0E94 && c <= 0x0E97 || c >= 0x0E99 && c <= 0x0E9F || c >= 0x0EA1 && c <= 0x0EA3 || c == 0x0EA5 || c == 0x0EA7 || c >= 0x0EAA && c <= 0x0EAB || c >= 0x0EAD && c <= 0x0EAE || c == 0x0EB0 || c >= 0x0EB2 && c <= 0x0EB3 || c == 0x0EBD || c >= 0x0EC0 && c <= 0x0EC4 || c >= 0x0F40 && c <= 0x0F47 || c >= 0x0F49 && c <= 0x0F69 || c >= 0x10A0 && c <= 0x10C5 || c >= 0x10D0 && c <= 0x10F6 || c == 0x1100 || c >= 0x1102 && c <= 0x1103 || c >= 0x1105 && c <= 0x1107 || c == 0x1109 || c >= 0x110B && c <= 0x110C || c >= 0x110E && c <= 0x1112 || c == 0x113C || c == 0x113E || c == 0x1140 || c == 0x114C || c == 0x114E || c == 0x1150 || c >= 0x1154 && c <= 0x1155 || c == 0x1159 || c >= 0x115F && c <= 0x1161 || c == 0x1163 || c == 0x1165 || c == 0x1167 || c == 0x1169 || c >= 0x116D && c <= 0x116E || c >= 0x1172 && c <= 0x1173 || c == 0x1175 || c == 0x119E || c == 0x11A8 || c == 0x11AB || c >= 0x11AE && c <= 0x11AF || c >= 0x11B7 && c <= 0x11B8 || c == 0x11BA || c >= 0x11BC && c <= 0x11C2 || c == 0x11EB || c == 0x11F0 || c == 0x11F9 || c >= 0x1E00 && c <= 0x1E9B || c >= 0x1EA0 && c <= 0x1EF9 || c >= 0x1F00 && c <= 0x1F15 || c >= 0x1F18 && c <= 0x1F1D || c >= 0x1F20 && c <= 0x1F45 || c >= 0x1F48 && c <= 0x1F4D || c >= 0x1F50 && c <= 0x1F57 || c == 0x1F59 || c == 0x1F5B || c == 0x1F5D || c >= 0x1F5F && c <= 0x1F7D || c >= 0x1F80 && c <= 0x1FB4 || c >= 0x1FB6 && c <= 0x1FBC || c == 0x1FBE || c >= 0x1FC2 && c <= 0x1FC4 || c >= 0x1FC6 && c <= 0x1FCC || c >= 0x1FD0 && c <= 0x1FD3 || c >= 0x1FD6 && c <= 0x1FDB || c >= 0x1FE0 && c <= 0x1FEC || c >= 0x1FF2 && c <= 0x1FF4 || c >= 0x1FF6 && c <= 0x1FFC || c == 0x2126 || c >= 0x212A && c <= 0x212B || c == 0x212E || c >= 0x2180 && c <= 0x2182 || c >= 0x3041 && c <= 0x3094 || c >= 0x30A1 && c <= 0x30FA || c >= 0x3105 && c <= 0x312C || c >= 0xAC00 && c <= 0xD7A3 || c >= 0x4E00 && c <= 0x9FA5 || c == 0x3007 || c >= 0x3021 && c <= 0x3029; }; Utilities.isNCNameChar=function(c) { return c >= 0x0030 && c <= 0x0039 || c >= 0x0660 && c <= 0x0669 || c >= 0x06F0 && c <= 0x06F9 || c >= 0x0966 && c <= 0x096F || c >= 0x09E6 && c <= 0x09EF || c >= 0x0A66 && c <= 0x0A6F || c >= 0x0AE6 && c <= 0x0AEF || c >= 0x0B66 && c <= 0x0B6F || c >= 0x0BE7 && c <= 0x0BEF || c >= 0x0C66 && c <= 0x0C6F || c >= 0x0CE6 && c <= 0x0CEF || c >= 0x0D66 && c <= 0x0D6F || c >= 0x0E50 && c <= 0x0E59 || c >= 0x0ED0 && c <= 0x0ED9 || c >= 0x0F20 && c <= 0x0F29 || c == 0x002E || c == 0x002D || c == 0x005F || Utilities.isLetter(c) || c >= 0x0300 && c <= 0x0345 || c >= 0x0360 && c <= 0x0361 || c >= 0x0483 && c <= 0x0486 || c >= 0x0591 && c <= 0x05A1 || c >= 0x05A3 && c <= 0x05B9 || c >= 0x05BB && c <= 0x05BD || c == 0x05BF || c >= 0x05C1 && c <= 0x05C2 || c == 0x05C4 || c >= 0x064B && c <= 0x0652 || c == 0x0670 || c >= 0x06D6 && c <= 0x06DC || c >= 0x06DD && c <= 0x06DF || c >= 0x06E0 && c <= 0x06E4 || c >= 0x06E7 && c <= 0x06E8 || c >= 0x06EA && c <= 0x06ED || c >= 0x0901 && c <= 0x0903 || c == 0x093C || c >= 0x093E && c <= 0x094C || c == 0x094D || c >= 0x0951 && c <= 0x0954 || c >= 0x0962 && c <= 0x0963 || c >= 0x0981 && c <= 0x0983 || c == 0x09BC || c == 0x09BE || c == 0x09BF || c >= 0x09C0 && c <= 0x09C4 || c >= 0x09C7 && c <= 0x09C8 || c >= 0x09CB && c <= 0x09CD || c == 0x09D7 || c >= 0x09E2 && c <= 0x09E3 || c == 0x0A02 || c == 0x0A3C || c == 0x0A3E || c == 0x0A3F || c >= 0x0A40 && c <= 0x0A42 || c >= 0x0A47 && c <= 0x0A48 || c >= 0x0A4B && c <= 0x0A4D || c >= 0x0A70 && c <= 0x0A71 || c >= 0x0A81 && c <= 0x0A83 || c == 0x0ABC || c >= 0x0ABE && c <= 0x0AC5 || c >= 0x0AC7 && c <= 0x0AC9 || c >= 0x0ACB && c <= 0x0ACD || c >= 0x0B01 && c <= 0x0B03 || c == 0x0B3C || c >= 0x0B3E && c <= 0x0B43 || c >= 0x0B47 && c <= 0x0B48 || c >= 0x0B4B && c <= 0x0B4D || c >= 0x0B56 && c <= 0x0B57 || c >= 0x0B82 && c <= 0x0B83 || c >= 0x0BBE && c <= 0x0BC2 || c >= 0x0BC6 && c <= 0x0BC8 || c >= 0x0BCA && c <= 0x0BCD || c == 0x0BD7 || c >= 0x0C01 && c <= 0x0C03 || c >= 0x0C3E && c <= 0x0C44 || c >= 0x0C46 && c <= 0x0C48 || c >= 0x0C4A && c <= 0x0C4D || c >= 0x0C55 && c <= 0x0C56 || c >= 0x0C82 && c <= 0x0C83 || c >= 0x0CBE && c <= 0x0CC4 || c >= 0x0CC6 && c <= 0x0CC8 || c >= 0x0CCA && c <= 0x0CCD || c >= 0x0CD5 && c <= 0x0CD6 || c >= 0x0D02 && c <= 0x0D03 || c >= 0x0D3E && c <= 0x0D43 || c >= 0x0D46 && c <= 0x0D48 || c >= 0x0D4A && c <= 0x0D4D || c == 0x0D57 || c == 0x0E31 || c >= 0x0E34 && c <= 0x0E3A || c >= 0x0E47 && c <= 0x0E4E || c == 0x0EB1 || c >= 0x0EB4 && c <= 0x0EB9 || c >= 0x0EBB && c <= 0x0EBC || c >= 0x0EC8 && c <= 0x0ECD || c >= 0x0F18 && c <= 0x0F19 || c == 0x0F35 || c == 0x0F37 || c == 0x0F39 || c == 0x0F3E || c == 0x0F3F || c >= 0x0F71 && c <= 0x0F84 || c >= 0x0F86 && c <= 0x0F8B || c >= 0x0F90 && c <= 0x0F95 || c == 0x0F97 || c >= 0x0F99 && c <= 0x0FAD || c >= 0x0FB1 && c <= 0x0FB7 || c == 0x0FB9 || c >= 0x20D0 && c <= 0x20DC || c == 0x20E1 || c >= 0x302A && c <= 0x302F || c == 0x3099 || c == 0x309A || c == 0x00B7 || c == 0x02D0 || c == 0x02D1 || c == 0x0387 || c == 0x0640 || c == 0x0E46 || c == 0x0EC6 || c == 0x3005 || c >= 0x3031 && c <= 0x3035 || c >= 0x309D && c <= 0x309E || c >= 0x30FC && c <= 0x30FE; }; Utilities.coalesceText=function(n) { for (var m=n.firstChild; m != null; m=m.nextSibling) { if (m.nodeType == 3 || m.nodeType == 4 ) { var s=m.nodeValue; var first=m; m=m.nextSibling; while (m != null && (m.nodeType == 3 || m.nodeType == 4 )) { s += m.nodeValue; var del=m; m=m.nextSibling; del.parentNode.removeChild(del); } if (first.nodeType == 4 ) { var p=first.parentNode; if (first.nextSibling == null) { p.removeChild(first); p.appendChild(p.ownerDocument.createTextNode(s)); } else { var next=first.nextSibling; p.removeChild(first); p.insertBefore(p.ownerDocument.createTextNode(s), next); } } else { first.nodeValue=s; } if (m == null) { break; } } else if (m.nodeType == 1 ) { Utilities.coalesceText(m); } } }; Utilities.instance_of=function(o, c) { while (o != null) { if (o.constructor === c) { return true; } if (o === Object) { return false; } o=o.constructor.superclass; } return false; }; Utilities.getElementById=function(n, id) { if (n.nodeType == 1 ) { if (n.getAttribute("id") == id || n.getAttributeNS(null, "id") == id) { return n; } } for (var m=n.firstChild; m != null; m=m.nextSibling) { var res=Utilities.getElementById(m, id); if (res != null) { return res; } } return null; }; XPathException.prototype={}; XPathException.prototype.constructor=XPathException; XPathException.superclass=Object.prototype; function XPathException(c, e) { this.code=c; this.exception=e; } XPathException.prototype.toString=function() { var msg=this.exception ? ": " + this.exception.toString() : ""; switch (this.code) { case XPathException.INVALID_EXPRESSION_ERR: return "Invalid expression" + msg; case XPathException.TYPE_ERR: return "Type error" + msg; } }; XPathException.INVALID_EXPRESSION_ERR=51; XPathException.TYPE_ERR=52; XPathExpression.prototype={}; XPathExpression.prototype.constructor=XPathExpression; XPathExpression.superclass=Object.prototype; function XPathExpression(e, r, p) { this.xpath=p.parse(e); this.context=new XPathContext(); this.context.namespaceResolver=new XPathNSResolverWrapper(r); } XPathExpression.prototype.evaluate=function(n, t, res) { this.context.expressionContextNode=n; var result=this.xpath.evaluate(this.context); return new XPathResult(result, t); } XPathNSResolverWrapper.prototype={}; XPathNSResolverWrapper.prototype.constructor=XPathNSResolverWrapper; XPathNSResolverWrapper.superclass=Object.prototype; function XPathNSResolverWrapper(r) { this.xpathNSResolver=r; } XPathNSResolverWrapper.prototype.getNamespace=function(prefix, n) { if (this.xpathNSResolver == null) { return null; } return this.xpathNSResolver.lookupNamespaceURI(prefix); }; NodeXPathNSResolver.prototype={}; NodeXPathNSResolver.prototype.constructor=NodeXPathNSResolver; NodeXPathNSResolver.superclass=Object.prototype; function NodeXPathNSResolver(n) { this.node=n; this.namespaceResolver=new NamespaceResolver(); } NodeXPathNSResolver.prototype.lookupNamespaceURI=function(prefix) { return this.namespaceResolver.getNamespace(prefix, this.node); }; XPathResult.prototype={}; XPathResult.prototype.constructor=XPathResult; XPathResult.superclass=Object.prototype; function XPathResult(v, t) { if (t == XPathResult.ANY_TYPE) { if (v.constructor === XString) { t=XPathResult.STRING_TYPE; } else if (v.constructor === XNumber) { t=XPathResult.NUMBER_TYPE; } else if (v.constructor === XBoolean) { t=XPathResult.BOOLEAN_TYPE; } else if (v.constructor === XNodeSet) { t=XPathResult.UNORDERED_NODE_ITERATOR_TYPE; } } this.resultType=t; switch (t) { case XPathResult.NUMBER_TYPE: this.numberValue=v.numberValue(); return; case XPathResult.STRING_TYPE: this.stringValue=v.stringValue(); return; case XPathResult.BOOLEAN_TYPE: this.booleanValue=v.booleanValue(); return; case XPathResult.ANY_UNORDERED_NODE_TYPE: case XPathResult.FIRST_UNORDERED_NODE_TYPE: if (v.constructor === XNodeSet) { this.singleNodeValue=v.first(); return; } break; case XPathResult.UNORDERED_NODE_ITERATOR_TYPE: case XPathResult.ORDERED_NODE_ITERATOR_TYPE: if (v.constructor === XNodeSet) { this.invalidIteratorState=false; this.nodes=v.toArray(); this.iteratorIndex=0; return; } break; case XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE: case XPathResult.ORDERED_NODE_SNAPSHOT_TYPE: if (v.constructor === XNodeSet) { this.nodes=v.toArray(); this.snapshotLength=this.nodes.length; return; } break; } throw new XPathException(XPathException.TYPE_ERR); }; XPathResult.prototype.iterateNext=function() { if (this.resultType != XPathResult.UNORDERED_NODE_ITERATOR_TYPE && this.resultType != XPathResult.ORDERED_NODE_ITERATOR_TYPE) { throw new XPathException(XPathException.TYPE_ERR); } return this.nodes[this.iteratorIndex++]; }; XPathResult.prototype.snapshotItem=function(i) { if (this.resultType != XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE && this.resultType != XPathResult.ORDERED_NODE_SNAPSHOT_TYPE) { throw new XPathException(XPathException.TYPE_ERR); } return this.nodes[i]; }; XPathResult.ANY_TYPE=0; XPathResult.NUMBER_TYPE=1; XPathResult.STRING_TYPE=2; XPathResult.BOOLEAN_TYPE=3; XPathResult.UNORDERED_NODE_ITERATOR_TYPE=4; XPathResult.ORDERED_NODE_ITERATOR_TYPE=5; XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE=6; XPathResult.ORDERED_NODE_SNAPSHOT_TYPE=7; XPathResult.ANY_UNORDERED_NODE_TYPE=8; XPathResult.FIRST_ORDERED_NODE_TYPE=9; function installDOM3XPathSupport(doc, p) { doc.createExpression=function(e, r) { try { return new XPathExpression(e, r, p); } catch (e) { throw new XPathException(XPathException.INVALID_EXPRESSION_ERR, e); } }; doc.createNSResolver=function(n) { return new NodeXPathNSResolver(n); }; doc.evaluate=function(e, cn, r, t, res) { if (t < 0 || t > 9) { throw { code: 0, toString: function() { return "Request type not supported"; } }; } return doc.creat