var Spry;if(!Spry){Spry={}}if(!Spry.Utils){Spry.Utils={}}Spry.Utils.msProgIDs=["MSXML2.XMLHTTP.5.0","MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"];Spry.Utils.createXMLHttpRequest=function(){var A=null;try{if(window.XMLHttpRequest){A=new XMLHttpRequest()}else{if(window.ActiveXObject){while(!A&&Spry.Utils.msProgIDs.length){try{A=new ActiveXObject(Spry.Utils.msProgIDs[0])}catch(B){A=null}if(!A){Spry.Utils.msProgIDs.splice(0,1)}}}}}catch(B){A=null}if(!A){Spry.Debug.reportError("Failed to create an XMLHttpRequest object!")}return A};Spry.Utils.loadURL=function(H,B,C,G,E){var D=new Spry.Utils.loadURL.Request();D.method=H;D.url=B;D.async=C;D.successCallback=G;Spry.Utils.setOptions(D,E);try{D.xhRequest=Spry.Utils.createXMLHttpRequest();if(!D.xhRequest){return null}if(D.async){D.xhRequest.onreadystatechange=function(){Spry.Utils.loadURL.callback(D)}}D.xhRequest.open(D.method,D.url,D.async,D.username,D.password);if(D.headers){for(var A in D.headers){D.xhRequest.setRequestHeader(A,D.headers[A])}}D.xhRequest.send(D.postData);if(!D.async){Spry.Utils.loadURL.callback(D)}}catch(F){D=null;Spry.Debug.reportError("Exception caught while loading "+B+": "+F)}return D};Spry.Utils.loadURL.callback=function(A){if(!A||A.xhRequest.readyState!=4){return }if(A.successCallback&&(A.xhRequest.status==200||A.xhRequest.status==0)){A.successCallback(A)}else{if(A.errorCallback){A.errorCallback(A)}}};Spry.Utils.loadURL.Request=function(){var B=Spry.Utils.loadURL.Request.props;var C=B.length;for(var A=0;A<C;A++){this[B[A]]=null}this.method="GET";this.async=true;this.headers={}};Spry.Utils.loadURL.Request.props=["method","url","async","username","password","postData","successCallback","errorCallback","headers","userData","xhRequest"];Spry.Utils.loadURL.Request.prototype.extractRequestOptions=function(D,C){if(!D){return }var B=Spry.Utils.loadURL.Request.props;var E=B.length;for(var A=0;A<E;A++){var F=B[A];if(D[F]!=undefined){this[F]=D[F];if(C){D[F]=undefined}}}};Spry.Utils.loadURL.Request.prototype.clone=function(){var B=Spry.Utils.loadURL.Request.props;var D=B.length;var C=new Spry.Utils.loadURL.Request;for(var A=0;A<D;A++){C[B[A]]=this[B[A]]}if(this.headers){C.headers={};Spry.Utils.setOptions(C.headers,this.headers)}return C};Spry.Utils.setInnerHTML=function(ele,str,preventScripts){if(!ele){return }ele=$(ele);var scriptExpr="<script[^>]*>(.|s|\n|\r)*?</script>";ele.innerHTML=str.replace(new RegExp(scriptExpr,"img"),"");if(preventScripts){return }var matches=str.match(new RegExp(scriptExpr,"img"));if(matches){var numMatches=matches.length;for(var i=0;i<numMatches;i++){var s=matches[i].replace(/<script[^>]*>[\s\r\n]*(<\!--)?|(-->)?[\s\r\n]*<\/script>/img,"");Spry.Utils.eval(s)}}};Spry.Utils.updateContent=function(D,B,A,C){var E=(C&&C.method)?C.method:"GET";Spry.Utils.loadURL(E,B,false,function(F){Spry.Utils.setInnerHTML(D,F.xhRequest.responseText);if(A){A(D,B)}},C)};Spry.Utils.addEventListener=function(C,B,D,A){try{C=$(C);if(C.addEventListener){C.addEventListener(B,D,A)}else{if(C.attachEvent){C.attachEvent("on"+B,D)}}}catch(E){}};Spry.Utils.removeEventListener=function(C,B,D,A){try{C=$(C);if(C.removeEventListener){C.removeEventListener(B,D,A)}else{if(C.detachEvent){C.detachEvent("on"+B,D)}}}catch(E){}};Spry.Utils.addLoadListener=function(A){if(typeof window.addEventListener!="undefined"){window.addEventListener("load",A,false)}else{if(typeof document.addEventListener!="undefined"){document.addEventListener("load",A,false)}else{if(typeof window.attachEvent!="undefined"){window.attachEvent("onload",A)}}}};Spry.Utils.eval=function(str){return eval(str)};Spry.Utils.escapeQuotesAndLineBreaks=function(A){if(A){A=A.replace(/\\/g,"\\\\");A=A.replace(/["']/g,"\\$&");A=A.replace(/\n/g,"\\n");A=A.replace(/\r/g,"\\r")}return A};Spry.Utils.encodeEntities=function(A){if(A&&A.search(/[&<>"]/)!=-1){A=A.replace(/&/g,"&amp;");A=A.replace(/</g,"&lt;");A=A.replace(/>/g,"&gt;");A=A.replace(/"/g,"&quot;")}return A};Spry.Utils.decodeEntities=function(B){var A=Spry.Utils.decodeEntities.div;if(!A){A=document.createElement("div");Spry.Utils.decodeEntities.div=A;if(!A){return B}}A.innerHTML=B;if(A.childNodes.length==1&&A.firstChild.nodeType==3&&A.firstChild.nextSibling==null){B=A.firstChild.data}else{B=B.replace(/&lt;/,"<");B=B.replace(/&gt;/,">");B=B.replace(/&quot;/,"\"");B=B.replace(/&amp;/,"&")}return B};Spry.Utils.fixupIETagAttributes=function(H){var B="";var A=H.match(/^<[^\s>]+\s*/)[0];var E=H.match(/\s*\/?>$/)[0];var I=H.replace(/^<[^\s>]+\s*|\s*\/?>/g,"");B+=A;if(I){var G=0;var C=0;while(G<I.length){while(I.charAt(C)!="="&&C<I.length){++C}if(C>=I.length){B+=I.substring(G,C);break}++C;B+=I.substring(G,C);G=C;if(I.charAt(C)=="\""||I.charAt(C)=="'"){var F=C++;while(C<I.length){if(I.charAt(C)==I.charAt(F)){C++;break}else{if(I.charAt(C)=="\\"){C++}}C++}B+=I.substring(G,C);G=C}else{B+="\"";var D=I.slice(C).search(/\s/);C=(D!=-1)?(C+D):I.length;B+=I.slice(G,C);B+="\"";G=C}}}B+=E;return B};Spry.Utils.fixUpIEInnerHTML=function(F){var E="";var D=new RegExp("<\\!--|<\\!\\[CDATA\\[|<\\w+[^<>]*>|-->|\\]\\](>|&gt;)","g");var A=0;var B=0;while(F.length){var C=D.exec(F);if(!C||!C[0]){E+=F.substr(A,F.length-A);break}if(C.index!=A){E+=F.substr(A,C.index-A)}if(C[0]=="<!--"||C[0]=="<![CDATA["){++B;E+=C[0]}else{if(C[0]=="-->"||C[0]=="]]>"||(B&&C[0]=="]]&gt;")){--B;E+=C[0]}else{if(!B&&C[0].charAt(0)=="<"){E+=Spry.Utils.fixupIETagAttributes(C[0])}else{E+=C[0]}}}A=D.lastIndex}return E};Spry.Utils.stringToXMLDoc=function(E){var B=null;try{var A=new ActiveXObject("Microsoft.XMLDOM");A.async=false;A.loadXML(E);B=A}catch(C){try{var D=new DOMParser;B=D.parseFromString(E,"text/xml")}catch(C){Spry.Debug.reportError("Caught exception in Spry.Utils.stringToXMLDoc(): "+C+"\n");B=null}}return B};Spry.Utils.serializeObject=function(D){var F="";var C=true;if(D==null||D==undefined){return F+D}var E=typeof D;if(E=="number"||E=="boolean"){F+=D}else{if(E=="string"){F+="\""+Spry.Utils.escapeQuotesAndLineBreaks(D)+"\""}else{if(D.constructor==Array){F+="[";for(var A=0;A<D.length;A++){if(!C){F+=", "}F+=Spry.Utils.serializeObject(D[A]);C=false}F+="]"}else{if(E=="object"){F+="{";for(var B in D){if(!C){F+=", "}F+="\""+B+"\": "+Spry.Utils.serializeObject(D[B]);C=false}F+="}"}}}}return F};Spry.Utils.getNodesByFunc=function(A,D){var E=new Array;var C=new Array;var B=A;while(B){if(D(B)){C.push(B)}if(B.hasChildNodes()){E.push(B);B=B.firstChild}else{if(B==A){B=null}else{try{B=B.nextSibling}catch(F){B=null}}}while(!B&&E.length>0){B=E.pop();if(B==A){B=null}else{try{B=B.nextSibling}catch(F){B=null}}}}if(E&&E.length>0){Spry.Debug.trace("-- WARNING: Spry.Utils.getNodesByFunc() failed to traverse all nodes!\n")}return C};Spry.Utils.addClassName=function(B,A){B=$(B);if(!B||!A||(B.className&&B.className.search(new RegExp("\\b"+A+"\\b"))!=-1)){return }B.className+=(B.className?" ":"")+A};Spry.Utils.removeClassName=function(B,A){B=$(B);if(!B||!A||(B.className&&B.className.search(new RegExp("\\b"+A+"\\b"))==-1)){return }B.className=B.className.replace(new RegExp("\\s*\\b"+A+"\\b","g"),"")};Spry.Utils.getFirstChildWithNodeName=function(A,C){var B=A.firstChild;while(B){if(B.nodeName==C){return B}B=B.nextSibling}return null};Spry.Utils.nodeContainsElementNode=function(A){if(A){A=A.firstChild;while(A){if(A.nodeType==1){return true}A=A.nextSibling}}return false};Spry.Utils.getNodeText=function(B){var A="";if(!B){return }try{var D=B.firstChild;while(D){try{if(D.nodeType==3){A+=Spry.Utils.encodeEntities(D.data)}else{if(D.nodeType==4){A+=D.data}}}catch(C){Spry.Debug.reportError("Spry.Utils.getNodeText() exception caught: "+C+"\n")}D=D.nextSibling}}catch(C){Spry.Debug.reportError("Spry.Utils.getNodeText() exception caught: "+C+"\n")}return A};Spry.Utils.CreateObjectForNode=function(D){if(!D){return null}var F=null;var C=0;var B=null;try{for(C=0;C<D.attributes.length;C++){B=D.attributes[C];if(B&&B.nodeType==2){if(!F){F=new Object();if(!F){Spry.Debug.reportError("Spry.Utils.CreateObjectForNode(): Object creation failed!");return null}}F["@"+B.name]=B.value}}}catch(E){Spry.Debug.reportError("Spry.Utils.CreateObjectForNode() caught exception while accessing attributes: "+E+"\n")}var H=D.firstChild;if(H&&!H.nextSibling&&H.nodeType!=1){if(!F){F=new Object();if(!F){Spry.Debug.reportError("Spry.Utils.CreateObjectForNode(): Object creation failed!");return null}}F[D.nodeName]=Spry.Utils.getNodeText(D)}while(H){if(H.nodeType==1){if(!Spry.Utils.nodeContainsElementNode(H)){var A=Spry.Utils.getNodeText(H);if(!F){F=new Object();if(!F){Spry.Debug.reportError("Spry.Utils.CreateObjectForNode(): Object creation failed!");return null}}F[H.nodeName]=A;try{var G=H.nodeName+"/@";for(C=0;C<H.attributes.length;C++){B=H.attributes[C];if(B&&B.nodeType==2){F[G+B.name]=B.value}}}catch(E){Spry.Debug.reportError("Spry.Utils.CreateObjectForNode() caught exception while accessing attributes: "+E+"\n")}}}H=H.nextSibling}return F};Spry.Utils.getRecordSetFromXMLDoc=function(K,J){if(!K||!J){return null}var H=new Object();H.xmlDoc=K;H.xmlPath=J;H.dataHash=new Object;H.data=new Array;H.getData=function(){return this.data};var I=new ExprContext(K);var B=xpathParse(J);var F=B.evaluate(I);var C=F.nodeSetValue();var A=true;if(C&&C.length>0){A=C[0].nodeType!=2}var E=0;for(var D=0;D<C.length;D++){var G=null;if(A){G=Spry.Utils.CreateObjectForNode(C[D])}else{G=new Object;G["@"+C[D].name]=C[D].value}if(G){G["ds_RowID"]=E++;H.dataHash[G["ds_RowID"]]=G;H.data.push(G)}}return H};Spry.Utils.setOptions=function(D,C,A){if(!C){return }for(var B in C){if(A&&C[B]==undefined){continue}D[B]=C[B]}};Spry.Utils.SelectionManager={};Spry.Utils.SelectionManager.selectionGroups=new Object;Spry.Utils.SelectionManager.SelectionGroup=function(){this.selectedElements=new Array};Spry.Utils.SelectionManager.SelectionGroup.prototype.select=function(B,C,E){var D=null;if(!E){this.clearSelection()}else{for(var A=0;A<this.selectedElements.length;A++){D=this.selectedElements[A].element;if(D.element==B){if(D.className!=C){Spry.Utils.removeClassName(B,D.className);Spry.Utils.addClassName(B,C)}return }}}D=new Object;D.element=B;D.className=C;this.selectedElements.push(D);Spry.Utils.addClassName(B,C)};Spry.Utils.SelectionManager.SelectionGroup.prototype.unSelect=function(B){for(var A=0;A<this.selectedElements.length;A++){var C=this.selectedElements[A].element;if(C.element==B){Spry.Utils.removeClassName(C.element,C.className);return }}};Spry.Utils.SelectionManager.SelectionGroup.prototype.clearSelection=function(){var A=null;do{A=this.selectedElements.shift();if(A){Spry.Utils.removeClassName(A.element,A.className)}}while(A)};Spry.Utils.SelectionManager.getSelectionGroup=function(A){if(!A){return null}var B=Spry.Utils.SelectionManager.selectionGroups[A];if(!B){B=new Spry.Utils.SelectionManager.SelectionGroup();Spry.Utils.SelectionManager.selectionGroups[A]=B}return B};Spry.Utils.SelectionManager.select=function(A,B,C,E){var D=Spry.Utils.SelectionManager.getSelectionGroup(A);if(!D){return }D.select(B,C,E)};Spry.Utils.SelectionManager.unSelect=function(A,B){var C=Spry.Utils.SelectionManager.getSelectionGroup(A);if(!C){return }C.unSelect(B,className)};Spry.Utils.SelectionManager.clearSelection=function(A){var B=Spry.Utils.SelectionManager.getSelectionGroup(A);if(!B){return }B.clearSelection()};function $(){var C=new Array();for(var B=0;B<arguments.length;B++){var A=arguments[B];if(typeof A=="string"){A=document.getElementById(A)}if(arguments.length==1){return A}C.push(A)}return C}Spry.Utils.Notifier=function(){this.observers=[];this.suppressNotifications=0};Spry.Utils.Notifier.prototype.addObserver=function(B){if(!B){return }var A=this.observers.length;for(var C=0;C<A;C++){if(this.observers[C]==B){return }}this.observers[A]=B};Spry.Utils.Notifier.prototype.removeObserver=function(A){if(!A){return }for(var B=0;B<this.observers.length;B++){if(this.observers[B]==A){this.observers.splice(B,1);break}}};Spry.Utils.Notifier.prototype.notifyObservers=function(B,D){if(!B){return }if(!this.suppressNotifications){var A=this.observers.length;for(var C=0;C<A;C++){var E=this.observers[C];if(E){if(typeof E=="function"){E(B,this,D)}else{if(E[B]){E[B](this,D)}}}}}};Spry.Utils.Notifier.prototype.enableNotifications=function(){if(--this.suppressNotifications<0){this.suppressNotifications=0;Spry.Debug.reportError("Unbalanced enableNotifications() call!\n")}};Spry.Utils.Notifier.prototype.disableNotifications=function(){++this.suppressNotifications};Spry.Debug={};Spry.Debug.enableTrace=true;Spry.Debug.debugWindow=null;Spry.Debug.createDebugWindow=function(){if(!Spry.Debug.enableTrace||Spry.Debug.debugWindow){return }try{Spry.Debug.debugWindow=document.createElement("div");var B=Spry.Debug.debugWindow;B.style.fontSize="12px";B.style.fontFamily="console";B.style.position="absolute";B.style.width="400px";B.style.height="300px";B.style.overflow="auto";B.style.border="solid 1px black";B.style.backgroundColor="white";B.style.color="black";B.style.bottom="0px";B.style.right="0px";B.setAttribute("id","SpryDebugWindow");document.body.appendChild(Spry.Debug.debugWindow)}catch(A){}};Spry.Debug.debugOut=function(C,A){if(!Spry.Debug.debugWindow){Spry.Debug.createDebugWindow();if(!Spry.Debug.debugWindow){return }}var B=document.createElement("div");if(A){B.style.backgroundColor=A}B.innerHTML=C;Spry.Debug.debugWindow.appendChild(B)};Spry.Debug.trace=function(A){Spry.Debug.debugOut(A)};Spry.Debug.reportError=function(A){Spry.Debug.debugOut(A,"red")};Spry.Data={};Spry.Data.regionsArray={};Spry.Data.initRegions=function(D){if(!D){D=document.body}var L=null;var G=Spry.Utils.getNodesByFunc(D,function(T){try{if(T.nodeType!=1){return false}var R="spry:region";var Q=T.attributes.getNamedItem(R);if(!Q){R="spry:detailregion";Q=T.attributes.getNamedItem(R)}if(Q){if(L){var S=T.parentNode;while(S){if(S==L){Spry.Debug.reportError("Found a nested "+R+" in the following markup. Nested regions are currently not supported.<br/><pre>"+Spry.Utils.encodeEntities(S.innerHTML)+"</pre>");return false}S=S.parentNode}}if(Q.value){Q=T.attributes.getNamedItem("id");if(!Q||!Q.value){T.setAttribute("id","spryregion"+(++Spry.Data.initRegions.nextUniqueRegionID))}L=T;return true}else{Spry.Debug.reportError(R+" attributes require one or more data set names as values!")}}}catch(U){}return false});var A,M,H;for(H=0;H<G.length;H++){var C=G[H];var I=false;A=C.attributes.getNamedItem("id").value;attr=C.attributes.getNamedItem("spry:region");if(!attr){attr=C.attributes.getNamedItem("spry:detailregion");I=true}if(!attr.value){Spry.Debug.reportError("spry:region and spry:detailregion attributes require one or more data set names as values!");continue}C.attributes.removeNamedItem(attr.nodeName);Spry.Utils.removeClassName(C,Spry.Data.Region.hiddenRegionClassName);M=Spry.Data.Region.strToDataSetsArray(attr.value);if(!M.length){Spry.Debug.reportError("spry:region or spry:detailregion attribute has no data set!");continue}var J=false;var O=false;var F="";var P=null;var B={};var E={};attr=C.attributes.getNamedItem("spry:readystate");if(attr&&attr.value){E["ready"]=attr.value}attr=C.attributes.getNamedItem("spry:errorstate");if(attr&&attr.value){E["error"]=attr.value}attr=C.attributes.getNamedItem("spry:loadingstate");if(attr&&attr.value){E["loading"]=attr.value}var K=Spry.Utils.getNodesByFunc(C,function(f){try{if(f.nodeType==1){var W=f.attributes;var T=Spry.Data.Region.PI.orderedInstructions.length;var R=null;var Q=null;for(var h=0;h<T;h++){var g=Spry.Data.Region.PI.orderedInstructions[h];var d=W.getNamedItem(g);if(!d){continue}var c=Spry.Data.Region.PI.instructions[g];var Y=(f==C)?true:c.childrenOnly;var b=c.getOpenTag(f,g);var V=c.getCloseTag(f,g);if(Y){var Z=document.createComment(b);var a=document.createComment(V);if(!R){f.insertBefore(Z,f.firstChild)}else{f.insertBefore(Z,R.nextSibling)}R=Z;if(!Q){f.appendChild(a)}else{f.insertBefore(a,Q)}Q=a}else{var X=f.parentNode;X.insertBefore(document.createComment(b),f);X.insertBefore(document.createComment(V),f.nextSibling)}if(g=="spry:state"){B[d.value]=true}f.removeAttribute(g)}if(Spry.Data.Region.enableBehaviorAttributes){var k=Spry.Data.Region.behaviorAttrs;for(var S in k){var U=W.getNamedItem(S);if(U){J=true;if(k[S].setup){k[S].setup(f,U.value)}}}}}}catch(j){}return false});F=C.innerHTML;if(window.ActiveXObject&&!Spry.Data.Region.disableIEInnerHTMLFixUp&&F.search(/=\{/)!=-1){if(Spry.Data.Region.debug){Spry.Debug.trace("<hr />Performing IE innerHTML fix up of Region: "+A+"<br /><br />"+Spry.Utils.encodeEntities(F))}F=Spry.Utils.fixUpIEInnerHTML(F)}if(Spry.Data.Region.debug){Spry.Debug.trace("<hr />Region template markup for '"+A+"':<br /><br />"+Spry.Utils.encodeEntities(F))}if(!O){C.innerHTML=""}var N=new Spry.Data.Region(C,A,I,F,M,B,E,J);Spry.Data.regionsArray[N.name]=N}Spry.Data.updateAllRegions()};Spry.Data.initRegions.nextUniqueRegionID=0;Spry.Data.updateRegion=function(B){if(!B||!Spry.Data.regionsArray||!Spry.Data.regionsArray[B]){return }try{Spry.Data.regionsArray[B].updateContent()}catch(A){Spry.Debug.reportError("Spry.Data.updateRegion("+B+") caught an exception: "+A+"\n")}};Spry.Data.getRegion=function(A){return Spry.Data.regionsArray[A]};Spry.Data.updateAllRegions=function(){if(!Spry.Data.regionsArray){return }for(var A in Spry.Data.regionsArray){Spry.Data.updateRegion(A)}};Spry.Data.DataSet=function(){Spry.Utils.Notifier.call(this);this.name="";this.internalID=Spry.Data.DataSet.nextDataSetID++;this.curRowID=0;this.data=null;this.unfilteredData=null;this.dataHash=null;this.columnTypes=new Object;this.filterFunc=null;this.filterDataFunc=null;this.distinctOnLoad=false;this.sortOnLoad=null;this.sortOrderOnLoad="ascending";this.keepSorted=false;this.dataWasLoaded=false;this.pendingRequest=null;this.lastSortColumns=[];this.lastSortOrder="";this.loadIntervalID=0};Spry.Data.DataSet.prototype=new Spry.Utils.Notifier();Spry.Data.DataSet.prototype.constructor=Spry.Data.DataSet;Spry.Data.DataSet.prototype.getData=function(A){return(A&&this.unfilteredData)?this.unfilteredData:this.data};Spry.Data.DataSet.prototype.getUnfilteredData=function(){return this.getData(true)};Spry.Data.DataSet.prototype.getLoadDataRequestIsPending=function(){return this.pendingRequest!=null};Spry.Data.DataSet.prototype.getDataWasLoaded=function(){return this.dataWasLoaded};Spry.Data.DataSet.prototype.loadData=function(){var A=this;this.pendingRequest=new Object;this.dataWasLoaded=false;this.pendingRequest.timer=setTimeout(function(){A.pendingRequest=null;A.dataWasLoaded=true;if(A.filterDataFunc){A.filterData(A.filterDataFunc,true)}if(A.distinctOnLoad){A.distinct()}if(A.keepSorted&&A.getSortColumn()){A.sort(A.lastSortColumns,A.lastSortOrder)}else{if(A.sortOnLoad){A.sort(A.sortOnLoad,A.sortOrderOnLoad)}}if(A.filterFunc){A.filter(A.filterFunc,true)}A.notifyObservers("onDataChanged")},0)};Spry.Data.DataSet.prototype.cancelLoadData=function(){if(this.pendingRequest&&this.pendingRequest.timer){clearTimeout(this.pendingRequest.timer)}this.pendingRequest=null};Spry.Data.DataSet.prototype.getRowCount=function(A){var B=this.getData(A);return B?B.length:0};Spry.Data.DataSet.prototype.getRowByID=function(A){if(!this.data){return null}return this.dataHash[A]};Spry.Data.DataSet.prototype.getRowByRowNumber=function(A,B){var C=this.getData(B);if(C&&A>=0&&A<C.length){return C[A]}return null};Spry.Data.DataSet.prototype.getCurrentRow=function(){return this.getRowByID(this.curRowID)};Spry.Data.DataSet.prototype.setCurrentRow=function(B){if(this.curRowID==B){return }var A={oldRowID:this.curRowID,newRowID:B};this.curRowID=B;this.notifyObservers("onCurrentRowChanged",A)};Spry.Data.DataSet.prototype.getRowNumber=function(C){if(C&&this.data&&this.data.length){var B=this.data.length;for(var A=0;A<B;A++){if(this.data[A]==C){return A}}}return 0};Spry.Data.DataSet.prototype.getCurrentRowNumber=function(){return this.getRowNumber(this.getCurrentRow())};Spry.Data.DataSet.prototype.setCurrentRowNumber=function(A){if(!this.data||A>=this.data.length){Spry.Debug.trace("Invalid row number: "+A+"\n");return }var B=this.data[A]["ds_RowID"];if(B==undefined||this.curRowID==B){return }this.setCurrentRow(B)};Spry.Data.DataSet.prototype.findRowsWithColumnValues=function(F,A,C){var D=[];var J=this.getData(C);if(J){var G=J.length;for(var E=0;E<G;E++){var I=J[E];var B=true;for(var H in F){if(F[H]!=I[H]){B=false;break}}if(B){if(A){return I}D.push(I)}}}return D};Spry.Data.DataSet.prototype.setColumnType=function(A,B){if(A){this.columnTypes[A]=B}};Spry.Data.DataSet.prototype.getColumnType=function(A){if(this.columnTypes[A]){return this.columnTypes[A]}return"string"};Spry.Data.DataSet.prototype.distinct=function(){if(this.data){var E=this.data;this.data=[];this.dataHash={};var A={};var B=0;for(var B=0;B<E.length;B++){var D=E[B];var F="";for(var C in D){if(C!="ds_RowID"){if(F){F+=","}F+=C+":\""+D[C]+"\""}}if(!A[F]){this.data.push(D);this.dataHash[D["ds_RowID"]]=D;A[F]=true}}}};Spry.Data.DataSet.prototype.getSortColumn=function(){return(this.lastSortColumns&&this.lastSortColumns.length>0)?this.lastSortColumns[0]:""};Spry.Data.DataSet.prototype.getSortOrder=function(){return this.lastSortOrder?this.lastSortOrder:""};Spry.Data.DataSet.prototype.sort=function(F,E){if(!F){return }if(typeof F=="string"){F=[F,"ds_RowID"]}else{if(F.length<2&&F[0]!="ds_RowID"){F.push("ds_RowID")}}if(!E){E="toggle"}if(E=="toggle"){if(this.lastSortColumns.length>0&&this.lastSortColumns[0]==F[0]&&this.lastSortOrder=="ascending"){E="descending"}else{E="ascending"}}if(E!="ascending"&&E!="descending"){Spry.Debug.reportError("Invalid sort order type specified: "+E+"\n");return }var D={oldSortColumns:this.lastSortColumns,oldSortOrder:this.lastSortOrder,newSortColumns:F,newSortOrder:E};this.notifyObservers("onPreSort",D);var B=F[F.length-1];var A=Spry.Data.DataSet.prototype.sort.getSortFunc(B,this.getColumnType(B),E);for(var C=F.length-2;C>=0;C--){B=F[C];A=Spry.Data.DataSet.prototype.sort.buildSecondarySortFunc(Spry.Data.DataSet.prototype.sort.getSortFunc(B,this.getColumnType(B),E),A)}if(this.unfilteredData){this.unfilteredData.sort(A);if(this.filterFunc){this.filter(this.filterFunc,true)}}else{this.data.sort(A)}this.lastSortColumns=F.slice(0);this.lastSortOrder=E;this.notifyObservers("onPostSort",D)};Spry.Data.DataSet.prototype.sort.getSortFunc=function(D,C,A){var B=null;if(C=="number"){if(A=="ascending"){B=function(F,E){return F[D]-E[D]}}else{B=function(F,E){return E[D]-F[D]}}}else{if(C=="date"){if(A=="ascending"){B=function(G,E){var H=G[D];var F=E[D];H=H?(new Date(H)):0;F=F?(new Date(F)):0;return H-F}}else{B=function(G,E){var H=G[D];var F=E[D];H=H?(new Date(H)):0;F=F?(new Date(F)):0;return F-H}}}else{if(A=="ascending"){B=function(K,J){var N=K[D].toString();var L=J[D].toString();var E=N.toLowerCase();var F=L.toLowerCase();var H=N.length>L.length?L.length:N.length;for(var G=0;G<H;G++){var O=E.charAt(G);var M=F.charAt(G);var I=N.charAt(G);var P=L.charAt(G);if(O>M){return 1}else{if(O<M){return -1}else{if(I>P){return 1}else{if(I<P){return -1}}}}}if(N.length==L.length){return 0}else{if(N.length>L.length){return 1}else{return -1}}}}else{B=function(K,J){var N=K[D].toString();var L=J[D].toString();var E=N.toLowerCase();var F=L.toLowerCase();var H=N.length>L.length?L.length:N.length;for(var G=0;G<H;G++){var O=E.charAt(G);var M=F.charAt(G);var I=N.charAt(G);var P=L.charAt(G);if(O>M){return -1}else{if(O<M){return 1}else{if(I>P){return -1}else{if(I<P){return 1}}}}}if(N.length==L.length){return 0}else{if(N.length>L.length){return -1}else{return 1}}}}}}return B};Spry.Data.DataSet.prototype.sort.buildSecondarySortFunc=function(B,A){return function(D,C){var E=B(D,C);if(E==0){E=A(D,C)}return E}};Spry.Data.DataSet.prototype.filterData=function(E,C){var D=false;if(!E){this.filterDataFunc=null;D=true}else{this.filterDataFunc=E;if(this.dataWasLoaded&&((this.unfilteredData&&this.unfilteredData.length)||(this.data&&this.data.length))){if(this.unfilteredData){this.data=this.unfilteredData;this.unfilteredData=null}var F=this.data;this.data=[];this.dataHash={};for(var B=0;B<F.length;B++){var A=E(this,F[B],B);if(A){this.data.push(A);this.dataHash[A["ds_RowID"]]=A}}D=true}}if(D){if(!C){this.disableNotifications();if(this.filterFunc){this.filter(this.filterFunc,true)}this.enableNotifications()}this.notifyObservers("onDataChanged")}};Spry.Data.DataSet.prototype.filter=function(F,C){var E=false;if(!F){if(this.filterFunc&&this.unfilteredData){this.data=this.unfilteredData;this.unfilteredData=null;this.filterFunc=null;E=true}}else{this.filterFunc=F;if(this.dataWasLoaded&&(this.unfilteredData||(this.data&&this.data.length))){if(!this.unfilteredData){this.unfilteredData=this.data}var D=this.unfilteredData;this.data=[];for(var B=0;B<D.length;B++){var A=F(this,D[B],B);if(A){this.data.push(A)}}E=true}}if(E){this.notifyObservers("onDataChanged")}};Spry.Data.DataSet.prototype.startLoadInterval=function(B){this.stopLoadInterval();if(B>0){var A=this;this.loadInterval=B;this.loadIntervalID=setInterval(function(){A.loadData()},B)}};Spry.Data.DataSet.prototype.stopLoadInterval=function(){if(this.loadIntervalID){clearInterval(this.loadIntervalID)}this.loadInterval=0;this.loadIntervalID=null};Spry.Data.DataSet.nextDataSetID=0;Spry.Data.XMLDataSet=function(B,A,C){Spry.Data.DataSet.call(this);this.url=B;this.xpath=A;this.doc=null;this.dataSetsForDataRefStrings=new Array;this.hasDataRefStrings=false;this.useCache=true;this.requestInfo=new Spry.Utils.loadURL.Request();this.requestInfo.extractRequestOptions(C,true);if(this.requestInfo.method=="POST"){if(!this.requestInfo.headers){this.requestInfo.headers={}}if(!this.requestInfo.headers["Content-Type"]){this.requestInfo.headers["Content-Type"]="application/x-www-form-urlencoded; charset=UTF-8"}}Spry.Utils.setOptions(this,C,true);this.recalculateDataSetDependencies();if(this.loadInterval>0){this.startLoadInterval(this.loadInterval)}};Spry.Data.XMLDataSet.prototype=new Spry.Data.DataSet();Spry.Data.XMLDataSet.prototype.constructor=Spry.Data.XMLDataSet;Spry.Data.XMLDataSet.prototype.recalculateDataSetDependencies=function(){this.hasDataRefStrings=false;if(!this.url){return }var i=0;for(i=0;i<this.dataSetsForDataRefStrings.length;i++){var ds=this.dataSetsForDataRefStrings[i];if(ds){ds.removeObserver(this)}}this.dataSetsForDataRefStrings=new Array();var regionStrs=[this.url,this.xpath,this.requestInfo.postData];var postData=this.requestInfo.postData;if(postData&&(typeof postData)=="string"){regionStrs.push(postData)}var dsCount=0;for(var n=0;n<regionStrs.length;n++){var tokens=Spry.Data.Region.getTokensFromStr(regionStrs[n]);for(i=0;tokens&&i<tokens.length;i++){if(tokens[i].search(/{[^}:]+::[^}]+}/)!=-1){var dsName=tokens[i].replace(/^\{|::.*\}/g,"");var ds=null;if(!this.dataSetsForDataRefStrings[dsName]){try{ds=eval(dsName)}catch(e){ds=null}if(dsName&&ds){this.dataSetsForDataRefStrings[dsName]=ds;this.dataSetsForDataRefStrings[dsCount++]=ds;this.hasDataRefStrings=true}}}}}for(i=0;i<this.dataSetsForDataRefStrings.length;i++){var ds=this.dataSetsForDataRefStrings[i];ds.addObserver(this)}};Spry.Data.XMLDataSet.prototype.attemptLoadData=function(){for(var A=0;A<this.dataSetsForDataRefStrings.length;A++){var B=this.dataSetsForDataRefStrings[A];if(B.getLoadDataRequestIsPending()||!B.getDataWasLoaded()){return }}this.loadData()};Spry.Data.XMLDataSet.prototype.onCurrentRowChanged=function(B,A){this.attemptLoadData()};Spry.Data.XMLDataSet.prototype.onPostSort=function(B,A){this.attemptLoadData()};Spry.Data.XMLDataSet.prototype.onDataChanged=function(B,A){this.attemptLoadData()};Spry.Data.XMLDataSet.prototype.loadData=function(){if(!this.url||!this.xpath){return }this.cancelLoadData();var C=this.url;var A=this.requestInfo.postData;if(this.hasDataRefStrings){var B=true;for(var D=0;D<this.dataSetsForDataRefStrings.length;D++){var F=this.dataSetsForDataRefStrings[D];if(F.getLoadDataRequestIsPending()){B=false}else{if(!F.getDataWasLoaded()){F.loadData();B=false}}}if(!B){return }C=Spry.Data.Region.processDataRefString(null,this.url,this.dataSetsForDataRefStrings);if(!C){return }if(A&&(typeof A)=="string"){A=Spry.Data.Region.processDataRefString(null,A,this.dataSetsForDataRefStrings)}}this.notifyObservers("onPreLoad");this.data=null;this.dataWasLoaded=false;this.unfilteredData=null;this.dataHash=null;this.curRowID=0;var E=this.requestInfo.clone();E.url=C;E.postData=A;this.pendingRequest=new Object;this.pendingRequest.data=Spry.Data.XMLDataSet.LoadManager.loadData(E,this,this.useCache)};Spry.Data.XMLDataSet.prototype.cancelLoadData=function(){if(this.pendingRequest){Spry.Data.XMLDataSet.LoadManager.cancelLoadData(this.pendingRequest.data,this);this.pendingRequest=null}};Spry.Data.XMLDataSet.prototype.getURL=function(){return this.url};Spry.Data.XMLDataSet.prototype.setURL=function(B,A){if(this.url==B){return }this.url=B;if(A){this.requestInfo.extractRequestOptions(A)}this.cancelLoadData();this.recalculateDataSetDependencies();this.dataWasLoaded=false};Spry.Data.XMLDataSet.prototype.getDocument=function(){return this.doc};Spry.Data.XMLDataSet.prototype.getXPath=function(){return this.xpath};Spry.Data.XMLDataSet.prototype.setXPath=function(A){if(this.xpath!=A){this.xpath=A;if(this.dataWasLoaded&&this.doc){this.setDataFromDoc(this.doc)}}};Spry.Data.XMLDataSet.prototype.setDataFromDoc=function(B){this.pendingRequest=null;var A=null;A=Spry.Utils.getRecordSetFromXMLDoc(B,Spry.Data.Region.processDataRefString(null,this.xpath,this.dataSetsForDataRefStrings));if(!A){Spry.Debug.reportError("Spry.Data.XMLDataSet.setDataFromDoc() failed to create dataSet '"+this.name+"'for '"+this.xpath+"' - "+this.url+"\n");return }this.doc=A.xmlDoc;this.data=A.data;this.dataHash=A.dataHash;this.dataWasLoaded=(this.doc!=null);if(this.filterDataFunc){this.filterData(this.filterDataFunc,true)}if(this.distinctOnLoad){this.distinct()}if(this.keepSorted&&this.getSortColumn()){this.sort(this.lastSortColumns,this.lastSortOrder)}else{if(this.sortOnLoad){this.sort(this.sortOnLoad,this.sortOrderOnLoad)}}if(this.filterFunc){this.filter(this.filterFunc,true)}if(this.data&&this.data.length>0){this.curRowID=this.data[0]["ds_RowID"]}else{this.curRowID=0}this.notifyObservers("onPostLoad");this.notifyObservers("onDataChanged")};Spry.Data.XMLDataSet.prototype.onRequestResponse=function(A,B){this.setDataFromDoc(A.doc)};Spry.Data.XMLDataSet.prototype.onRequestError=function(A,B){this.notifyObservers("onLoadError",B)};Spry.Data.XMLDataSet.LoadManager={};Spry.Data.XMLDataSet.LoadManager.cache=[];Spry.Data.XMLDataSet.LoadManager.CachedRequest=function(A){Spry.Utils.Notifier.call(this);this.reqInfo=A;this.doc=null;this.timer=null;this.state=Spry.Data.XMLDataSet.LoadManager.CachedRequest.NOT_LOADED};Spry.Data.XMLDataSet.LoadManager.CachedRequest.prototype=new Spry.Utils.Notifier();Spry.Data.XMLDataSet.LoadManager.CachedRequest.prototype.constructor=Spry.Data.XMLDataSet.LoadManager.CachedRequest;Spry.Data.XMLDataSet.LoadManager.CachedRequest.NOT_LOADED=1;Spry.Data.XMLDataSet.LoadManager.CachedRequest.LOAD_REQUESTED=2;Spry.Data.XMLDataSet.LoadManager.CachedRequest.LOAD_FAILED=3;Spry.Data.XMLDataSet.LoadManager.CachedRequest.LOAD_SUCCESSFUL=4;Spry.Data.XMLDataSet.LoadManager.CachedRequest.prototype.loadDataCallback=function(A){if(A.xhRequest.readyState!=4){return }var B=A.xhRequest.responseXML;if(A.xhRequest.status!=200){if(A.xhRequest.status==0){if(A.xhRequest.responseText&&(!B||!B.firstChild)){B=Spry.Utils.stringToXMLDoc(A.xhRequest.responseText)}}}if(!B||!B.firstChild||B.firstChild.nodeName=="parsererror"){this.state=Spry.Data.XMLDataSet.LoadManager.CachedRequest.LOAD_FAILED;this.notifyObservers("onRequestError",A);this.observers.length=0;return }this.doc=B;this.state=Spry.Data.XMLDataSet.LoadManager.CachedRequest.LOAD_SUCCESSFUL;this.notifyObservers("onRequestResponse",A);this.observers.length=0};Spry.Data.XMLDataSet.LoadManager.CachedRequest.prototype.loadData=function(){var A=this;this.cancelLoadData();this.doc=null;this.state=Spry.Data.XMLDataSet.LoadManager.CachedRequest.LOAD_REQUESTED;var B=this.reqInfo.clone();B.successCallback=function(C){A.loadDataCallback(C)};B.errorCallback=B.successCallback;this.timer=setTimeout(function(){A.timer=null;Spry.Utils.loadURL(B.method,B.url,B.async,B.successCallback,B)},0)};Spry.Data.XMLDataSet.LoadManager.CachedRequest.prototype.cancelLoadData=function(){if(this.state==Spry.Data.XMLDataSet.LoadManager.CachedRequest.LOAD_REQUESTED){if(this.timer){this.timer.clearTimeout();this.timer=null}this.doc=null;this.state=Spry.Data.XMLDataSet.LoadManager.CachedRequest.NOT_LOADED}};Spry.Data.XMLDataSet.LoadManager.getCacheKey=function(A){return A.method+"::"+A.url+"::"+A.postData+"::"+A.username};Spry.Data.XMLDataSet.LoadManager.loadData=function(C,D,B){if(!C){return null}var A=null;var E=null;if(B){E=Spry.Data.XMLDataSet.LoadManager.getCacheKey(C);A=Spry.Data.XMLDataSet.LoadManager.cache[E]}if(A){if(A.state==Spry.Data.XMLDataSet.LoadManager.CachedRequest.LOAD_REQUESTED){if(D){A.addObserver(D)}return A}else{if(A.state==Spry.Data.XMLDataSet.LoadManager.CachedRequest.LOAD_SUCCESSFUL){if(D){setTimeout(function(){D.setDataFromDoc(A.doc)},0)}return A}}}if(!A){A=new Spry.Data.XMLDataSet.LoadManager.CachedRequest(C);if(B){Spry.Data.XMLDataSet.LoadManager.cache[E]=A;A.addObserver({onRequestError:function(){Spry.Data.XMLDataSet.LoadManager.cache[E]=undefined}})}}if(D){A.addObserver(D)}A.loadData();return A};Spry.Data.XMLDataSet.LoadManager.cancelLoadData=function(A,B){if(A){if(B){A.removeObserver(B)}else{A.cancelLoadData()}}};Spry.Data.Region=function(D,A,H,G,K,B,E,J){this.regionNode=D;this.name=A;this.isDetailRegion=H;this.data=G;this.dataSets=K;this.hasBehaviorAttributes=J;this.tokens=null;this.currentState=null;this.states={ready:true};this.stateMap={};Spry.Utils.setOptions(this.states,B);Spry.Utils.setOptions(this.stateMap,E);for(var F=0;F<this.dataSets.length;F++){var C=this.dataSets[F];try{if(C){C.addObserver(this)}}catch(I){Spry.Debug.reportError("Failed to add '"+this.name+"' as a dataSet observer!\n")}}};Spry.Data.Region.hiddenRegionClassName="SpryHiddenRegion";Spry.Data.Region.evenRowClassName="even";Spry.Data.Region.oddRowClassName="odd";Spry.Data.Region.notifiers={};Spry.Data.Region.evalScripts=true;Spry.Data.Region.addObserver=function(B,A){var C=Spry.Data.Region.notifiers[B];if(!C){C=new Spry.Utils.Notifier();Spry.Data.Region.notifiers[B]=C}C.addObserver(A)};Spry.Data.Region.removeObserver=function(B,A){var C=Spry.Data.Region.notifiers[B];if(C){C.removeObserver(A)}};Spry.Data.Region.notifyObservers=function(B,D,C){var E=Spry.Data.Region.notifiers[D.name];if(E){var A={};if(C&&typeof C=="object"){A=C}else{A.data=C}A.region=D;A.regionID=D.name;A.regionNode=D.regionNode;E.notifyObservers(B,A)}};Spry.Data.Region.RS_Error=1;Spry.Data.Region.RS_LoadingData=2;Spry.Data.Region.RS_PreUpdate=4;Spry.Data.Region.RS_PostUpdate=8;Spry.Data.Region.prototype.getState=function(){return this.currentState};Spry.Data.Region.prototype.mapState=function(B,A){this.stateMap[B]=A};Spry.Data.Region.prototype.getMappedState=function(B){var A=this.stateMap[B];return A?A:B};Spry.Data.Region.prototype.setState=function(B,C){var A={state:B,mappedState:this.getMappedState(B)};if(!C){Spry.Data.Region.notifyObservers("onPreStateChange",this,A)}this.currentState=A.mappedState?A.mappedState:B;if(this.states[B]){if(!C){Spry.Data.Region.notifyObservers("onPreUpdate",this,{state:this.currentState})}var D=this.transform();if(Spry.Data.Region.debug){Spry.Debug.trace("<hr />Generated region markup for '"+this.name+"':<br /><br />"+Spry.Utils.encodeEntities(D))}Spry.Utils.setInnerHTML(this.regionNode,D,!Spry.Data.Region.evalScripts);if(this.hasBehaviorAttributes){this.attachBehaviors()}if(!C){Spry.Data.Region.notifyObservers("onPostUpdate",this,{state:this.currentState})}}if(!C){Spry.Data.Region.notifyObservers("onPostStateChange",this,A)}};Spry.Data.Region.prototype.getDataSets=function(){return this.dataSets};Spry.Data.Region.prototype.addDataSet=function(B){if(!B){return }if(!this.dataSets){this.dataSets=new Array}for(var A=0;A<this.dataSets.length;A++){if(this.dataSets[A]==B){return }}this.dataSets.push(B);B.addObserver(this)};Spry.Data.Region.prototype.removeDataSet=function(B){if(!B||this.dataSets){return }for(var A=0;A<this.dataSets.length;A++){if(this.dataSets[A]==B){this.dataSets.splice(A,1);B.removeObserver(this);return }}};Spry.Data.Region.prototype.onPreLoad=function(A){if(this.currentState!="loading"){this.setState("loading")}};Spry.Data.Region.prototype.onLoadError=function(A){if(this.currentState!="error"){this.setState("error")}Spry.Data.Region.notifyObservers("onError",this)};Spry.Data.Region.prototype.onCurrentRowChanged=function(A,B){if(this.isDetailRegion){this.updateContent()}};Spry.Data.Region.prototype.onPostSort=function(A,B){this.updateContent()};Spry.Data.Region.prototype.onDataChanged=function(A,B){this.updateContent()};Spry.Data.Region.enableBehaviorAttributes=true;Spry.Data.Region.behaviorAttrs={};Spry.Data.Region.behaviorAttrs["spry:select"]={attach:function(A,C,D){var B=null;try{B=C.attributes.getNamedItem("spry:selectgroup").value}catch(E){}if(!B){B="default"}Spry.Utils.addEventListener(C,"click",function(F){Spry.Utils.SelectionManager.select(B,C,D)},false);if(C.attributes.getNamedItem("spry:selected")){Spry.Utils.SelectionManager.select(B,C,D)}}};Spry.Data.Region.behaviorAttrs["spry:hover"]={attach:function(A,B,C){Spry.Utils.addEventListener(B,"mouseover",function(D){Spry.Utils.addClassName(B,C)},false);Spry.Utils.addEventListener(B,"mouseout",function(D){Spry.Utils.removeClassName(B,C)},false)}};Spry.Data.Region.setUpRowNumberForEvenOddAttr=function(D,A,E,B){if(!E){Spry.Debug.showError("The "+A+" attribute requires a CSS class name as its value!");D.attributes.removeNamedItem(A);return }var F="";var C=E.split(/\s/);if(C.length>1){F=C[0];D.setAttribute(A,C[1])}D.setAttribute(B,"{"+(F?(F+"::"):"")+"ds_RowNumber}")};Spry.Data.Region.behaviorAttrs["spry:even"]={setup:function(A,B){Spry.Data.Region.setUpRowNumberForEvenOddAttr(A,"spry:even",B,"spryevenrownumber")},attach:function(A,B,C){if(C){rowNumAttr=B.attributes.getNamedItem("spryevenrownumber");if(rowNumAttr&&rowNumAttr.value){var D=parseInt(rowNumAttr.value);if(D%2){Spry.Utils.addClassName(B,C)}}}B.removeAttribute("spry:even");B.removeAttribute("spryevenrownumber")}};Spry.Data.Region.behaviorAttrs["spry:odd"]={setup:function(A,B){Spry.Data.Region.setUpRowNumberForEvenOddAttr(A,"spry:odd",B,"spryoddrownumber")},attach:function(A,B,C){if(C){rowNumAttr=B.attributes.getNamedItem("spryoddrownumber");if(rowNumAttr&&rowNumAttr.value){var D=parseInt(rowNumAttr.value);if(D%2==0){Spry.Utils.addClassName(B,C)}}}B.removeAttribute("spry:odd");B.removeAttribute("spryoddrownumber")}};Spry.Data.Region.setRowAttrClickHandler=function(node,dsName,rowAttr,funcName){if(dsName){var ds=null;try{ds=Spry.Utils.eval(dsName)}catch(e){ds=null}if(ds){rowIDAttr=node.attributes.getNamedItem(rowAttr);if(rowIDAttr){var rowAttrVal=rowIDAttr.value;if(rowAttrVal){Spry.Utils.addEventListener(node,"click",function(event){ds[funcName](rowAttrVal)},false)}}}}};Spry.Data.Region.behaviorAttrs["spry:setrow"]={setup:function(A,B){if(!B){Spry.Debug.reportError("The spry:setrow attribute requires a data set name as its value!");A.removeAttribute("spry:setrow");return }A.setAttribute("spryrowid","{"+B+"::ds_RowID}")},attach:function(A,B,C){Spry.Data.Region.setRowAttrClickHandler(B,C,"spryrowid","setCurrentRow");B.removeAttribute("spry:setrow");B.removeAttribute("spryrowid")}};Spry.Data.Region.behaviorAttrs["spry:setrownumber"]={setup:function(A,B){if(!B){Spry.Debug.reportError("The spry:setrownumber attribute requires a data set name as its value!");A.removeAttribute("spry:setrownumber");return }A.setAttribute("spryrownumber","{"+B+"::ds_RowID}")},attach:function(A,B,C){Spry.Data.Region.setRowAttrClickHandler(B,C,"spryrownumber","setCurrentRowNumber");B.removeAttribute("spry:setrownumber");B.removeAttribute("spryrownumber")}};Spry.Data.Region.behaviorAttrs["spry:sort"]={attach:function(rgn,node,value){if(!value){return }var ds=rgn.getDataSets()[0];var sortOrder="toggle";var colArray=value.split(/\s/);if(colArray.length>1){try{var specifiedDS=eval(colArray[0]);if(specifiedDS&&(typeof specifiedDS)=="object"){ds=specifiedDS;colArray.shift()}}catch(e){}if(colArray.length>1){var str=colArray[colArray.length-1];if(str=="ascending"||str=="descending"||str=="toggle"){sortOrder=str;colArray.pop()}}}if(ds&&colArray.length>0){Spry.Utils.addEventListener(node,"click",function(event){ds.sort(colArray,sortOrder)},false)}node.removeAttribute("spry:sort")}};Spry.Data.Region.prototype.attachBehaviors=function(){var A=this;Spry.Utils.getNodesByFunc(this.regionNode,function(F){if(!F||F.nodeType!=1){return false}try{var C=Spry.Data.Region.behaviorAttrs;for(var D in C){var B=F.attributes.getNamedItem(D);if(B){var E=C[D];if(E&&E.attach){E.attach(A,F,B.value)}}}}catch(G){}return false})};Spry.Data.Region.prototype.updateContent=function(){var A=true;var D=this.getDataSets();if(!D||D.length<1){Spry.Debug.reportError("updateContent(): Region '"+this.name+"' has no data set!\n");return }for(var B=0;B<D.length;B++){var C=D[B];if(C){if(C.getLoadDataRequestIsPending()){A=false}else{if(!C.getDataWasLoaded()){C.loadData();A=false}}}}if(!A){Spry.Data.Region.notifyObservers("onLoadingData",this);return }this.setState("ready")};Spry.Data.Region.prototype.clearContent=function(){this.regionNode.innerHTML=""};Spry.Data.Region.processContentPI=function(G){var F="";var D=/<!--\s*<\/?spry:content\s*[^>]*>\s*-->/mg;var A=0;var C=0;while(G.length){var B=D.exec(G);if(!B||!B[0]){F+=G.substr(A,G.length-A);break}if(!C&&B.index!=A){F+=G.substr(A,B.index-A)}if(B[0].search(/<\//)!=-1){--C;if(C){Spry.Debug.reportError("Nested spry:content regions are not allowed!\n")}}else{++C;var E=B[0].replace(/.*\bdataref="/,"");F+=E.replace(/".*$/,"")}A=D.lastIndex}return F};Spry.Data.Region.prototype.tokenizeData=function(dataStr){if(!dataStr){return null}var rootToken=new Spry.Data.Region.Token(Spry.Data.Region.Token.LIST_TOKEN,null,null,null);var tokenStack=new Array;var parseStr=Spry.Data.Region.processContentPI(dataStr);tokenStack.push(rootToken);var regexp=/((<!--\s*){0,1}<\/{0,1}spry:[^>]+>(\s*-->){0,1})|((\{|%7[bB])[^\}\s%]+(\}|%7[dD]))/mg;var searchStartIndex=0;while(parseStr.length){var results=regexp.exec(parseStr);var token=null;if(!results||!results[0]){var str=parseStr.substr(searchStartIndex,parseStr.length-searchStartIndex);token=new Spry.Data.Region.Token(Spry.Data.Region.Token.STRING_TOKEN,null,str,str);tokenStack[tokenStack.length-1].addChild(token);break}if(results.index!=searchStartIndex){var str=parseStr.substr(searchStartIndex,results.index-searchStartIndex);token=new Spry.Data.Region.Token(Spry.Data.Region.Token.STRING_TOKEN,null,str,str);tokenStack[tokenStack.length-1].addChild(token)}if(results[0].search(/^({|%7[bB])/)!=-1){var valueName=results[0];var regionStr=results[0];valueName=valueName.replace(/^({|%7[bB])/,"");valueName=valueName.replace(/(}|%7[dD])$/,"");var dataSetName=null;var splitArray=valueName.split(/::/);if(splitArray.length>1){dataSetName=splitArray[0];valueName=splitArray[1]}regionStr=regionStr.replace(/^%7[bB]/,"{");regionStr=regionStr.replace(/%7[dD]$/,"}");token=new Spry.Data.Region.Token(Spry.Data.Region.Token.VALUE_TOKEN,dataSetName,valueName,new String(regionStr));tokenStack[tokenStack.length-1].addChild(token)}else{if(results[0].charAt(0)=="<"){var piName=results[0].replace(/^(<!--\s*){0,1}<\/?/,"");piName=piName.replace(/>(\s*-->){0,1}|\s.*$/,"");if(results[0].search(/<\//)!=-1){if(tokenStack[tokenStack.length-1].tokenType!=Spry.Data.Region.Token.PROCESSING_INSTRUCTION_TOKEN){Spry.Debug.reportError("Invalid processing instruction close tag: "+piName+" -- "+results[0]+"\n");return null}tokenStack.pop()}else{var piDesc=Spry.Data.Region.PI.instructions[piName];if(piDesc){var dataSet=null;var selectedDataSetName="";if(results[0].search(/^.*\bselect=\"/)!=-1){selectedDataSetName=results[0].replace(/^.*\bselect=\"/,"");selectedDataSetName=selectedDataSetName.replace(/".*$/,"");if(selectedDataSetName){try{dataSet=eval(selectedDataSetName)}catch(e){Spry.Debug.reportError("Caught exception in tokenizeData() while trying to retrieve data set ("+selectedDataSetName+"): "+e+"\n");dataSet=null;selectedDataSetName=""}}}var jsExpr=null;if(results[0].search(/^.*\btest=\"/)!=-1){jsExpr=results[0].replace(/^.*\btest=\"/,"");jsExpr=jsExpr.replace(/".*$/,"");jsExpr=Spry.Utils.decodeEntities(jsExpr)}var regionState=null;if(results[0].search(/^.*\bname=\"/)!=-1){regionState=results[0].replace(/^.*\bname=\"/,"");regionState=regionState.replace(/".*$/,"");regionState=Spry.Utils.decodeEntities(regionState)}var piData=new Spry.Data.Region.Token.PIData(piName,selectedDataSetName,jsExpr,regionState);token=new Spry.Data.Region.Token(Spry.Data.Region.Token.PROCESSING_INSTRUCTION_TOKEN,dataSet,piData,new String(results[0]));tokenStack[tokenStack.length-1].addChild(token);tokenStack.push(token)}else{Spry.Debug.reportError("Unsupported region processing instruction: "+results[0]+"\n");return null}}}else{Spry.Debug.reportError("Invalid region token: "+results[0]+"\n");return null}}searchStartIndex=regexp.lastIndex}return rootToken};Spry.Data.Region.prototype.processTokenChildren=function(E,B){var F=[""];var A=E.children.length;var D=E.children;for(var C=0;C<A;C++){F.push(this.processTokens(D[C],B))}return F.join("")};Spry.Data.Region.prototype.processTokens=function(token,processContext){if(!processContext){processContext=new Spry.Data.Region.ProcessingContext(this);if(!processContext){return""}}var outputStr="";var i=0;switch(token.tokenType){case Spry.Data.Region.Token.LIST_TOKEN:outputStr+=this.processTokenChildren(token,processContext);break;case Spry.Data.Region.Token.STRING_TOKEN:outputStr+=token.data;break;case Spry.Data.Region.Token.PROCESSING_INSTRUCTION_TOKEN:if(token.data.name=="spry:repeat"){var dataSet=null;if(token.dataSet){dataSet=token.dataSet}else{dataSet=this.dataSets[0]}if(dataSet){var dsContext=processContext.getDataSetContext(dataSet);if(!dsContext){Spry.Debug.reportError("processTokens() failed to get a data set context!\n");break}var numRows=dsContext.getNumRows();var dataSetRows=dataSet.getData();dsContext.pushState();for(i=0;i<numRows;i++){dsContext.setRowIndex(i);var testVal=true;if(token.data.jsExpr){var jsExpr=Spry.Data.Region.processDataRefString(processContext,token.data.jsExpr,null,true);try{testVal=Spry.Utils.eval(jsExpr)}catch(e){Spry.Debug.trace("Caught exception in Spry.Data.Region.prototype.processTokens while evaluating: "+jsExpr+"\n    Exception:"+e+"\n");testVal=true}}if(testVal){outputStr+=this.processTokenChildren(token,processContext)}}dsContext.popState()}}else{if(token.data.name=="spry:if"){var testVal=true;if(token.data.jsExpr){var jsExpr=Spry.Data.Region.processDataRefString(processContext,token.data.jsExpr,null,true);try{testVal=Spry.Utils.eval(jsExpr)}catch(e){Spry.Debug.trace("Caught exception in Spry.Data.Region.prototype.processTokens while evaluating: "+jsExpr+"\n    Exception:"+e+"\n");testVal=true}}if(testVal){outputStr+=this.processTokenChildren(token,processContext)}}else{if(token.data.name=="spry:choose"){var defaultChild=null;var childToProcess=null;var testVal=false;var j=0;for(j=0;j<token.children.length;j++){var child=token.children[j];if(child.tokenType==Spry.Data.Region.Token.PROCESSING_INSTRUCTION_TOKEN){if(child.data.name=="spry:when"){if(child.data.jsExpr){var jsExpr=Spry.Data.Region.processDataRefString(processContext,child.data.jsExpr,null,true);try{testVal=Spry.Utils.eval(jsExpr)}catch(e){Spry.Debug.trace("Caught exception in Spry.Data.Region.prototype.processTokens while evaluating: "+jsExpr+"\n    Exception:"+e+"\n");testVal=false}if(testVal){childToProcess=child;break}}}else{if(child.data.name=="spry:default"){defaultChild=child}}}}if(!childToProcess&&defaultChild){childToProcess=defaultChild}if(childToProcess){outputStr+=this.processTokenChildren(childToProcess,processContext)}}else{if(token.data.name=="spry:state"){var testVal=true;if(!token.data.regionState||token.data.regionState==this.currentState){outputStr+=this.processTokenChildren(token,processContext)}}else{Spry.Debug.reportError("processTokens(): Unknown processing instruction: "+token.data.name+"\n");return""}}}}break;case Spry.Data.Region.Token.VALUE_TOKEN:var dataSet=token.dataSet;if(!dataSet&&this.dataSets&&this.dataSets.length>0&&this.dataSets[0]){dataSet=this.dataSets[0]}if(!dataSet){Spry.Debug.reportError("processTokens(): Value reference has no data set specified: "+token.regionStr+"\n");return""}var dsContext=processContext.getDataSetContext(dataSet);if(!dsContext){Spry.Debug.reportError("processTokens: Failed to get a data set context!\n");return""}var ds=dsContext.getDataSet();if(token.data=="ds_RowNumber"){outputStr+=dsContext.getRowIndex()}else{if(token.data=="ds_RowNumberPlus1"){outputStr+=(dsContext.getRowIndex()+1)}else{if(token.data=="ds_RowCount"){outputStr+=dsContext.getNumRows()}else{if(token.data=="ds_UnfilteredRowCount"){outputStr+=dsContext.getNumRows(true)}else{if(token.data=="ds_CurrentRowNumber"){outputStr+=ds.getRowNumber(ds.getCurrentRow())}else{if(token.data=="ds_CurrentRowID"){outputStr+=ds.curRowID}else{if(token.data=="ds_EvenOddRow"){outputStr+=(dsContext.getRowIndex()%2)?Spry.Data.Region.evenRowClassName:Spry.Data.Region.oddRowClassName}else{if(token.data=="ds_SortOrder"){outputStr+=ds.getSortOrder()}else{if(token.data=="ds_SortColumn"){outputStr+=ds.getSortColumn()}else{var curDataSetRow=dsContext.getCurrentRow();if(curDataSetRow){outputStr+=curDataSetRow[token.data]}}}}}}}}}}break;default:Spry.Debug.reportError("processTokens(): Invalid token type: "+token.regionStr+"\n");break}return outputStr};Spry.Data.Region.prototype.transform=function(){if(this.data&&!this.tokens){this.tokens=this.tokenizeData(this.data)}if(!this.tokens){return""}return this.processTokens(this.tokens,null)};Spry.Data.Region.PI={};Spry.Data.Region.PI.instructions={};Spry.Data.Region.PI.buildOpenTagForValueAttr=function(C,A,B){if(!C||!A){return""}var F="";try{var E=C.attributes.getNamedItem(A);if(E&&E.value){F=Spry.Utils.encodeEntities(E.value)}}catch(D){F=""}if(!F){Spry.Debug.reportError(A+" attribute requires a JavaScript expression that returns true or false!\n");return""}return"<"+Spry.Data.Region.PI.instructions[A].tagName+" "+B+"=\""+F+"\">"};Spry.Data.Region.PI.buildOpenTagForTest=function(B,A){return Spry.Data.Region.PI.buildOpenTagForValueAttr(B,A,"test")};Spry.Data.Region.PI.buildOpenTagForState=function(B,A){return Spry.Data.Region.PI.buildOpenTagForValueAttr(B,A,"name")};Spry.Data.Region.PI.buildOpenTagForRepeat=function(D,B){if(!D||!B){return""}var A="";try{var G=D.attributes.getNamedItem(B);if(G&&G.value){A=G.value;A=A.replace(/\s/g,"")}}catch(F){A=""}if(!A){Spry.Debug.reportError(B+" attribute requires a data set name!\n");return""}var C="";try{var E=D.attributes.getNamedItem("spry:test");if(E){if(E.value){C=" test=\""+Spry.Utils.encodeEntities(E.value)+"\""}D.attributes.removeNamedItem(E.nodeName)}}catch(F){C=""}return"<"+Spry.Data.Region.PI.instructions[B].tagName+" select=\""+A+"\""+C+">"};Spry.Data.Region.PI.buildOpenTagForContent=function(C,A){if(!C||!A){return""}var E="";try{var B=C.attributes.getNamedItem(A);if(B&&B.value){E=Spry.Utils.encodeEntities(B.value)}}catch(D){E=""}if(!E){Spry.Debug.reportError(A+" attribute requires a data reference!\n");return""}return"<"+Spry.Data.Region.PI.instructions[A].tagName+" dataref=\""+E+"\">"};Spry.Data.Region.PI.buildOpenTag=function(B,A){return"<"+Spry.Data.Region.PI.instructions[A].tagName+">"};Spry.Data.Region.PI.buildCloseTag=function(B,A){return"</"+Spry.Data.Region.PI.instructions[A].tagName+">"};Spry.Data.Region.PI.instructions["spry:state"]={tagName:"spry:state",childrenOnly:false,getOpenTag:Spry.Data.Region.PI.buildOpenTagForState,getCloseTag:Spry.Data.Region.PI.buildCloseTag};Spry.Data.Region.PI.instructions["spry:if"]={tagName:"spry:if",childrenOnly:false,getOpenTag:Spry.Data.Region.PI.buildOpenTagForTest,getCloseTag:Spry.Data.Region.PI.buildCloseTag};Spry.Data.Region.PI.instructions["spry:repeat"]={tagName:"spry:repeat",childrenOnly:false,getOpenTag:Spry.Data.Region.PI.buildOpenTagForRepeat,getCloseTag:Spry.Data.Region.PI.buildCloseTag};Spry.Data.Region.PI.instructions["spry:repeatchildren"]={tagName:"spry:repeat",childrenOnly:true,getOpenTag:Spry.Data.Region.PI.buildOpenTagForRepeat,getCloseTag:Spry.Data.Region.PI.buildCloseTag};Spry.Data.Region.PI.instructions["spry:choose"]={tagName:"spry:choose",childrenOnly:true,getOpenTag:Spry.Data.Region.PI.buildOpenTag,getCloseTag:Spry.Data.Region.PI.buildCloseTag};Spry.Data.Region.PI.instructions["spry:when"]={tagName:"spry:when",childrenOnly:false,getOpenTag:Spry.Data.Region.PI.buildOpenTagForTest,getCloseTag:Spry.Data.Region.PI.buildCloseTag};Spry.Data.Region.PI.instructions["spry:default"]={tagName:"spry:default",childrenOnly:false,getOpenTag:Spry.Data.Region.PI.buildOpenTag,getCloseTag:Spry.Data.Region.PI.buildCloseTag};Spry.Data.Region.PI.instructions["spry:content"]={tagName:"spry:content",childrenOnly:true,getOpenTag:Spry.Data.Region.PI.buildOpenTagForContent,getCloseTag:Spry.Data.Region.PI.buildCloseTag};Spry.Data.Region.PI.orderedInstructions=["spry:state","spry:if","spry:repeat","spry:repeatchildren","spry:choose","spry:when","spry:default","spry:content"];Spry.Data.Region.getTokensFromStr=function(A){if(!A){return null}return A.match(/{[^}]+}/g)};Spry.Data.Region.processDataRefString=function(J,K,F,A){if(!K){return""}if(!J&&!F){return K}var H="";var M=new RegExp("\\{([^\\}:]+::)?[^\\}]+\\}","g");var I=0;while(I<K.length){var E=M.exec(K);if(!E||!E[0]){H+=K.substr(I,K.length-I);return H}if(E.index!=I){H+=K.substr(I,E.index-I)}var B="";if(E[0].search(/^\{[^}:]+::/)!=-1){B=E[0].replace(/^\{|::.*/g,"")}var L=E[0].replace(/^\{|.*::|\}/g,"");var N=null;if(J){var G=J.getDataSetContext(B);if(L=="ds_RowNumber"){H+=G.getRowIndex();N=null}else{if(L=="ds_RowNumberPlus1"){H+=(G.getRowIndex()+1);N=null}else{if(L=="ds_RowCount"){H+=G.getNumRows();N=null}else{if(L=="ds_UnfilteredRowCount"){H+=G.getNumRows(true);N=null}else{if(L=="ds_CurrentRowNumber"){var D=G.getDataSet();H+=D.getRowNumber(D.getCurrentRow());N=null}else{if(L=="ds_CurrentRowID"){var D=G.getDataSet();H+=""+D.curRowID;N=null}else{if(L=="ds_EvenOddRow"){H+=(G.getRowIndex()%2)?Spry.Data.Region.evenRowClassName:Spry.Data.Region.oddRowClassName;N=null}else{if(L=="ds_SortOrder"){H+=G.getDataSet().getSortOrder();N=null}else{if(L=="ds_SortColumn"){H+=G.getDataSet().getSortColumn();N=null}else{N=J.getCurrentRowForDataSet(B)}}}}}}}}}}else{var D=B?F[B]:F[0];if(D){N=D.getCurrentRow()}}if(N){H+=A?Spry.Utils.escapeQuotesAndLineBreaks(""+N[L]):N[L]}if(I==M.lastIndex){var C=E.index+E[0].length;if(C<K.length){H+=K.substr(C)}break}I=M.lastIndex}return H};Spry.Data.Region.strToDataSetsArray=function(str,returnRegionNames){var dataSetsArr=new Array;var foundHash={};if(!str){return dataSetsArr}str=str.replace(/\s+/g," ");str=str.replace(/^\s|\s$/g,"");var arr=str.split(/ /);for(var i=0;i<arr.length;i++){if(arr[i]&&!Spry.Data.Region.PI.instructions[arr[i]]){try{var dataSet=eval(arr[i]);if(!foundHash[arr[i]]){if(returnRegionNames){dataSetsArr.push(arr[i])}else{dataSetsArr.push(dataSet)}foundHash[arr[i]]=true}}catch(e){}}}return dataSetsArr};Spry.Data.Region.DSContext=function(B){var A=this;var C=B;var D=[-1];function E(){return D[D.length-1]}this.resetAll=function(){D=[C.getCurrentRow()]};this.getDataSet=function(){return C};this.getNumRows=function(F){return C.getRowCount(F)};this.getCurrentRow=function(){if(D.length<2||E()<0){return C.getCurrentRow()}var G=C.getData();var F=E();if(F<0||F>G.length){Spry.Debug.reportError("Invalid index used in Spry.Data.Region.DSContext.getCurrentRow()!\n");return null}return G[F]};this.getRowIndex=function(){var F=E();if(F>=0){return F}return C.getRowNumber(C.getCurrentRow())};this.setRowIndex=function(F){D[D.length-1]=F};this.pushState=function(){D.push(E())};this.popState=function(){if(D.length<2){Spry.Debug.reportError("Stack underflow in Spry.Data.Region.DSContext.popState()!\n");return }D.pop()}};Spry.Data.Region.ProcessingContext=function(region){var m_self=this;var m_region=region;var m_dataSetContexts=[];if(region&&region.dataSets){for(var i=0;i<region.dataSets.length;i++){m_dataSetContexts.push(new Spry.Data.Region.DSContext(region.dataSets[i]))}}this.getDataSetContext=function(dataSet){if(!dataSet){if(m_dataSetContexts.length>0){return m_dataSetContexts[0]}return null}if(typeof dataSet=="string"){try{dataSet=eval(dataSet)}catch(e){dataSet=null}if(!dataSet){return null}}for(var i=0;i<m_dataSetContexts.length;i++){var dsc=m_dataSetContexts[i];if(dsc.getDataSet()==dataSet){return dsc}}return null};this.getCurrentRowForDataSet=function(dataSet){var dsc=m_self.getDataSetContext(dataSet);if(dsc){return dsc.getCurrentRow()}return null}};Spry.Data.Region.Token=function(E,B,D,C){var A=this;this.tokenType=E;this.dataSet=B;this.data=D;this.regionStr=C;this.parent=null;this.children=null};Spry.Data.Region.Token.prototype.addChild=function(A){if(!A){return }if(!this.children){this.children=new Array}this.children.push(A);A.parent=this};Spry.Data.Region.Token.LIST_TOKEN=0;Spry.Data.Region.Token.STRING_TOKEN=1;Spry.Data.Region.Token.PROCESSING_INSTRUCTION_TOKEN=2;Spry.Data.Region.Token.VALUE_TOKEN=3;Spry.Data.Region.Token.PIData=function(B,C,D,E){var A=this;this.name=B;this.data=C;this.jsExpr=D;this.regionState=E};Spry.Utils.addLoadListener(function(){setTimeout(function(){Spry.Data.initRegions()},0)});var Spry;if(!Spry){Spry={}}Spry.forwards=1;Spry.backwards=2;Spry.linearTransition=1;Spry.sinusoidalTransition=2;if(!Spry.Effect){Spry.Effect={}}Spry.Effect.Registry=function(){this.elements=new Array();_AnimatedElement=function(A){this.element=A;this.currentEffect=-1;this.effectArray=new Array()};this.AnimatedElement=_AnimatedElement};Spry.Effect.Registry.prototype.getRegisteredEffect=function(D,E){var B=this.getIndexOfElement(D);if(B==-1){this.elements[this.elements.length]=new this.AnimatedElement(D);B=this.elements.length-1}var G=-1;for(var C=0;C<this.elements[B].effectArray.length;C++){if(this.elements[B].effectArray[C]){if(this.effectsAreTheSame(this.elements[B].effectArray[C],E)){G=C;if(this.elements[B].effectArray[C].isRunning==true){this.elements[B].effectArray[C].cancel()}this.elements[B].currentEffect=C;if(this.elements[B].effectArray[C].options&&(this.elements[B].effectArray[C].options.toggle!=null)){if(this.elements[B].effectArray[C].options.toggle==true){this.elements[B].effectArray[C].doToggle()}}else{this.elements[B].effectArray[C]=E}break}}}if(G==-1){var F=this.elements[B].effectArray.length;this.elements[B].effectArray[F]=E;this.elements[B].currentEffect=F}var A=this.elements[B].currentEffect;return this.elements[B].effectArray[A]};Spry.Effect.Registry.prototype.getIndexOfElement=function(B){var C=-1;for(var A=0;A<this.elements.length;A++){if(this.elements[A]){if(this.elements[A].element==B){C=A}}}return C};Spry.Effect.Registry.prototype.effectsAreTheSame=function(B,A){if(B.name!=A.name){return false}if(B.effectsArray!=null){for(var C=0;C<B.effectsArray.length;C++){if(!Spry.Effect.Utils.optionsAreIdentical(B.effectsArray[C].effect.options,A.effectsArray[C].effect.options)){return false}}}else{if(!Spry.Effect.Utils.optionsAreIdentical(B.options,A.options)){return false}}return true};var SpryRegistry=new Spry.Effect.Registry;if(!Spry.Effect.Utils){Spry.Effect.Utils={}}Spry.Effect.Utils.showError=function(A){alert("Spry.Effect ERR: "+A)};Spry.Effect.Utils.Position=function(){this.x=0;this.y=0;this.units="px"};Spry.Effect.Utils.Rectangle=function(){this.width=0;this.height=0;this.units="px"};Spry.Effect.Utils.PositionedRectangle=function(){this.position=new Spry.Effect.Utils.Position;this.rectangle=new Spry.Effect.Utils.Rectangle};Spry.Effect.Utils.intToHex=function(B){var A=B.toString(16);if(A.length==1){A="0"+A}return A};Spry.Effect.Utils.hexToInt=function(A){return parseInt(A,16)};Spry.Effect.Utils.rgb=function(B,D,C){var E=Spry.Effect.Utils.intToHex(B);var A=Spry.Effect.Utils.intToHex(D);var F=Spry.Effect.Utils.intToHex(C);compositeColorHex=E.concat(A,F);compositeColorHex="#"+compositeColorHex;return compositeColorHex};Spry.Effect.Utils.camelize=function(A){var E=A.split("-");var B=true;var C="";for(var D=0;D<E.length;D++){if(E[D].length>0){if(B){C=E[D];B=false}else{var F=E[D];C+=F.charAt(0).toUpperCase()+F.substring(1)}}}return C};Spry.Effect.Utils.isPercentValue=function(B){var A=false;try{if(B.lastIndexOf("%")>0){A=true}}catch(C){}return A};Spry.Effect.Utils.getPercentValue=function(B){var A=0;try{A=Number(B.substring(0,B.lastIndexOf("%")))}catch(C){Spry.Effect.Utils.showError("Spry.Effect.Utils.getPercentValue: "+C)}return A};Spry.Effect.Utils.getPixelValue=function(B){var A=0;try{A=Number(B.substring(0,B.lastIndexOf("px")))}catch(C){}return A};Spry.Effect.Utils.getFirstChildElement=function(B){if(B){var A=B.firstChild;while(A){if(A.nodeType==1){return A}A=A.nextSibling}}return null};Spry.Effect.Utils.fetchChildImages=function(B,E){if(!B||B.nodeType!=1||!E){return }if(B.hasChildNodes()){var A=B.getElementsByTagName("img");var D=A.length;for(var C=0;C<D;C++){var G=A[C];var F=Spry.Effect.getDimensions(G);E.push([G,F.width,F.height])}}};Spry.Effect.Utils.optionsAreIdentical=function(D,C){if(D==null&&C==null){return true}if(D!=null&&C!=null){var B=0;var G=0;for(var A in D){B++}for(var F in C){G++}if(B!=G){return false}for(var E in D){if(D[E]===undefined){if(C[E]!==undefined){return false}}else{if((C[E]===undefined)||(D[E]!=C[E])){return false}}}return true}return false};Spry.Effect.getElement=function(B){var A=null;if(B&&typeof B=="string"){A=document.getElementById(B)}else{A=B}if(A==null){Spry.Effect.Utils.showError("Element \""+B+"\" not found.")}return A};Spry.Effect.getStyleProp=function(A,D){var B;try{B=A.style[Spry.Effect.Utils.camelize(D)];if(!B){if(A.currentStyle){B=A.currentStyle[Spry.Effect.Utils.camelize(D)]}}}catch(C){Spry.Effect.Utils.showError("Spry.Effect.getStyleProp: "+C)}return B=="auto"?null:B};Spry.Effect.getStylePropRegardlessOfDisplayState=function(C,G,E){var F=E?E:C;var D=Spry.Effect.getStyleProp(F,"display");var B=Spry.Effect.getStyleProp(F,"visibility");if(D=="none"){Spry.Effect.setStyleProp(F,"visibility","hidden");Spry.Effect.setStyleProp(F,"display","block");if(window.opera){F.focus()}}var A=Spry.Effect.getStyleProp(C,G);if(D=="none"){Spry.Effect.setStyleProp(F,"display","none");Spry.Effect.setStyleProp(F,"visibility",B)}return A};Spry.Effect.setStyleProp=function(A,D,B){try{A.style[Spry.Effect.Utils.camelize(D)]=B}catch(C){Spry.Effect.Utils.showError("Spry.Effect.setStyleProp: "+C)}return null};Spry.Effect.makePositioned=function(A){var B=Spry.Effect.getStyleProp(A,"position");if(!B||B=="static"){A.style.position="relative";if(window.opera){A.style.top=0;A.style.left=0}}};Spry.Effect.isInvisible=function(C){var A=Spry.Effect.getStyleProp(C,"display");if(A&&A.toLowerCase()=="none"){return true}var B=Spry.Effect.getStyleProp(C,"visibility");if(B&&B.toLowerCase()=="hidden"){return true}return false};Spry.Effect.enforceVisible=function(C){var A=Spry.Effect.getStyleProp(C,"display");if(A&&A.toLowerCase()=="none"){Spry.Effect.setStyleProp(C,"display","block")}var B=Spry.Effect.getStyleProp(C,"visibility");if(B&&B.toLowerCase()=="hidden"){Spry.Effect.setStyleProp(C,"visibility","visible")}};Spry.Effect.makeClipping=function(B){var D=Spry.Effect.getStyleProp(B,"overflow");if(D!="hidden"&&D!="scroll"){var A=0;var C=/MSIE 7.0/.test(navigator.userAgent)&&/Windows NT/.test(navigator.userAgent);if(C){A=Spry.Effect.getDimensionsRegardlessOfDisplayState(B).height}Spry.Effect.setStyleProp(B,"overflow","hidden");if(C){Spry.Effect.setStyleProp(B,"height",A+"px")}}};Spry.Effect.cleanWhitespace=function(B){var E=B.childNodes.length;for(var A=E-1;A>=0;A--){var C=B.childNodes[A];if(C.nodeType==3&&!/\S/.test(C.nodeValue)){try{B.removeChild(C)}catch(D){Spry.Effect.Utils.showError("Spry.Effect.cleanWhitespace: "+D)}}}};Spry.Effect.getComputedStyle=function(B){var A=/MSIE/.test(navigator.userAgent)?B.currentStyle:document.defaultView.getComputedStyle(B,null);return A};Spry.Effect.getDimensions=function(B){var D=new Spry.Effect.Utils.Rectangle;var A=null;if(B.style.width&&/px/i.test(B.style.width)){D.width=parseInt(B.style.width)}else{A=Spry.Effect.getComputedStyle(B);var C=A&&A.width&&/px/i.test(A.width);if(C){D.width=parseInt(A.width)}if(!C||D.width==0){D.width=B.offsetWidth}}if(B.style.height&&/px/i.test(B.style.height)){D.height=parseInt(B.style.height)}else{if(!A){A=Spry.Effect.getComputedStyle(B)}var C=A&&A.height&&/px/i.test(A.height);if(C){D.height=parseInt(A.height)}if(!C||D.height==0){D.height=B.offsetHeight}}return D};Spry.Effect.getDimensionsRegardlessOfDisplayState=function(B,E){var F=E?E:B;var D=Spry.Effect.getStyleProp(F,"display");var A=Spry.Effect.getStyleProp(F,"visibility");if(D=="none"){Spry.Effect.setStyleProp(F,"visibility","hidden");Spry.Effect.setStyleProp(F,"display","block");if(window.opera){F.focus()}}var C=Spry.Effect.getDimensions(B);if(D=="none"){Spry.Effect.setStyleProp(F,"display","none");Spry.Effect.setStyleProp(F,"visibility",A)}return C};Spry.Effect.getOpacity=function(A){var B=Spry.Effect.getStyleProp(A,"opacity");if(B==undefined||B==null){B=1}return B};Spry.Effect.getColor=function(A){var B=Spry.Effect.getStyleProp(ele,"background-color");return B};Spry.Effect.getPosition=function(C){var A=new Spry.Effect.Utils.Position;var B=null;if(C.style.left&&/px/i.test(C.style.left)){A.x=parseInt(C.style.left)}else{B=Spry.Effect.getComputedStyle(C);var D=B&&B.left&&/px/i.test(B.left);if(D){A.x=parseInt(B.left)}if(!D||A.x==0){A.x=C.offsetLeft}}if(C.style.top&&/px/i.test(C.style.top)){A.y=parseInt(C.style.top)}else{if(!B){B=Spry.Effect.getComputedStyle(C)}var D=B&&B.top&&/px/i.test(B.top);if(D){A.y=parseInt(B.top)}if(!D||A.y==0){A.y=C.offsetTop}}return A};Spry.Effect.getOffsetPosition=Spry.Effect.getPosition;Spry.Effect.Animator=function(A){this.name="Animator";this.element=null;this.timer=null;this.direction=Spry.forwards;this.startMilliseconds=0;this.repeat="none";this.isRunning=false;this.options={duration:500,toggle:false,transition:Spry.linearTransition,interval:33};this.setOptions(A)};Spry.Effect.Animator.prototype.setOptions=function(A){if(!A){return }for(var B in A){this.options[B]=A[B]}};Spry.Effect.Animator.prototype.start=function(D){if(arguments.length==0){D=false}var A=this;if(this.options.setup){try{this.options.setup(this.element,this)}catch(C){Spry.Effect.Utils.showError("Spry.Effect.Animator.prototype.start: setup callback: "+C)}}this.prepareStart();var B=new Date();this.startMilliseconds=B.getTime();if(D==false){this.timer=setInterval(function(){A.drawEffect()},this.options.interval)}this.isRunning=true};Spry.Effect.Animator.prototype.stop=function(){if(this.timer){clearInterval(this.timer);this.timer=null}this.startMilliseconds=0;if(this.options.finish){try{this.options.finish(this.element,this)}catch(A){Spry.Effect.Utils.showError("Spry.Effect.Animator.prototype.stop: finish callback: "+A)}}this.isRunning=false};Spry.Effect.Animator.prototype.cancel=function(){if(this.timer){clearInterval(this.timer);this.timer=null}this.isRunning=false};Spry.Effect.Animator.prototype.drawEffect=function(){var B=true;var A=this.getElapsedMilliseconds()/this.options.duration;if(this.getElapsedMilliseconds()>this.options.duration){A=1}else{if(this.options.transition==Spry.sinusoidalTransition){A=(-Math.cos(A*Math.PI)/2)+0.5}else{if(this.options.transition==Spry.linearTransition){}else{Spry.Effect.Utils.showError("unknown transition")}}}this.animate(A);if(this.getElapsedMilliseconds()>this.options.duration){this.stop();B=false}return B};Spry.Effect.Animator.prototype.getElapsedMilliseconds=function(){if(this.startMilliseconds>0){var A=new Date();return(A.getTime()-this.startMilliseconds)}else{return 0}};Spry.Effect.Animator.prototype.doToggle=function(){if(this.options.toggle==true){if(this.direction==Spry.forwards){this.direction=Spry.backwards}else{if(this.direction==Spry.backwards){this.direction=Spry.forwards}}}};Spry.Effect.Animator.prototype.prepareStart=function(){};Spry.Effect.Animator.prototype.animate=function(A){};Spry.Effect.Move=function(C,B,D,A){this.dynamicFromPos=false;if(arguments.length==3){A=D;D=B;B=Spry.Effect.getPosition(C);this.dynamicFromPos=true}Spry.Effect.Animator.call(this,A);this.name="Move";this.element=Spry.Effect.getElement(C);if(B.units!=D.units){Spry.Effect.Utils.showError("Spry.Effect.Move: Conflicting units ("+B.units+", "+D.units+")")}this.units=B.units;this.startX=B.x;this.stopX=D.x;this.startY=B.y;this.stopY=D.y;this.rangeMoveX=this.startX-this.stopX;this.rangeMoveY=this.startY-this.stopY};Spry.Effect.Move.prototype=new Spry.Effect.Animator();Spry.Effect.Move.prototype.constructor=Spry.Effect.Move;Spry.Effect.Move.prototype.animate=function(A){var C=0;var B=0;if(this.direction==Spry.forwards){C=this.startX-(this.rangeMoveX*A);B=this.startY-(this.rangeMoveY*A)}else{if(this.direction==Spry.backwards){C=this.rangeMoveX*A+this.stopX;B=this.rangeMoveY*A+this.stopY}}this.element.style.left=C+this.units;this.element.style.top=B+this.units};Spry.Effect.Move.prototype.prepareStart=function(){if(this.dynamicFromPos==true){var A=Spry.Effect.getPosition(this.element);this.startX=A.x;this.startY=A.y;this.rangeMoveX=this.startX-this.stopX;this.rangeMoveY=this.startY-this.stopY}};Spry.Effect.MoveSlide=function(D,C,F,A,B){this.dynamicFromPos=false;if(arguments.length==4){B=A;A=F;F=C;C=Spry.Effect.getPosition(D);this.dynamicFromPos=true}Spry.Effect.Animator.call(this,B);this.name="MoveSlide";this.element=Spry.Effect.getElement(D);this.horizontal=A;this.firstChildElement=Spry.Effect.Utils.getFirstChildElement(D);this.overflow=Spry.Effect.getStyleProp(this.element,"overflow");this.originalChildRect=Spry.Effect.getDimensionsRegardlessOfDisplayState(this.firstChildElement,this.element);if(C.units!=F.units){Spry.Effect.Utils.showError("Spry.Effect.MoveSlide: Conflicting units ("+C.units+", "+F.units+")")}this.units=C.units;var E=Spry.Effect.getDimensionsRegardlessOfDisplayState(D);this.startHeight=E.height;this.startX=Number(C.x);this.stopX=Number(F.x);this.startY=Number(C.y);this.stopY=Number(F.y);this.rangeMoveX=this.startX-this.stopX;this.rangeMoveY=this.startY-this.stopY;this.enforceVisible=Spry.Effect.isInvisible(this.element)};Spry.Effect.MoveSlide.prototype=new Spry.Effect.Animator();Spry.Effect.MoveSlide.prototype.constructor=Spry.Effect.MoveSlide;Spry.Effect.MoveSlide.prototype.animate=function(B){if(this.horizontal){var G=(this.direction==Spry.forwards)?this.startX:this.stopX;var D=(this.direction==Spry.forwards)?this.stopX:this.startX;var A=G+B*(D-G);if(A<0){A=0}if(this.overflow!="scroll"||A>this.originalChildRect.width){this.firstChildElement.style.left=A-this.originalChildRect.width+this.units}this.element.style.width=A+this.units}else{var F=(this.direction==Spry.forwards)?this.startY:this.stopY;var C=(this.direction==Spry.forwards)?this.stopY:this.startY;var E=F+B*(C-F);if(E<0){E=0}if(this.overflow!="scroll"||E>this.originalChildRect.height){this.firstChildElement.style.top=E-this.originalChildRect.height+this.units}this.element.style.height=E+this.units}if(this.enforceVisible){Spry.Effect.enforceVisible(this.element);this.enforceVisible=false}};Spry.Effect.MoveSlide.prototype.prepareStart=function(){if(this.dynamicFromPos==true){var A=Spry.Effect.getPosition(this.element);this.startX=A.x;this.startY=A.y;this.rangeMoveX=this.startX-this.stopX;this.rangeMoveY=this.startY-this.stopY}};Spry.Effect.Size=function(E,A,H,I){this.dynamicFromRect=false;if(arguments.length==3){I=H;H=A;A=Spry.Effect.getDimensionsRegardlessOfDisplayState(E);this.dynamicFromRect=true}Spry.Effect.Animator.call(this,I);this.name="Size";this.element=Spry.Effect.getElement(E);if(A.units!=H.units){Spry.Effect.Utils.showError("Spry.Effect.Size: Conflicting units ("+A.units+", "+H.units+")")}this.units=A.units;var B=Spry.Effect.getDimensionsRegardlessOfDisplayState(E);this.originalWidth=B.width;this.startWidth=A.width;this.startHeight=A.height;this.stopWidth=H.width;this.stopHeight=H.height;this.childImages=new Array();if(this.options.scaleContent){Spry.Effect.Utils.fetchChildImages(E,this.childImages)}this.fontFactor=1;if(this.element.style&&this.element.style.fontSize){if(/em\s*$/.test(this.element.style.fontSize)){this.fontFactor=parseFloat(this.element.style.fontSize)}}if(Spry.Effect.Utils.isPercentValue(this.startWidth)){var C=Spry.Effect.Utils.getPercentValue(this.startWidth);this.startWidth=B.width*(C/100)}if(Spry.Effect.Utils.isPercentValue(this.startHeight)){var F=Spry.Effect.Utils.getPercentValue(this.startHeight);this.startHeight=B.height*(F/100)}if(Spry.Effect.Utils.isPercentValue(this.stopWidth)){var D=Spry.Effect.Utils.getPercentValue(this.stopWidth);var B=Spry.Effect.getDimensionsRegardlessOfDisplayState(E);this.stopWidth=B.width*(D/100)}if(Spry.Effect.Utils.isPercentValue(this.stopHeight)){var G=Spry.Effect.Utils.getPercentValue(this.stopHeight);var B=Spry.Effect.getDimensionsRegardlessOfDisplayState(E);this.stopHeight=B.height*(G/100)}this.widthRange=this.startWidth-this.stopWidth;this.heightRange=this.startHeight-this.stopHeight;this.enforceVisible=Spry.Effect.isInvisible(this.element)};Spry.Effect.Size.prototype=new Spry.Effect.Animator();Spry.Effect.Size.prototype.constructor=Spry.Effect.Size;Spry.Effect.Size.prototype.animate=function(B){var E=0;var A=0;var F=0;if(this.direction==Spry.forwards){E=this.startWidth-(this.widthRange*B);A=this.startHeight-(this.heightRange*B);F=this.fontFactor*(this.startWidth+B*(this.stopWidth-this.startWidth))/this.originalWidth}else{if(this.direction==Spry.backwards){E=this.widthRange*B+this.stopWidth;A=this.heightRange*B+this.stopHeight;F=this.fontFactor*(this.stopWidth+B*(this.startWidth-this.stopWidth))/this.originalWidth}}if(this.options.scaleContent==true){this.element.style.fontSize=F+"em"}this.element.style.width=E+this.units;this.element.style.height=A+this.units;if(this.options.scaleContent){var D=(this.direction==Spry.forwards)?(this.startWidth+B*(this.stopWidth-this.startWidth))/this.originalWidth:(this.stopWidth+B*(this.startWidth-this.stopWidth))/this.originalWidth;for(var C=0;C<this.childImages.length;C++){this.childImages[C][0].style.width=D*this.childImages[C][1]+this.units;this.childImages[C][0].style.height=D*this.childImages[C][2]+this.units}}if(this.enforceVisible){Spry.Effect.enforceVisible(this.element);this.enforceVisible=false}};Spry.Effect.Size.prototype.prepareStart=function(){if(this.dynamicFromRect==true){var A=Spry.Effect.getDimensions(element);this.startWidth=A.width;this.startHeight=A.height;this.widthRange=this.startWidth-this.stopWidth;this.heightRange=this.startHeight-this.stopHeight}};Spry.Effect.Opacity=function(C,B,D,A){this.dynamicStartOpacity=false;if(arguments.length==3){A=D;D=B;B=Spry.Effect.getOpacity(C);this.dynamicStartOpacity=true}Spry.Effect.Animator.call(this,A);this.name="Opacity";this.element=Spry.Effect.getElement(C);if(/MSIE/.test(navigator.userAgent)&&(!this.element.hasLayout)){Spry.Effect.setStyleProp(this.element,"zoom","1")}this.startOpacity=B;this.stopOpacity=D;this.opacityRange=this.startOpacity-this.stopOpacity;this.enforceVisible=Spry.Effect.isInvisible(this.element)};Spry.Effect.Opacity.prototype=new Spry.Effect.Animator();Spry.Effect.Opacity.prototype.constructor=Spry.Effect.Opacity;Spry.Effect.Opacity.prototype.animate=function(A){var B=0;if(this.direction==Spry.forwards){B=this.startOpacity-(this.opacityRange*A)}else{if(this.direction==Spry.backwards){B=this.opacityRange*A+this.stopOpacity}}this.element.style.opacity=B;this.element.style.filter="alpha(opacity="+Math.floor(B*100)+")";if(this.enforceVisible){Spry.Effect.enforceVisible(this.element);this.enforceVisible=false}};Spry.Effect.Size.prototype.prepareStart=function(){if(this.dynamicStartOpacity==true){this.startOpacity=Spry.Effect.getOpacity(element);this.opacityRange=this.startOpacity-this.stopOpacity}};Spry.Effect.Color=function(C,D,A,B){this.dynamicStartColor=false;if(arguments.length==3){B=A;A=D;D=Spry.Effect.getColor(C);this.dynamicStartColor=true}Spry.Effect.Animator.call(this,B);this.name="Color";this.element=Spry.Effect.getElement(C);this.startColor=D;this.stopColor=A;this.startRedColor=Spry.Effect.Utils.hexToInt(D.substr(1,2));this.startGreenColor=Spry.Effect.Utils.hexToInt(D.substr(3,2));this.startBlueColor=Spry.Effect.Utils.hexToInt(D.substr(5,2));this.stopRedColor=Spry.Effect.Utils.hexToInt(A.substr(1,2));this.stopGreenColor=Spry.Effect.Utils.hexToInt(A.substr(3,2));this.stopBlueColor=Spry.Effect.Utils.hexToInt(A.substr(5,2));this.redColorRange=this.startRedColor-this.stopRedColor;this.greenColorRange=this.startGreenColor-this.stopGreenColor;this.blueColorRange=this.startBlueColor-this.stopBlueColor};Spry.Effect.Color.prototype=new Spry.Effect.Animator();Spry.Effect.Color.prototype.constructor=Spry.Effect.Color;Spry.Effect.Color.prototype.animate=function(A){var B=0;var D=0;var C=0;if(this.direction==Spry.forwards){B=parseInt(this.startRedColor-(this.redColorRange*A));D=parseInt(this.startGreenColor-(this.greenColorRange*A));C=parseInt(this.startBlueColor-(this.blueColorRange*A))}else{if(this.direction==Spry.backwards){B=parseInt(this.redColorRange*A)+this.stopRedColor;D=parseInt(this.greenColorRange*A)+this.stopGreenColor;C=parseInt(this.blueColorRange*A)+this.stopBlueColor}}this.element.style.backgroundColor=Spry.Effect.Utils.rgb(B,D,C)};Spry.Effect.Size.prototype.prepareStart=function(){if(this.dynamicStartColor==true){this.startColor=Spry.Effect.getColor(element);this.startRedColor=Spry.Effect.Utils.hexToInt(startColor.substr(1,2));this.startGreenColor=Spry.Effect.Utils.hexToInt(startColor.substr(3,2));this.startBlueColor=Spry.Effect.Utils.hexToInt(startColor.substr(5,2));this.redColorRange=this.startRedColor-this.stopRedColor;this.greenColorRange=this.startGreenColor-this.stopGreenColor;this.blueColorRange=this.startBlueColor-this.stopBlueColor}};Spry.Effect.Cluster=function(A){Spry.Effect.Animator.call(this,A);this.name="Cluster";this.effectsArray=new Array();this.currIdx=-1;_ClusteredEffect=function(C,B){this.effect=C;this.kind=B;this.isRunning=false};this.ClusteredEffect=_ClusteredEffect};Spry.Effect.Cluster.prototype=new Spry.Effect.Animator();Spry.Effect.Cluster.prototype.constructor=Spry.Effect.Cluster;Spry.Effect.Cluster.prototype.drawEffect=function(){var D=true;var C=false;if(this.currIdx==-1){this.initNextEffectsRunning()}var E=false;var A=false;for(var B=0;B<this.effectsArray.length;B++){if(this.effectsArray[B].isRunning==true){E=this.effectsArray[B].effect.drawEffect();if(E==false&&B==this.currIdx){A=true}}}if(A==true){C=this.initNextEffectsRunning()}if(C==true){this.stop();D=false;for(var B=0;B<this.effectsArray.length;B++){this.effectsArray[B].isRunning=false}this.currIdx=-1}return D};Spry.Effect.Cluster.prototype.initNextEffectsRunning=function(){var B=false;this.currIdx++;if(this.currIdx>(this.effectsArray.length-1)){B=true}else{for(var A=this.currIdx;A<this.effectsArray.length;A++){if((A>this.currIdx)&&this.effectsArray[A].kind=="queue"){break}this.effectsArray[A].effect.start(true);this.effectsArray[A].isRunning=true;this.currIdx=A}}return B};Spry.Effect.Cluster.prototype.doToggle=function(){if(this.options.toggle==true){if(this.direction==Spry.forwards){this.direction=Spry.backwards}else{if(this.direction==Spry.backwards){this.direction=Spry.forwards}}}for(var A=0;A<this.effectsArray.length;A++){if(this.effectsArray[A].effect.options&&(this.effectsArray[A].effect.options.toggle!=null)){if(this.effectsArray[A].effect.options.toggle==true){this.effectsArray[A].effect.doToggle()}}}};Spry.Effect.Cluster.prototype.cancel=function(){for(var A=0;A<this.effectsArray.length;A++){this.effectsArray[A].effect.cancel()}if(this.timer){clearInterval(this.timer);this.timer=null}this.isRunning=false};Spry.Effect.Cluster.prototype.addNextEffect=function(A){this.effectsArray[this.effectsArray.length]=new this.ClusteredEffect(A,"queue");if(this.effectsArray.length==1){this.element=A.element}};Spry.Effect.Cluster.prototype.addParallelEffect=function(A){this.effectsArray[this.effectsArray.length]=new this.ClusteredEffect(A,"parallel");if(this.effectsArray.length==1){this.element=A.element}};Spry.Effect.AppearFade=function(F,J){var F=Spry.Effect.getElement(F);var A=1000;var H=0;var E=100;var K=false;var B=Spry.sinusoidalTransition;var D=null;var I=null;if(J){if(J.duration!=null){A=J.duration}if(J.from!=null){H=J.from}if(J.to!=null){E=J.to}if(J.toggle!=null){K=J.toggle}if(J.transition!=null){B=J.transition}if(J.setup!=null){D=J.setup}if(J.finish!=null){I=J.finish}}J={duration:A,toggle:K,transition:B,setup:D,finish:I,from:H,to:E};H=H/100;E=E/100;var G=new Spry.Effect.Opacity(F,H,E,J);G.name="AppearFade";var C=SpryRegistry.getRegisteredEffect(F,G);C.start();return C};Spry.Effect.Blind=function(J,O){var J=Spry.Effect.getElement(J);Spry.Effect.makeClipping(J);var B=1000;var P=false;var C=Spry.sinusoidalTransition;var I=false;var G=null;var Q=null;var F=Spry.Effect.getDimensionsRegardlessOfDisplayState(J);var H=F.height;var M=0;var L=O?O.from:F.height;var A=O?O.to:0;if(O){if(O.duration!=null){B=O.duration}if(O.from!=null){if(Spry.Effect.Utils.isPercentValue(O.from)){H=Spry.Effect.Utils.getPercentValue(O.from)*F.height/100}else{H=Spry.Effect.Utils.getPixelValue(O.from)}}if(O.to!=null){if(Spry.Effect.Utils.isPercentValue(O.to)){M=Spry.Effect.Utils.getPercentValue(O.to)*F.height/100}else{M=Spry.Effect.Utils.getPixelValue(O.to)}}if(O.toggle!=null){P=O.toggle}if(O.transition!=null){C=O.transition}if(O.setup!=null){G=O.setup}if(O.finish!=null){Q=O.finish}}var E=new Spry.Effect.Utils.Rectangle;E.width=F.width;E.height=H;var N=new Spry.Effect.Utils.Rectangle;N.width=F.width;N.height=M;O={duration:B,toggle:P,transition:C,scaleContent:I,setup:G,finish:Q,from:L,to:A};var K=new Spry.Effect.Size(J,E,N,O);K.name="Blind";var D=SpryRegistry.getRegisteredEffect(J,K);D.start();return D};function setupHighlight(A,B){Spry.Effect.setStyleProp(A,"background-image","none")}function finishHighlight(A,B){Spry.Effect.setStyleProp(A,"background-image",B.options.restoreBackgroundImage);if(B.direction==Spry.forwards){Spry.Effect.setStyleProp(A,"background-color",B.options.restoreColor)}}Spry.Effect.Highlight=function(H,M){var B=1000;var C="#ffffff";var N=false;var D=Spry.sinusoidalTransition;var F=setupHighlight;var O=finishHighlight;var H=Spry.Effect.getElement(H);var I=Spry.Effect.getStyleProp(H,"background-color");var K=I;if(I=="transparent"){I="#ffff99"}var J=M?M.from:"#ffff00";var A=M?M.to:"#0000ff";if(M){if(M.duration!=null){B=M.duration}if(M.from!=null){I=M.from}if(M.to!=null){C=M.to}if(M.restoreColor){K=M.restoreColor}if(M.toggle!=null){N=M.toggle}if(M.transition!=null){D=M.transition}if(M.setup!=null){F=M.setup}if(M.finish!=null){O=M.finish}}var L=Spry.Effect.getStyleProp(H,"background-image");M={duration:B,toggle:N,transition:D,setup:F,finish:O,restoreColor:K,restoreBackgroundImage:L,from:J,to:A};var G=new Spry.Effect.Color(H,I,C,M);G.name="Highlight";var E=SpryRegistry.getRegisteredEffect(H,G);E.start();return E};Spry.Effect.Slide=function(A,C){var A=Spry.Effect.getElement(A);var L=2000;var Q=false;var R=Spry.sinusoidalTransition;var G=false;var S=null;var N=null;var H=Spry.Effect.Utils.getFirstChildElement(A);if(/MSIE 7.0/.test(navigator.userAgent)&&/Windows NT/.test(navigator.userAgent)){Spry.Effect.makePositioned(A)}Spry.Effect.makeClipping(A);if(/MSIE 6.0/.test(navigator.userAgent)&&/Windows NT/.test(navigator.userAgent)){var D=Spry.Effect.getStyleProp(A,"position");if(D&&(D=="static"||D=="fixed")){Spry.Effect.setStyleProp(A,"position","relative");Spry.Effect.setStyleProp(A,"top","");Spry.Effect.setStyleProp(A,"left","")}}if(H){Spry.Effect.makePositioned(H);Spry.Effect.makeClipping(H);var K=Spry.Effect.getDimensionsRegardlessOfDisplayState(H,A);Spry.Effect.setStyleProp(H,"width",K.width+"px")}var J=Spry.Effect.getDimensionsRegardlessOfDisplayState(A);var I=new Spry.Effect.Utils.Position();I.x=parseInt(Spry.Effect.getStyleProp(H,"left"));I.y=parseInt(Spry.Effect.getStyleProp(H,"top"));if(!I.x){I.x=0}if(!I.y){I.y=0}if(C&&C.horizontal!==null&&C.horizontal===true){G=true}var T=G?J.width:J.height;var P=new Spry.Effect.Utils.Position;P.x=I.x;P.y=I.y;var O=new Spry.Effect.Utils.Position;O.x=G?I.x-T:I.x;O.y=G?I.y:I.y-T;var F=C?C.from:J.height;var E=C?C.to:0;if(C){if(C.duration!=null){L=C.duration}if(C.from!=null){if(G){if(Spry.Effect.Utils.isPercentValue(C.from)){P.x=T*Spry.Effect.Utils.getPercentValue(C.from)/100}else{P.x=Spry.Effect.Utils.getPixelValue(C.from)}}else{if(Spry.Effect.Utils.isPercentValue(C.from)){P.y=T*Spry.Effect.Utils.getPercentValue(C.from)/100}else{P.y=Spry.Effect.Utils.getPixelValue(C.from)}}}if(C.to!=null){if(G){if(Spry.Effect.Utils.isPercentValue(C.to)){O.x=T*Spry.Effect.Utils.getPercentValue(C.to)/100}else{O.x=Spry.Effect.Utils.getPixelValue(C.to)}}else{if(Spry.Effect.Utils.isPercentValue(C.to)){O.y=T*Spry.Effect.Utils.getPercentValue(C.to)/100}else{O.y=Spry.Effect.Utils.getPixelValue(C.to)}}}if(C.toggle!=null){Q=C.toggle}if(C.transition!=null){R=C.transition}if(C.setup!=null){S=C.setup}if(C.finish!=null){N=C.finish}}C={duration:L,toggle:Q,transition:R,setup:S,finish:N,from:F,to:E};var M=new Spry.Effect.MoveSlide(A,P,O,G,C);M.name="Slide";var B=SpryRegistry.getRegisteredEffect(A,M);B.start();return B};Spry.Effect.GrowShrink=function(B,D){var B=Spry.Effect.getElement(B);Spry.Effect.makePositioned(B);Spry.Effect.makeClipping(B);var K=new Spry.Effect.Utils.Position();K.x=parseInt(Spry.Effect.getStylePropRegardlessOfDisplayState(B,"left"));K.y=parseInt(Spry.Effect.getStylePropRegardlessOfDisplayState(B,"top"));if(!K.x){K.x=0}if(!K.y){K.y=0}var M=Spry.Effect.getDimensionsRegardlessOfDisplayState(B);var Y=M.width;var O=M.height;var W=(Y==0)?1:O/Y;var N=500;var V=false;var X=Spry.sinusoidalTransition;var U=new Spry.Effect.Utils.Rectangle;U.width=0;U.height=0;var A=new Spry.Effect.Utils.Rectangle;A.width=Y;A.height=O;var Z=null;var Q=null;var R=true;var H=D?D.from:M.width;var I=D?D.to:0;var E=false;var J=true;if(D){if(D.referHeight!=null){E=D.referHeight}if(D.growCenter!=null){J=D.growCenter}if(D.duration!=null){N=D.duration}if(D.from!=null){if(Spry.Effect.Utils.isPercentValue(D.from)){U.width=Y*(Spry.Effect.Utils.getPercentValue(D.from)/100);U.height=O*(Spry.Effect.Utils.getPercentValue(D.from)/100)}else{if(E){U.height=Spry.Effect.Utils.getPixelValue(D.from);U.width=Spry.Effect.Utils.getPixelValue(D.from)/W}else{U.width=Spry.Effect.Utils.getPixelValue(D.from);U.height=W*Spry.Effect.Utils.getPixelValue(D.from)}}}if(D.to!=null){if(Spry.Effect.Utils.isPercentValue(D.to)){A.width=Y*(Spry.Effect.Utils.getPercentValue(D.to)/100);A.height=O*(Spry.Effect.Utils.getPercentValue(D.to)/100)}else{if(E){A.height=Spry.Effect.Utils.getPixelValue(D.to);A.width=Spry.Effect.Utils.getPixelValue(D.to)/W}else{A.width=Spry.Effect.Utils.getPixelValue(D.to);A.height=W*Spry.Effect.Utils.getPixelValue(D.to)}}}if(D.toggle!=null){V=D.toggle}if(D.transition!=null){X=D.transition}if(D.setup!=null){Z=D.setup}if(D.finish!=null){Q=D.finish}}D={duration:N,toggle:V,transition:X,scaleContent:R,from:H,to:I};var F=new Spry.Effect.Cluster({toggle:V,setup:Z,finish:Q});F.name="GrowShrink";var L=new Spry.Effect.Size(B,U,A,D);F.addParallelEffect(L);if(J){D={duration:N,toggle:V,transition:X,from:H,to:I};var T=new Spry.Effect.Utils.Position;T.x=K.x+(Y-U.width)/2;T.y=K.y+(O-U.height)/2;var P=new Spry.Effect.Utils.Position;P.x=K.x+(Y-A.width)/2;P.y=K.y+(O-A.height)/2;var S={top:T.y,left:T.x};var G=new Spry.Effect.Move(B,T,P,D,S);F.addParallelEffect(G)}var C=SpryRegistry.getRegisteredEffect(B,F);C.start();return C};Spry.Effect.Shake=function(E,I){var E=Spry.Effect.getElement(E);Spry.Effect.makePositioned(E);var C=null;var J=null;if(I){if(I.setup!=null){C=I.setup}if(I.finish!=null){J=I.finish}}var B=new Spry.Effect.Utils.Position();B.x=parseInt(Spry.Effect.getStyleProp(E,"left"));B.y=parseInt(Spry.Effect.getStyleProp(E,"top"));if(!B.x){B.x=0}if(!B.y){B.y=0}var D=new Spry.Effect.Cluster({setup:C,finish:J});D.name="Shake";var G=new Spry.Effect.Utils.Position;G.x=B.x+0;G.y=B.y+0;var F=new Spry.Effect.Utils.Position;F.x=B.x+20;F.y=B.y+0;I={duration:50,toggle:false};var H=new Spry.Effect.Move(E,G,F,I);D.addNextEffect(H);var G=new Spry.Effect.Utils.Position;G.x=B.x+20;G.y=B.y+0;var F=new Spry.Effect.Utils.Position;F.x=B.x+-20;F.y=B.y+0;I={duration:100,toggle:false};var H=new Spry.Effect.Move(E,G,F,I);D.addNextEffect(H);var G=new Spry.Effect.Utils.Position;G.x=B.x+-20;G.y=B.y+0;var F=new Spry.Effect.Utils.Position;F.x=B.x+20;F.y=B.y+0;I={duration:100,toggle:false};var H=new Spry.Effect.Move(E,G,F,I);D.addNextEffect(H);var G=new Spry.Effect.Utils.Position;G.x=B.x+20;G.y=B.y+0;var F=new Spry.Effect.Utils.Position;F.x=B.x+-20;F.y=B.y+0;I={duration:100,toggle:false};var H=new Spry.Effect.Move(E,G,F,I);D.addNextEffect(H);var G=new Spry.Effect.Utils.Position;G.x=B.x+-20;G.y=B.y+0;var F=new Spry.Effect.Utils.Position;F.x=B.x+20;F.y=B.y+0;I={duration:100,toggle:false};var H=new Spry.Effect.Move(E,G,F,I);D.addNextEffect(H);var G=new Spry.Effect.Utils.Position;G.x=B.x+20;G.y=B.y+0;var F=new Spry.Effect.Utils.Position;F.x=B.x+0;F.y=B.y+0;I={duration:50,toggle:false};var H=new Spry.Effect.Move(E,G,F,I);D.addNextEffect(H);var A=SpryRegistry.getRegisteredEffect(E,D);A.start();return A};Spry.Effect.Squish=function(I,N){var I=Spry.Effect.getElement(I);var A=500;var O=true;var E=null;var P=null;if(N){if(N.duration!=null){A=N.duration}if(N.toggle!=null){O=N.toggle}if(N.setup!=null){E=N.setup}if(N.finish!=null){P=N.finish}}Spry.Effect.makePositioned(I);Spry.Effect.makeClipping(I);var D=Spry.Effect.getDimensionsRegardlessOfDisplayState(I);var J=D.width;var L=D.height;var F=0;var H=0;var C=new Spry.Effect.Utils.Rectangle;C.width=J;C.height=L;var M=new Spry.Effect.Utils.Rectangle;M.width=F;M.height=H;var G=true;N={duration:A,toggle:O,scaleContent:G,setup:E,finish:P};var K=new Spry.Effect.Size(I,C,M,N);K.name="Squish";var B=SpryRegistry.getRegisteredEffect(I,K);B.start();return B};Spry.Effect.Pulsate=function(F,L){var F=Spry.Effect.getElement(F);var A=400;var J=100;var E=0;var M=false;var B=Spry.linearTransition;var D=null;var K=null;if(L){if(L.duration!=null){A=L.duration}if(L.from!=null){J=L.from}if(L.to!=null){E=L.to}if(L.toggle!=null){M=L.toggle}if(L.transition!=null){B=L.transition}if(L.setup!=null){D=L.setup}if(L.finish!=null){K=L.finish}}L={duration:A,toggle:M,transition:B,setup:D,finish:K};J=J/100;E=E/100;var I=new Spry.Effect.Cluster();var G=new Spry.Effect.Opacity(F,J,E,L);var H=new Spry.Effect.Opacity(F,E,J,L);I.addNextEffect(G);I.addNextEffect(H);I.addNextEffect(G);I.addNextEffect(H);I.addNextEffect(G);I.addNextEffect(H);I.name="Pulsate";var C=SpryRegistry.getRegisteredEffect(F,I);C.start();return C};Spry.Effect.Puff=function(C,E){var C=Spry.Effect.getElement(C);Spry.Effect.makePositioned(C);var V=null;var P=null;if(E){if(E.setup!=null){V=E.setup}if(E.finish!=null){P=E.finish}}var S=new Spry.Effect.Cluster;var L=500;var K=Spry.Effect.getDimensions(C);var M=K.width;var N=K.height;var T=M*2;var B=N*2;var U=new Spry.Effect.Utils.Rectangle;U.width=M;U.height=N;var A=new Spry.Effect.Utils.Rectangle;A.width=T;A.height=B;var Q=false;E={duration:L,toggle:false,scaleContent:Q};var J=new Spry.Effect.Size(C,U,A,E);S.addParallelEffect(J);E={duration:L,toggle:false};var G=1;var I=0;var F=new Spry.Effect.Opacity(C,G,I,E);S.addParallelEffect(F);E={duration:L,toggle:false};var R=new Spry.Effect.Utils.Position;R.x=0;R.y=0;var O=new Spry.Effect.Utils.Position;O.x=M/2*-1;O.y=N/2*-1;var H=new Spry.Effect.Move(C,R,O,E);S.addParallelEffect(H);S.setup=V;S.finish=P;S.name="Puff";var D=SpryRegistry.getRegisteredEffect(C,S);D.start();return D};Spry.Effect.DropOut=function(H,M){var H=Spry.Effect.getElement(H);var C=new Spry.Effect.Cluster;var B=500;Spry.Effect.makePositioned(H);var F=null;var N=null;if(M){if(M.setup!=null){F=M.setup}if(M.finish!=null){N=M.finish}}var E=new Spry.Effect.Utils.Position();E.x=parseInt(Spry.Effect.getStyleProp(H,"left"));E.y=parseInt(Spry.Effect.getStyleProp(H,"top"));if(!E.x){E.x=0}if(!E.y){E.y=0}var L=new Spry.Effect.Utils.Position;L.x=E.x+0;L.y=E.y+0;var J=new Spry.Effect.Utils.Position;J.x=E.x+0;J.y=E.y+160;M={from:L,to:J,duration:B,toggle:true};var I=new Spry.Effect.Move(H,M.from,M.to,M);C.addParallelEffect(I);M={duration:B,toggle:true};var K=1;var G=0;var A=new Spry.Effect.Opacity(H,K,G,M);C.addParallelEffect(A);C.setup=F;C.finish=N;C.name="DropOut";var D=SpryRegistry.getRegisteredEffect(H,C);D.start();return D};Spry.Effect.Fold=function(H,N){var H=Spry.Effect.getElement(H);var A=1000;var O=false;var G=true;var K=new Spry.Effect.Cluster();var D=Spry.Effect.getDimensions(H);var I=D.width;var L=D.height;var E=I;var F=L/5;var C=new Spry.Effect.Utils.Rectangle;C.width=I;C.height=L;var M=new Spry.Effect.Utils.Rectangle;M.width=E;M.height=F;N={duration:A,toggle:O,scaleContent:G};var J=new Spry.Effect.Size(H,C,M,N);K.addNextEffect(J);A=500;N={duration:A,toggle:O,scaleContent:G};C.width="100%";C.height="20%";M.width="10%";M.height="20%";var J=new Spry.Effect.Size(H,C,M,N);K.addNextEffect(J);K.name="Fold";var B=SpryRegistry.getRegisteredEffect(H,K);B.start();return B};var Spry;if(!Spry){Spry={}}if(!Spry.XML){Spry.XML={}}if(!Spry.XML.Schema){Spry.XML.Schema={}}Spry.XML.Schema.Node=function(A){this.nodeName=A;this.isAttribute=false;this.appearsMoreThanOnce=false;this.children=new Array};Spry.XML.Schema.Node.prototype.toString=function(A){if(!A){A=""}var D=A+this.nodeName;if(this.appearsMoreThanOnce){D+=" (+)"}D+="\n";var B=A+"    ";for(var C in this.children){var E=this.children[C];if(E.isAttribute){D+=B+E.nodeName+"\n"}else{D+=E.toString(B)}}return D};Spry.XML.Schema.mapElementIntoSchemaNode=function(I,F){if(!I||!F){return }var C=0;for(C=0;C<I.attributes.length;C++){var D=I.attributes.item(C);if(D&&D.nodeType==2){var E="@"+D.name;if(!F.children[E]){var G=new Spry.XML.Schema.Node(E);G.isAttribute=true;F.children[E]=G}}}var A=I.firstChild;var B=new Array;while(A){if(A.nodeType==1){var H=F.children[A.nodeName];if(!H){H=new Spry.XML.Schema.Node(A.nodeName);if(H){F.children[A.nodeName]=H}}if(H){if(B[H.nodeName]){H.appearsMoreThanOnce=true}else{B[H.nodeName]=true}}Spry.XML.Schema.mapElementIntoSchemaNode(A,H)}A=A.nextSibling}};Spry.XML.getSchemaForElement=function(A){if(!A){return null}schemaNode=new Spry.XML.Schema.Node(A.nodeName);Spry.XML.Schema.mapElementIntoSchemaNode(A,schemaNode);return schemaNode};Spry.XML.getSchema=function(B){if(!B){return null}var A=B.firstChild;while(A){if(A.nodeType==1){break}A=A.nextSibling}return Spry.XML.getSchemaForElement(A)};Spry.XML.nodeHasValue=function(A){if(A){var B=A.firstChild;if(B&&B.nextSibling==null&&(B.nodeType==3||B.nodeType==4)){return true}}return false};Spry.XML.XObject=function(){};Spry.XML.XObject.prototype._value=function(){var A=this["#text"];if(A!=undefined){return A}return this["#cdata-section"]};Spry.XML.XObject.prototype._hasValue=function(){return this._value()!=undefined};Spry.XML.XObject.prototype._valueIsText=function(){return this["#text"]!=undefined};Spry.XML.XObject.prototype._valueIsCData=function(){return this["#cdata-section"]!=undefined};Spry.XML.XObject.prototype._propertyIsArray=function(B){var A=this[B];if(A==undefined){return false}return(typeof A=="object"&&A.constructor==Array)};Spry.XML.XObject.prototype._getPropertyAsArray=function(C){var A=[];var B=this[C];if(B!=undefined){if(typeof B=="object"&&B.constructor==Array){return B}A.push(B)}return A};Spry.XML.XObject.prototype._getProperties=function(){var A=[];for(var B in this){if(!/^_/.test(B)){A.push(B)}}return A};Spry.XML.nodeToObject=function(C){if(!C){return null}var E=new Spry.XML.XObject();for(var F=0;F<C.attributes.length;F++){var I=C.attributes[F];var J="@"+I.name;E[J]=I.value}var A;if(Spry.XML.nodeHasValue(C)){try{A=C.firstChild;if(A.nodeType==3){E[A.nodeName]=Spry.Utils.encodeEntities(A.data)}else{if(A.nodeType==4){E[A.nodeName]=A.data}}}catch(H){Spry.Debug.reportError("Spry.XML.nodeToObject() exception caught: "+H+"\n")}}else{A=C.firstChild;while(A){if(A.nodeType==1){var G=false;var B=A.nodeName;if(E[B]){if(E[B].constructor!=Array){var D=E[B];E[B]=new Array;E[B].push(D)}G=true}var K=Spry.XML.nodeToObject(A);if(G){E[B].push(K)}else{E[B]=K}}A=A.nextSibling}}return E};Spry.XML.documentToObject=function(A){var B=null;if(A&&A.firstChild){var C=A.firstChild;while(C){if(C.nodeType==1){B=new Spry.XML.XObject();B[C.nodeName]=Spry.XML.nodeToObject(C);break}C=C.nextSibling}}return B};function xpathParse(M){if(xpathdebug){Log.write("XPath parse "+M)}xpathParseInit();var A=xpathCacheLookup(M);if(A){if(xpathdebug){Log.write(" ... cached")}return A}if(M.match(/^(\$|@)?\w+$/i)){var I=makeSimpleExpr(M);xpathParseCache[M]=I;if(xpathdebug){Log.write(" ... simple")}return I}if(M.match(/^\w+(\/\w+)*$/i)){var I=makeSimpleExpr2(M);xpathParseCache[M]=I;if(xpathdebug){Log.write(" ... simple 2")}return I}var J=M;if(xpathdebug){Timer.start("XPath parse",J)}var L=[];var B=null;var G=null;var C=false;var H=0;var F=0;var O=0;while(!C){H++;M=M.replace(/^\s*/,"");G=B;B=null;var K=null;var E="";for(var D=0;D<xpathTokenRules.length;++D){var N=xpathTokenRules[D].re.exec(M);F++;if(N&&N.length>0&&N[0].length>E.length){K=xpathTokenRules[D];E=N[0];break}}if(K&&(K==TOK_DIV||K==TOK_MOD||K==TOK_AND||K==TOK_OR)&&(!G||G.tag==TOK_AT||G.tag==TOK_DSLASH||G.tag==TOK_SLASH||G.tag==TOK_AXIS||G.tag==TOK_DOLLAR)){K=TOK_QNAME}if(K){M=M.substr(E.length);if(xpathdebug){Log.write("token: "+E+" -- "+K.label)}B={tag:K,match:E,prec:K.prec?K.prec:0,expr:makeTokenExpr(E)}}else{if(xpathdebug){Log.write("DONE")}C=true}while(xpathReduce(L,B)){O++;if(xpathdebug){Log.write("stack: "+stackToString(L))}}}if(xpathdebug){Log.write(stackToString(L))}if(L.length!=1){throw"XPath parse error "+J+":\n"+stackToString(L)}var N=L[0].expr;xpathParseCache[J]=N;if(xpathdebug){Timer.end("XPath parse",J)}if(xpathdebug){Log.write("XPath parse: "+H+" / "+F+" / "+O)}return N}var xpathParseCache={};function xpathCacheLookup(A){return xpathParseCache[A]}function xpathReduce(H,A){var E=null;if(H.length>0){var F=H[H.length-1];var I=xpathRules[F.tag.key];if(I){for(var B=0;B<I.length;++B){var G=I[B];var C=xpathMatchStack(H,G[1]);if(C.length){E={tag:G[0],rule:G,match:C};E.prec=xpathGrammarPrecedence(E);break}}}}var D;if(E&&(!A||E.prec>A.prec||(A.tag.left&&E.prec>=A.prec))){for(var B=0;B<E.match.matchlength;++B){H.pop()}if(xpathdebug){Log.write("reduce "+E.tag.label+" "+E.prec+" ahead "+(A?A.tag.label+" "+A.prec+(A.tag.left?" left":""):" none "))}var J=mapExpr(E.match,function(K){return K.expr});E.expr=E.rule[3].apply(null,J);H.push(E);D=true}else{if(A){if(xpathdebug){Log.write("shift "+A.tag.label+" "+A.prec+(A.tag.left?" left":"")+" over "+(E?E.tag.label+" "+E.prec:" none"))}H.push(A)}D=false}return D}function xpathMatchStack(H,G){var D=H.length;var F=G.length;var B,I;var E=[];E.matchlength=0;var C=0;for(B=F-1,I=D-1;B>=0&&I>=0;--B,I-=C){C=0;var A=[];if(G[B]==Q_MM){B-=1;E.push(A);while(I-C>=0&&H[I-C].tag==G[B]){A.push(H[I-C]);C+=1;E.matchlength+=1}}else{if(G[B]==Q_01){B-=1;E.push(A);while(I-C>=0&&C<2&&H[I-C].tag==G[B]){A.push(H[I-C]);C+=1;E.matchlength+=1}}else{if(G[B]==Q_1M){B-=1;E.push(A);if(H[I].tag==G[B]){while(I-C>=0&&H[I-C].tag==G[B]){A.push(H[I-C]);C+=1;E.matchlength+=1}}else{return[]}}else{if(H[I].tag==G[B]){E.push(H[I]);C+=1;E.matchlength+=1}else{return[]}}}}reverseInplace(A);A.expr=mapExpr(A,function(J){return J.expr})}reverseInplace(E);if(B==-1){return E}else{return[]}}function xpathTokenPrecedence(A){return A.prec||2}function xpathGrammarPrecedence(E){var B=0;if(E.rule){if(E.rule.length>=3&&E.rule[2]>=0){B=E.rule[2]}else{for(var C=0;C<E.rule[1].length;++C){var D=xpathTokenPrecedence(E.rule[1][C]);B=Math.max(B,D)}}}else{if(E.tag){B=xpathTokenPrecedence(E.tag)}else{if(E.length){for(var A=0;A<E.length;++A){var D=xpathGrammarPrecedence(E[A]);B=Math.max(B,D)}}}}return B}function stackToString(A){var B="";for(var C=0;C<A.length;++C){if(B){B+="\n"}B+=A[C].tag.label}return B}function ExprContext(D,A,C,B){this.node=D;this.position=A||0;this.nodelist=C||[D];this.variables={};this.parent=B||null;this.root=B?B.root:D.ownerDocument}ExprContext.prototype.clone=function(C,A,B){return new ExprContext(C||this.node,typeof A!="undefined"?A:this.position,B||this.nodelist,this)};ExprContext.prototype.setVariable=function(A,B){this.variables[A]=B};ExprContext.prototype.getVariable=function(A){if(typeof this.variables[A]!="undefined"){return this.variables[A]}else{if(this.parent){return this.parent.getVariable(A)}else{return null}}};ExprContext.prototype.setNode=function(B,A){this.node=B;this.position=A};function StringValue(A){this.value=A;this.type="string"}StringValue.prototype.stringValue=function(){return this.value};StringValue.prototype.booleanValue=function(){return this.value.length>0};StringValue.prototype.numberValue=function(){return this.value-0};StringValue.prototype.nodeSetValue=function(){throw this+" "+Error().stack};function BooleanValue(A){this.value=A;this.type="boolean"}BooleanValue.prototype.stringValue=function(){return""+this.value};BooleanValue.prototype.booleanValue=function(){return this.value};BooleanValue.prototype.numberValue=function(){return this.value?1:0};BooleanValue.prototype.nodeSetValue=function(){throw this+" "+Error().stack};function NumberValue(A){this.value=A;this.type="number"}NumberValue.prototype.stringValue=function(){return""+this.value};NumberValue.prototype.booleanValue=function(){return !!this.value};NumberValue.prototype.numberValue=function(){return this.value-0};NumberValue.prototype.nodeSetValue=function(){throw this+" "+Error().stack};function NodeSetValue(A){this.value=A;this.type="node-set"}NodeSetValue.prototype.stringValue=function(){if(this.value.length==0){return""}else{return xmlValue(this.value[0])}};NodeSetValue.prototype.booleanValue=function(){return this.value.length>0};NodeSetValue.prototype.numberValue=function(){return this.stringValue()-0};NodeSetValue.prototype.nodeSetValue=function(){return this.value};function TokenExpr(A){this.value=A}TokenExpr.prototype.evaluate=function(){return new StringValue(this.value)};function LocationExpr(){this.absolute=false;this.steps=[]}LocationExpr.prototype.appendStep=function(A){this.steps.push(A)};LocationExpr.prototype.prependStep=function(C){var A=this.steps;this.steps=[C];for(var B=0;B<A.length;++B){this.steps.push(A[B])}};LocationExpr.prototype.evaluate=function(A){var C;if(this.absolute){C=A.root}else{C=A.node}var B=[];xPathStep(B,this.steps,0,C,A);return new NodeSetValue(B)};function xPathStep(A,E,B,F,H){var I=E[B];var D=H.clone(F);var G=I.evaluate(D).nodeSetValue();for(var C=0;C<G.length;++C){if(B==E.length-1){A.push(G[C])}else{xPathStep(A,E,B+1,G[C],H)}}}function StepExpr(B,C,A){this.axis=B;this.nodetest=C;this.predicate=A||[]}StepExpr.prototype.appendPredicate=function(A){this.predicate.push(A)};StepExpr.prototype.evaluate=function(A){var C=A.node;var F=[];if(this.axis==xpathAxis.ANCESTOR_OR_SELF){F.push(C);for(var H=C.parentNode;H;H=C.parentNode){F.push(H)}}else{if(this.axis==xpathAxis.ANCESTOR){for(var H=C.parentNode;H;H=C.parentNode){F.push(H)}}else{if(this.axis==xpathAxis.ATTRIBUTE){copyArray(F,C.attributes)}else{if(this.axis==xpathAxis.CHILD){copyArray(F,C.childNodes)}else{if(this.axis==xpathAxis.DESCENDANT_OR_SELF){F.push(C);xpathCollectDescendants(F,C)}else{if(this.axis==xpathAxis.DESCENDANT){xpathCollectDescendants(F,C)}else{if(this.axis==xpathAxis.FOLLOWING){for(var H=C.parentNode;H;H=H.parentNode){for(var G=H.nextSibling;G;G=G.nextSibling){F.push(G);xpathCollectDescendants(F,G)}}}else{if(this.axis==xpathAxis.FOLLOWING_SIBLING){for(var H=C.nextSibling;H;H=C.nextSibling){F.push(H)}}else{if(this.axis==xpathAxis.NAMESPACE){alert("not implemented: axis namespace")}else{if(this.axis==xpathAxis.PARENT){if(C.parentNode){F.push(C.parentNode)}}else{if(this.axis==xpathAxis.PRECEDING){for(var H=C.parentNode;H;H=H.parentNode){for(var G=H.previousSibling;G;G=G.previousSibling){F.push(G);xpathCollectDescendantsReverse(F,G)}}}else{if(this.axis==xpathAxis.PRECEDING_SIBLING){for(var H=C.previousSibling;H;H=C.previousSibling){F.push(H)}}else{if(this.axis==xpathAxis.SELF){F.push(C)}else{throw"ERROR -- NO SUCH AXIS: "+this.axis}}}}}}}}}}}}}var B=F;F=[];for(var D=0;D<B.length;++D){var H=B[D];if(this.nodetest.evaluate(A.clone(H,D,B)).booleanValue()){F.push(H)}}for(var D=0;D<this.predicate.length;++D){var B=F;F=[];for(var E=0;E<B.length;++E){var H=B[E];if(this.predicate[D].evaluate(A.clone(H,E,B)).booleanValue()){F.push(H)}}}return new NodeSetValue(F)};function NodeTestAny(){this.value=new BooleanValue(true)}NodeTestAny.prototype.evaluate=function(A){return this.value};function NodeTestElement(){}NodeTestElement.prototype.evaluate=function(A){return new BooleanValue(A.node.nodeType==DOM_ELEMENT_NODE)};function NodeTestText(){}NodeTestText.prototype.evaluate=function(A){return new BooleanValue(A.node.nodeType==DOM_TEXT_NODE)};function NodeTestComment(){}NodeTestComment.prototype.evaluate=function(A){return new BooleanValue(A.node.nodeType==DOM_COMMENT_NODE)};function NodeTestPI(A){this.target=A}NodeTestPI.prototype.evaluate=function(A){return new BooleanValue(A.node.nodeType==DOM_PROCESSING_INSTRUCTION_NODE&&(!this.target||A.node.nodeName==this.target))};function NodeTestNC(A){this.regex=new RegExp("^"+A+":");this.nsprefix=A}NodeTestNC.prototype.evaluate=function(A){var B=A.node;return new BooleanValue(this.regex.match(B.nodeName))};function NodeTestName(A){this.name=A}NodeTestName.prototype.evaluate=function(A){var B=A.node;return new BooleanValue(B.nodeName==this.name)};function PredicateExpr(A){this.expr=A}PredicateExpr.prototype.evaluate=function(A){var B=this.expr.evaluate(A);if(B.type=="number"){return new BooleanValue(A.position==B.numberValue()-1)}else{return new BooleanValue(B.booleanValue())}};function FunctionCallExpr(A){this.name=A;this.args=[]}FunctionCallExpr.prototype.appendArg=function(A){this.args.push(A)};FunctionCallExpr.prototype.evaluate=function(A){var B=""+this.name.value;var C=this.xpathfunctions[B];if(C){return C.call(this,A)}else{Log.write("XPath NO SUCH FUNCTION "+B);return new BooleanValue(false)}};FunctionCallExpr.prototype.xpathfunctions={"last":function(A){assert(this.args.length==0);return new NumberValue(A.nodelist.length)},"position":function(A){assert(this.args.length==0);return new NumberValue(A.position+1)},"count":function(A){assert(this.args.length==1);var B=this.args[0].evaluate(A);return new NumberValue(B.nodeSetValue().length)},"id":function(I){assert(this.args.length==1);var D=this.args.evaluate(I);var E=[];var A;if(D.type=="node-set"){A=[];for(var C=0;C<D.length;++C){var G=xmlValue(D[C]).split(/\s+/);for(var H=0;H<G.length;++H){A.push(G[H])}}}else{A=D.split(/\s+/)}var F=I.node.ownerDocument;for(var C=0;C<A.length;++C){var B=F.getElementById(A[C]);if(B){E.push(B)}}return new NodeSetValue(E)},"local-name":function(A){alert("not implmented yet: XPath function local-name()")},"namespace-uri":function(A){alert("not implmented yet: XPath function namespace-uri()")},"name":function(A){assert(this.args.length==1||this.args.length==0);var B;if(this.args.length==0){B=[A.node]}else{B=this.args[0].evaluate(A).nodeSetValue()}if(B.length==0){return new StringValue("")}else{return new StringValue(B[0].nodeName)}},"string":function(A){assert(this.args.length==1||this.args.length==0);if(this.args.length==0){return new StringValue(new NodeSetValue([A.node]).stringValue())}else{return new StringValue(this.args[0].evaluate(A).stringValue())}},"concat":function(A){var B="";for(var C=0;C<this.args.length;++C){B+=this.args[C].evaluate(A).stringValue()}return new StringValue(B)},"starts-with":function(A){assert(this.args.length==2);var C=this.args[0].evaluate(A).stringValue();var B=this.args[1].evaluate(A).stringValue();return new BooleanValue(C.indexOf(B)==0)},"contains":function(A){assert(this.args.length==2);var C=this.args[0].evaluate(A).stringValue();var B=this.args[1].evaluate(A).stringValue();return new BooleanValue(C.indexOf(B)!=-1)},"substring-before":function(A){assert(this.args.length==2);var E=this.args[0].evaluate(A).stringValue();var D=this.args[1].evaluate(A).stringValue();var C=E.indexOf(D);var B;if(C==-1){B=""}else{B=E.substr(0,C)}return new StringValue(B)},"substring-after":function(A){assert(this.args.length==2);var E=this.args[0].evaluate(A).stringValue();var D=this.args[1].evaluate(A).stringValue();var C=E.indexOf(D);var B;if(C==-1){B=""}else{B=E.substr(C+D.length)}return new StringValue(B)},"substring":function(A){assert(this.args.length==2||this.args.length==3);var F=this.args[0].evaluate(A).stringValue();var D=this.args[1].evaluate(A).numberValue();var C;if(this.args.length==2){var G=Math.max(0,Math.round(D)-1);C=F.substr(G)}else{var B=this.args[2].evaluate(A).numberValue();var H=Math.round(D)-1;var G=Math.max(0,H);var E=Math.round(B)-Math.max(0,-H);C=F.substr(G,E)}return new StringValue(C)},"string-length":function(A){var B;if(this.args.length>0){B=this.args[0].evaluate(A).stringValue()}else{B=new NodeSetValue([A.node]).stringValue()}return new NumberValue(B.length)},"normalize-space":function(A){var B;if(this.args.length>0){B=this.args[0].evaluate(A).stringValue()}else{B=new NodeSetValue([A.node]).stringValue()}B=B.replace(/^\s*/,"").replace(/\s*$/,"").replace(/\s+/g," ");return new StringValue(B)},"translate":function(A){assert(this.args.length==3);var E=this.args[0].evaluate(A).stringValue();var D=this.args[1].evaluate(A).stringValue();var B=this.args[2].evaluate(A).stringValue();for(var C=0;C<D.length;++C){E=E.replace(new RegExp(D.charAt(C),"g"),B.charAt(C))}return new StringValue(E)},"boolean":function(A){assert(this.args.length==1);return new BooleanValue(this.args[0].evaluate(A).booleanValue())},"not":function(A){assert(this.args.length==1);var B=!this.args[0].evaluate(A).booleanValue();return new BooleanValue(B)},"true":function(A){assert(this.args.length==0);return new BooleanValue(true)},"false":function(A){assert(this.args.length==0);return new BooleanValue(false)},"lang":function(A){assert(this.args.length==1);var C=this.args[0].evaluate(A).stringValue();var E;var D=A.node;while(D&&D!=D.parentNode){E=D.getAttribute("xml:lang");if(E){break}D=D.parentNode}if(!E){return new BooleanValue(false)}else{var B=new RegExp("^"+C+"$","i");return new BooleanValue(E.match(B)||E.replace(/_.*$/,"").match(B))}},"number":function(A){assert(this.args.length==1||this.args.length==0);if(this.args.length==1){return new NumberValue(this.args[0].evaluate(A).numberValue())}else{return new NumberValue(new NodeSetValue([A.node]).numberValue())}},"sum":function(A){assert(this.args.length==1);var D=this.args[0].evaluate(A).nodeSetValue();var C=0;for(var B=0;B<D.length;++B){C+=xmlValue(D[B])-0}return new NumberValue(C)},"floor":function(A){assert(this.args.length==1);var B=this.args[0].evaluate(A).numberValue();return new NumberValue(Math.floor(B))},"ceiling":function(A){assert(this.args.length==1);var B=this.args[0].evaluate(A).numberValue();return new NumberValue(Math.ceil(B))},"round":function(A){assert(this.args.length==1);var B=this.args[0].evaluate(A).numberValue();return new NumberValue(Math.round(B))},"ext-join":function(A){assert(this.args.length==2);var B=this.args[0].evaluate(A).nodeSetValue();var E=this.args[1].evaluate(A).stringValue();var C="";for(var D=0;D<B.length;++D){if(C){C+=E}C+=xmlValue(B[D])}return new StringValue(C)},"ext-if":function(A){assert(this.args.length==3);if(this.args[0].evaluate(A).booleanValue()){return this.args[1].evaluate(A)}else{return this.args[2].evaluate(A)}},"ext-sprintf":function(A){assert(this.args.length>=1);var B=[];for(var C=0;C<this.args.length;++C){B.push(this.args[C].evaluate(A).stringValue())}return new StringValue(sprintf.apply(null,B))},"ext-cardinal":function(A){assert(this.args.length>=1);var D=this.args[0].evaluate(A).numberValue();var B=[];for(var C=0;C<D;++C){B.push(A.node)}return new NodeSetValue(B)}};function UnionExpr(B,A){this.expr1=B;this.expr2=A}UnionExpr.prototype.evaluate=function(C){var B=this.expr1.evaluate(C).nodeSetValue();var A=this.expr2.evaluate(C).nodeSetValue();var F=B.length;for(var D=0;D<A.length;++D){for(var E=0;E<F;++E){if(B[E]==A[D]){E=F}}B.push(A[D])}return new NodeSetValue(A)};function PathExpr(B,A){this.filter=B;this.rel=A}PathExpr.prototype.evaluate=function(B){var D=this.filter.evaluate(B).nodeSetValue();var A=[];for(var E=0;E<D.length;++E){var C=this.rel.evaluate(B.clone(D[E],E,D)).nodeSetValue();for(var F=0;F<C.length;++F){A.push(C[F])}}return new NodeSetValue(A)};function FilterExpr(B,A){this.expr=B;this.predicate=A}FilterExpr.prototype.evaluate=function(A){var C=this.expr.evaluate(A).nodeSetValue();for(var E=0;E<this.predicate.length;++E){var B=C;C=[];for(var D=0;D<B.length;++D){var F=B[D];if(this.predicate[E].evaluate(A.clone(F,D,B)).booleanValue()){C.push(F)}}}return new NodeSetValue(C)};function UnaryMinusExpr(A){this.expr=A}UnaryMinusExpr.prototype.evaluate=function(A){return new NumberValue(-this.expr.evaluate(A).numberValue())};function BinaryExpr(B,C,A){this.expr1=B;this.expr2=A;this.op=C}BinaryExpr.prototype.evaluate=function(A){var B;switch(this.op.value){case"or":B=new BooleanValue(this.expr1.evaluate(A).booleanValue()||this.expr2.evaluate(A).booleanValue());break;case"and":B=new BooleanValue(this.expr1.evaluate(A).booleanValue()&&this.expr2.evaluate(A).booleanValue());break;case"+":B=new NumberValue(this.expr1.evaluate(A).numberValue()+this.expr2.evaluate(A).numberValue());break;case"-":B=new NumberValue(this.expr1.evaluate(A).numberValue()-this.expr2.evaluate(A).numberValue());break;case"*":B=new NumberValue(this.expr1.evaluate(A).numberValue()*this.expr2.evaluate(A).numberValue());break;case"mod":B=new NumberValue(this.expr1.evaluate(A).numberValue()%this.expr2.evaluate(A).numberValue());break;case"div":B=new NumberValue(this.expr1.evaluate(A).numberValue()/this.expr2.evaluate(A).numberValue());break;case"=":B=this.compare(A,function(D,C){return D==C});break;case"!=":B=this.compare(A,function(D,C){return D!=C});break;case"<":B=this.compare(A,function(D,C){return D<C});break;case"<=":B=this.compare(A,function(D,C){return D<=C});break;case">":B=this.compare(A,function(D,C){return D>C});break;case">=":B=this.compare(A,function(D,C){return D>=C});break;default:alert("BinaryExpr.evaluate: "+this.op.value)}return B};BinaryExpr.prototype.compare=function(L,H){var J=this.expr1.evaluate(L);var I=this.expr2.evaluate(L);var G;if(J.type=="node-set"&&I.type=="node-set"){var F=J.nodeSetValue();var E=I.nodeSetValue();G=false;for(var C=0;C<F.length;++C){for(var B=0;B<E.length;++B){if(H(xmlValue(F[C]),xmlValue(E[B]))){G=true;B=E.length;C=F.length}}}}else{if(J.type=="node-set"||I.type=="node-set"){if(J.type=="number"){var M=J.numberValue();var A=I.nodeSetValue();G=false;for(var D=0;D<A.length;++D){var K=xmlValue(A[D])-0;if(H(M,K)){G=true;break}}}else{if(I.type=="number"){var A=J.nodeSetValue();var M=I.numberValue();G=false;for(var D=0;D<A.length;++D){var K=xmlValue(A[D])-0;if(H(K,M)){G=true;break}}}else{if(J.type=="string"){var M=J.stringValue();var A=I.nodeSetValue();G=false;for(var D=0;D<A.length;++D){var K=xmlValue(A[D]);if(H(M,K)){G=true;break}}}else{if(I.type=="string"){var A=J.nodeSetValue();var M=I.stringValue();G=false;for(var D=0;D<A.length;++D){var K=xmlValue(A[D]);if(H(K,M)){G=true;break}}}else{G=H(J.booleanValue(),I.booleanValue())}}}}}else{if(J.type=="boolean"||I.type=="boolean"){G=H(J.booleanValue(),I.booleanValue())}else{if(J.type=="number"||I.type=="number"){G=H(J.numberValue(),I.numberValue())}else{G=H(J.stringValue(),I.stringValue())}}}}return new BooleanValue(G)};function LiteralExpr(A){this.value=A}LiteralExpr.prototype.evaluate=function(A){return new StringValue(this.value)};function NumberExpr(A){this.value=A}NumberExpr.prototype.evaluate=function(A){return new NumberValue(this.value)};function VariableExpr(A){this.name=A}VariableExpr.prototype.evaluate=function(A){return A.getVariable(this.name)};function makeTokenExpr(A){return new TokenExpr(A)}function passExpr(A){return A}function makeLocationExpr1(B,A){A.absolute=true;return A}function makeLocationExpr2(B,A){A.absolute=true;A.prependStep(makeAbbrevStep(B.value));return A}function makeLocationExpr3(B){var A=new LocationExpr();A.appendStep(makeAbbrevStep("."));A.absolute=true;return A}function makeLocationExpr4(B){var A=new LocationExpr();A.absolute=true;A.appendStep(makeAbbrevStep(B.value));return A}function makeLocationExpr5(B){var A=new LocationExpr();A.appendStep(B);return A}function makeLocationExpr6(A,B,C){A.appendStep(C);return A}function makeLocationExpr7(A,B,C){A.appendStep(makeAbbrevStep(B.value));return A}function makeStepExpr1(A){return makeAbbrevStep(A.value)}function makeStepExpr2(A){return makeAbbrevStep(A.value)}function makeStepExpr3(A,B,C){return new StepExpr(A.value,C)}function makeStepExpr4(A,B){return new StepExpr("attribute",B)}function makeStepExpr5(A){return new StepExpr("child",A)}function makeStepExpr6(B,A){B.appendPredicate(A);return B}function makeAbbrevStep(A){switch(A){case"//":return new StepExpr("descendant-or-self",new NodeTestAny);case".":return new StepExpr("self",new NodeTestAny);case"..":return new StepExpr("parent",new NodeTestAny)}}function makeNodeTestExpr1(A){return new NodeTestElement}function makeNodeTestExpr2(A,B,C){return new NodeTestNC(A.value)}function makeNodeTestExpr3(A){return new NodeTestName(A.value)}function makeNodeTestExpr4(C,A){var B=C.value.replace(/\s*\($/,"");switch(B){case"node":return new NodeTestAny;case"text":return new NodeTestText;case"comment":return new NodeTestComment;case"processing-instruction":return new NodeTestPI}}function makeNodeTestExpr5(D,C,A){var B=D.replace(/\s*\($/,"");if(B!="processing-instruction"){throw B+" "+Error().stack}return new NodeTestPI(C.value)}function makePredicateExpr(C,B,A){return new PredicateExpr(B)}function makePrimaryExpr(C,B,A){return B}function makeFunctionCallExpr1(B,C,A){return new FunctionCallExpr(B)}function makeFunctionCallExpr2(E,G,D,C,A){var B=new FunctionCallExpr(E);B.appendArg(D);for(var F=0;F<C.length;++F){B.appendArg(C[F])}return B}function makeArgumentExpr(A,B){return B}function makeUnionExpr(C,A,B){return new UnionExpr(C,B)}function makePathExpr1(C,B,A){return new PathExpr(C,A)}function makePathExpr2(C,B,A){A.prependStep(makeAbbrevStep(B.value));return new PathExpr(C,A)}function makeFilterExpr(B,A){if(A.length>0){return new FilterExpr(B,A)}else{return B}}function makeUnaryMinusExpr(A,B){return new UnaryMinusExpr(B)}function makeBinaryExpr(B,C,A){return new BinaryExpr(B,C,A)}function makeLiteralExpr(A){var B=A.value.substring(1,A.value.length-1);return new LiteralExpr(B)}function makeNumberExpr(A){return new NumberExpr(A.value)}function makeVariableReference(A,B){return new VariableExpr(B.value)}function makeSimpleExpr(C){if(C.charAt(0)=="$"){return new VariableExpr(C.substr(1))}else{if(C.charAt(0)=="@"){var B=new NodeTestName(C.substr(1));var A=new StepExpr("attribute",B);var D=new LocationExpr();D.appendStep(A);return D}else{if(C.match(/^[0-9]+$/)){return new NumberExpr(C)}else{var B=new NodeTestName(C);var A=new StepExpr("child",B);var D=new LocationExpr();D.appendStep(A);return D}}}}function makeSimpleExpr2(E){var C=E.split("/");var F=new LocationExpr();for(var D=0;D<C.length;D++){var B=new NodeTestName(C[D]);var A=new StepExpr("child",B);F.appendStep(A)}return F}var xpathAxis={ANCESTOR_OR_SELF:"ancestor-or-self",ANCESTOR:"ancestor",ATTRIBUTE:"attribute",CHILD:"child",DESCENDANT_OR_SELF:"descendant-or-self",DESCENDANT:"descendant",FOLLOWING_SIBLING:"following-sibling",FOLLOWING:"following",NAMESPACE:"namespace",PARENT:"parent",PRECEDING_SIBLING:"preceding-sibling",PRECEDING:"preceding",SELF:"self"};var xpathAxesRe=[xpathAxis.ANCESTOR_OR_SELF,xpathAxis.ANCESTOR,xpathAxis.ATTRIBUTE,xpathAxis.CHILD,xpathAxis.DESCENDANT_OR_SELF,xpathAxis.DESCENDANT,xpathAxis.FOLLOWING_SIBLING,xpathAxis.FOLLOWING,xpathAxis.NAMESPACE,xpathAxis.PARENT,xpathAxis.PRECEDING_SIBLING,xpathAxis.PRECEDING,xpathAxis.SELF].join("|");var TOK_PIPE={label:"|",prec:17,re:new RegExp("^\\|")};var TOK_DSLASH={label:"//",prec:19,re:new RegExp("^//")};var TOK_SLASH={label:"/",prec:30,re:new RegExp("^/")};var TOK_AXIS={label:"::",prec:20,re:new RegExp("^::")};var TOK_COLON={label:":",prec:1000,re:new RegExp("^:")};var TOK_AXISNAME={label:"[axis]",re:new RegExp("^("+xpathAxesRe+")")};var TOK_PARENO={label:"(",prec:34,re:new RegExp("^\\(")};var TOK_PARENC={label:")",re:new RegExp("^\\)")};var TOK_DDOT={label:"..",prec:34,re:new RegExp("^\\.\\.")};var TOK_DOT={label:".",prec:34,re:new RegExp("^\\.")};var TOK_AT={label:"@",prec:34,re:new RegExp("^@")};var TOK_COMMA={label:",",re:new RegExp("^,")};var TOK_OR={label:"or",prec:10,re:new RegExp("^or\\b")};var TOK_AND={label:"and",prec:11,re:new RegExp("^and\\b")};var TOK_EQ={label:"=",prec:12,re:new RegExp("^=")};var TOK_NEQ={label:"!=",prec:12,re:new RegExp("^!=")};var TOK_GE={label:">=",prec:13,re:new RegExp("^>=")};var TOK_GT={label:">",prec:13,re:new RegExp("^>")};var TOK_LE={label:"<=",prec:13,re:new RegExp("^<=")};var TOK_LT={label:"<",prec:13,re:new RegExp("^<")};var TOK_PLUS={label:"+",prec:14,re:new RegExp("^\\+"),left:true};var TOK_MINUS={label:"-",prec:14,re:new RegExp("^\\-"),left:true};var TOK_DIV={label:"div",prec:15,re:new RegExp("^div\\b"),left:true};var TOK_MOD={label:"mod",prec:15,re:new RegExp("^mod\\b"),left:true};var TOK_BRACKO={label:"[",prec:32,re:new RegExp("^\\[")};var TOK_BRACKC={label:"]",re:new RegExp("^\\]")};var TOK_DOLLAR={label:"$",re:new RegExp("^\\$")};var TOK_NCNAME={label:"[ncname]",re:new RegExp("^[a-z][-\\w]*","i")};var TOK_ASTERISK={label:"*",prec:15,re:new RegExp("^\\*"),left:true};var TOK_LITERALQ={label:"[litq]",prec:20,re:new RegExp("^'[^\\']*'")};var TOK_LITERALQQ={label:"[litqq]",prec:20,re:new RegExp("^\"[^\\\"]*\"")};var TOK_NUMBER={label:"[number]",prec:35,re:new RegExp("^\\d+(\\.\\d*)?")};var TOK_QNAME={label:"[qname]",re:new RegExp("^([a-z][-\\w]*:)?[a-z][-\\w]*","i")};var TOK_NODEO={label:"[nodetest-start]",re:new RegExp("^(processing-instruction|comment|text|node)\\(")};var xpathTokenRules=[TOK_DSLASH,TOK_SLASH,TOK_DDOT,TOK_DOT,TOK_AXIS,TOK_COLON,TOK_AXISNAME,TOK_NODEO,TOK_PARENO,TOK_PARENC,TOK_BRACKO,TOK_BRACKC,TOK_AT,TOK_COMMA,TOK_OR,TOK_AND,TOK_NEQ,TOK_EQ,TOK_GE,TOK_GT,TOK_LE,TOK_LT,TOK_PLUS,TOK_MINUS,TOK_ASTERISK,TOK_PIPE,TOK_MOD,TOK_DIV,TOK_LITERALQ,TOK_LITERALQQ,TOK_NUMBER,TOK_QNAME,TOK_NCNAME,TOK_DOLLAR];var XPathLocationPath={label:"LocationPath"};var XPathRelativeLocationPath={label:"RelativeLocationPath"};var XPathAbsoluteLocationPath={label:"AbsoluteLocationPath"};var XPathStep={label:"Step"};var XPathNodeTest={label:"NodeTest"};var XPathPredicate={label:"Predicate"};var XPathLiteral={label:"Literal"};var XPathExpr={label:"Expr"};var XPathPrimaryExpr={label:"PrimaryExpr"};var XPathVariableReference={label:"Variablereference"};var XPathNumber={label:"Number"};var XPathFunctionCall={label:"FunctionCall"};var XPathArgumentRemainder={label:"ArgumentRemainder"};var XPathPathExpr={label:"PathExpr"};var XPathUnionExpr={label:"UnionExpr"};var XPathFilterExpr={label:"FilterExpr"};var XPathDigits={label:"Digits"};var xpathNonTerminals=[XPathLocationPath,XPathRelativeLocationPath,XPathAbsoluteLocationPath,XPathStep,XPathNodeTest,XPathPredicate,XPathLiteral,XPathExpr,XPathPrimaryExpr,XPathVariableReference,XPathNumber,XPathFunctionCall,XPathArgumentRemainder,XPathPathExpr,XPathUnionExpr,XPathFilterExpr,XPathDigits];var Q_01={label:"?"};var Q_MM={label:"*"};var Q_1M={label:"+"};var ASSOC_LEFT=true;var xpathGrammarRules=[[XPathLocationPath,[XPathRelativeLocationPath],18,passExpr],[XPathLocationPath,[XPathAbsoluteLocationPath],18,passExpr],[XPathAbsoluteLocationPath,[TOK_SLASH,XPathRelativeLocationPath],18,makeLocationExpr1],[XPathAbsoluteLocationPath,[TOK_DSLASH,XPathRelativeLocationPath],18,makeLocationExpr2],[XPathAbsoluteLocationPath,[TOK_SLASH],0,makeLocationExpr3],[XPathAbsoluteLocationPath,[TOK_DSLASH],0,makeLocationExpr4],[XPathRelativeLocationPath,[XPathStep],31,makeLocationExpr5],[XPathRelativeLocationPath,[XPathRelativeLocationPath,TOK_SLASH,XPathStep],31,makeLocationExpr6],[XPathRelativeLocationPath,[XPathRelativeLocationPath,TOK_DSLASH,XPathStep],31,makeLocationExpr7],[XPathStep,[TOK_DOT],33,makeStepExpr1],[XPathStep,[TOK_DDOT],33,makeStepExpr2],[XPathStep,[TOK_AXISNAME,TOK_AXIS,XPathNodeTest],33,makeStepExpr3],[XPathStep,[TOK_AT,XPathNodeTest],33,makeStepExpr4],[XPathStep,[XPathNodeTest],33,makeStepExpr5],[XPathStep,[XPathStep,XPathPredicate],33,makeStepExpr6],[XPathNodeTest,[TOK_ASTERISK],33,makeNodeTestExpr1],[XPathNodeTest,[TOK_NCNAME,TOK_COLON,TOK_ASTERISK],33,makeNodeTestExpr2],[XPathNodeTest,[TOK_QNAME],33,makeNodeTestExpr3],[XPathNodeTest,[TOK_NODEO,TOK_PARENC],33,makeNodeTestExpr4],[XPathNodeTest,[TOK_NODEO,XPathLiteral,TOK_PARENC],33,makeNodeTestExpr5],[XPathPredicate,[TOK_BRACKO,XPathExpr,TOK_BRACKC],33,makePredicateExpr],[XPathPrimaryExpr,[XPathVariableReference],33,passExpr],[XPathPrimaryExpr,[TOK_PARENO,XPathExpr,TOK_PARENC],33,makePrimaryExpr],[XPathPrimaryExpr,[XPathLiteral],30,passExpr],[XPathPrimaryExpr,[XPathNumber],30,passExpr],[XPathPrimaryExpr,[XPathFunctionCall],30,passExpr],[XPathFunctionCall,[TOK_QNAME,TOK_PARENO,TOK_PARENC],-1,makeFunctionCallExpr1],[XPathFunctionCall,[TOK_QNAME,TOK_PARENO,XPathExpr,XPathArgumentRemainder,Q_MM,TOK_PARENC],-1,makeFunctionCallExpr2],[XPathArgumentRemainder,[TOK_COMMA,XPathExpr],-1,makeArgumentExpr],[XPathUnionExpr,[XPathPathExpr],20,passExpr],[XPathUnionExpr,[XPathUnionExpr,TOK_PIPE,XPathPathExpr],20,makeUnionExpr],[XPathPathExpr,[XPathLocationPath],20,passExpr],[XPathPathExpr,[XPathFilterExpr],19,passExpr],[XPathPathExpr,[XPathFilterExpr,TOK_SLASH,XPathRelativeLocationPath],20,makePathExpr1],[XPathPathExpr,[XPathFilterExpr,TOK_DSLASH,XPathRelativeLocationPath],20,makePathExpr2],[XPathFilterExpr,[XPathPrimaryExpr,XPathPredicate,Q_MM],20,makeFilterExpr],[XPathExpr,[XPathPrimaryExpr],16,passExpr],[XPathExpr,[XPathUnionExpr],16,passExpr],[XPathExpr,[TOK_MINUS,XPathExpr],-1,makeUnaryMinusExpr],[XPathExpr,[XPathExpr,TOK_OR,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_AND,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_EQ,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_NEQ,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_LT,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_LE,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_GT,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_GE,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_PLUS,XPathExpr],-1,makeBinaryExpr,ASSOC_LEFT],[XPathExpr,[XPathExpr,TOK_MINUS,XPathExpr],-1,makeBinaryExpr,ASSOC_LEFT],[XPathExpr,[XPathExpr,TOK_ASTERISK,XPathExpr],-1,makeBinaryExpr,ASSOC_LEFT],[XPathExpr,[XPathExpr,TOK_DIV,XPathExpr],-1,makeBinaryExpr,ASSOC_LEFT],[XPathExpr,[XPathExpr,TOK_MOD,XPathExpr],-1,makeBinaryExpr,ASSOC_LEFT],[XPathLiteral,[TOK_LITERALQ],-1,makeLiteralExpr],[XPathLiteral,[TOK_LITERALQQ],-1,makeLiteralExpr],[XPathNumber,[TOK_NUMBER],-1,makeNumberExpr],[XPathVariableReference,[TOK_DOLLAR,TOK_QNAME],200,makeVariableReference]];var xpathRules=[];function xpathParseInit(){if(xpathRules.length){return }xpathGrammarRules.sort(function(I,H){var K=I[1].length;var J=H[1].length;if(K<J){return 1}else{if(K>J){return -1}else{return 0}}});var A=1;for(var C=0;C<xpathNonTerminals.length;++C){xpathNonTerminals[C].key=A++}for(C=0;C<xpathTokenRules.length;++C){xpathTokenRules[C].key=A++}if(xpathdebug){Log.write("XPath parse INIT: "+A+" rules")}function E(J,H,I){if(!J[H]){J[H]=[]}J[H].push(I)}for(C=0;C<xpathGrammarRules.length;++C){var G=xpathGrammarRules[C];var F=G[1];for(var B=F.length-1;B>=0;--B){if(F[B]==Q_1M){E(xpathRules,F[B-1].key,G);break}else{if(F[B]==Q_MM||F[B]==Q_01){E(xpathRules,F[B-1].key,G);--B}else{E(xpathRules,F[B].key,G);break}}}}if(xpathdebug){Log.write("XPath parse INIT: "+xpathRules.length+" rule bins")}var D=0;mapExec(xpathRules,function(H){if(H){D+=H.length}});if(xpathdebug){Log.write("XPath parse INIT: "+(D/xpathRules.length)+" average bin size")}}function xpathCollectDescendants(B,A){for(var C=A.firstChild;C;C=C.nextSibling){B.push(C);arguments.callee(B,C)}}function xpathCollectDescendantsReverse(B,A){for(var C=A.lastChild;C;C=C.previousSibling){B.push(C);arguments.callee(B,C)}}function xpathDomEval(C,B){var D=xpathParse(C);var A=D.evaluate(new ExprContext(B));return A}function xpathSort(H,F){if(F.length==0){return }var L=[];for(var G=0;G<H.nodelist.length;++G){var C=H.nodelist[G];var D={node:C,key:[]};var B=H.clone(C,0,[C]);for(var E=0;E<F.length;++E){var K=F[E];var J=K.expr.evaluate(B);var I;if(K.type=="text"){I=J.stringValue()}else{if(K.type=="number"){I=J.numberValue()}}D.key.push({value:I,order:K.order})}D.key.push({value:G,order:"ascending"});L.push(D)}L.sort(xpathSortByKey);var A=[];for(var G=0;G<L.length;++G){A.push(L[G].node)}H.nodelist=A;H.setNode(A[0],0)}function xpathSortByKey(D,C){for(var A=0;A<D.key.length;++A){var B=D.key[A].order=="descending"?-1:1;if(D.key[A].value>C.key[A].value){return +1*B}else{if(D.key[A].value<C.key[A].value){return -1*B}}}return 0}function el(A){return document.getElementById(A)}function px(A){return A+"px"}function stringSplit(C,E){var B=C.indexOf(E);if(B==-1){return[C]}var D=[];D.push(C.substr(0,B));while(B!=-1){var A=C.indexOf(E,B+1);if(A!=-1){D.push(C.substr(B+1,A-B-1))}else{D.push(C.substr(B+1))}B=A}return D}function xmlValue(C){if(!C){return""}var A="";if(C.nodeType==DOM_TEXT_NODE||C.nodeType==DOM_CDATA_SECTION_NODE||C.nodeType==DOM_ATTRIBUTE_NODE){A+=C.nodeValue}else{if(C.nodeType==DOM_ELEMENT_NODE||C.nodeType==DOM_DOCUMENT_NODE||C.nodeType==DOM_DOCUMENT_FRAGMENT_NODE){for(var B=0;B<C.childNodes.length;++B){A+=arguments.callee(C.childNodes[B])}}}return A}function xmlText(D){var B="";if(D.nodeType==DOM_TEXT_NODE){B+=xmlEscapeText(D.nodeValue)}else{if(D.nodeType==DOM_ELEMENT_NODE){B+="<"+D.nodeName;for(var C=0;C<D.attributes.length;++C){var A=D.attributes[C];if(A&&A.nodeName&&A.nodeValue){B+=" "+A.nodeName;B+="=\""+xmlEscapeAttr(A.nodeValue)+"\""}}if(D.childNodes.length==0){B+="/>"}else{B+=">";for(var C=0;C<D.childNodes.length;++C){B+=arguments.callee(D.childNodes[C])}B+="</"+D.nodeName+">"}}else{if(D.nodeType==DOM_DOCUMENT_NODE||D.nodeType==DOM_DOCUMENT_FRAGMENT_NODE){for(var C=0;C<D.childNodes.length;++C){B+=arguments.callee(D.childNodes[C])}}}}return B}function mapExec(C,B){for(var A=0;A<C.length;++A){B(C[A])}}function mapExpr(D,C){var A=[];for(var B=0;B<D.length;++B){A.push(C(D[B]))}return A}function reverseInplace(D){for(var A=0;A<D.length/2;++A){var C=D[A];var B=D.length-A-1;D[A]=D[B];D[B]=C}}function copyArray(C,B){for(var A=0;A<B.length;++A){C.push(B[A])}}function assert(A){if(!A){throw"assertion failed"}}var DOM_ELEMENT_NODE=1;var DOM_ATTRIBUTE_NODE=2;var DOM_TEXT_NODE=3;var DOM_CDATA_SECTION_NODE=4;var DOM_ENTITY_REFERENCE_NODE=5;var DOM_ENTITY_NODE=6;var DOM_PROCESSING_INSTRUCTION_NODE=7;var DOM_COMMENT_NODE=8;var DOM_DOCUMENT_NODE=9;var DOM_DOCUMENT_TYPE_NODE=10;var DOM_DOCUMENT_FRAGMENT_NODE=11;var DOM_NOTATION_NODE=12;var xpathdebug=false;var xsltdebug=false;function xmlEscapeText(A){return A.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function xmlEscapeAttr(A){return xmlEscapeText(A).replace(/\"/g,"&quot;")}function xmlEscapeTags(A){return A.replace(/</g,"&lt;").replace(/>/g,"&gt;")}var logging__=true;function Log(){}Log.lines=[];Log.write=function(A){if(logging__){this.lines.push(xmlEscapeText(A));this.show()}};Log.writeXML=function(B){if(logging__){var D=B.replace(/</g,"\n<");var C=xmlEscapeText(D);var A=C.replace(/\s*\n(\s|\n)*/g,"<br/>");this.lines.push(A);this.show()}};Log.writeRaw=function(A){if(logging__){this.lines.push(A);this.show()}};Log.clear=function(){if(logging__){var A=this.div();A.innerHTML="";this.lines=[]}};Log.show=function(){var A=this.div();A.innerHTML+=this.lines.join("<br/>")+"<br/>";this.lines=[];A.scrollTop=A.scrollHeight};Log.div=function(){var A=document.getElementById("log");if(!A){A=document.createElement("div");A.id="log";A.style.position="absolute";A.style.right="5px";A.style.top="5px";A.style.width="250px";A.style.height="150px";A.style.overflow="auto";A.style.backgroundColor="#f0f0f0";A.style.border="1px solid gray";A.style.fontSize="10px";A.style.padding="5px";document.body.appendChild(A)}return A};function Timer(){}Timer.start=function(){};Timer.end=function(){}