var Spry;

if(!Spry){Spry={};
}
if(!Spry.Utils)
	{Spry.Utils={};
}
	Spry.Utils.msProgIDs=["MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.3.0"];

	Spry.Utils.createXMLHttpRequest=function(){var A=null;

	try{
		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);
				}
			}
		}
		if(!A&&window.XMLHttpRequest){
			A=new XMLHttpRequest();
		}
	}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){
		if(D.errorCallback){
			D.errorCallback(D);
		}else{
			//-- This is to avoid foll error caused due to leaving page before callback: Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIXMLHttpRequest.send]" nsresult
			if(F.toString().indexOf('NS_ERROR_FAILURE') < "0" && B.indexOf('getAllLocations') < "0"){
				Spry.Debug.reportError("Exception caught while loading "+B+": "+F);		
			}
			//Spry.Debug.reportError("Exception caught while loading "+B+": "+F);
		}
		D=null;
	}
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=Spry.$(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){Spry.Utils.loadURL("GET",B,true,function(E){Spry.Utils.setInnerHTML(D,E.xhRequest.responseText);
if(A){A(D,B);
}},C);
};
if(!Spry.$$){Spry.Utils.addEventListener=function(C,B,D,A){try{C=Spry.$(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=Spry.$(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.addClassName=function(B,A){B=Spry.$(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=Spry.$(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.getObjectByName=function(C){var A=null;
if(C){var E=window;
var B=C.split(".");
for(var D=0;
E&&D<B.length;
D++){A=E[B[D]];
E=A;
}}return A;
};
Spry.$=function(B){if(arguments.length>1){for(var A=0,D=[],C=arguments.length;
A<C;
A++){D.push(Spry.$(arguments[A]));
}return D;
}if(typeof B=="string"){B=document.getElementById(B);
}return B;
};
}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;/gi,"<");
B=B.replace(/&gt;/gi,">");
B=B.replace(/&quot;/gi,'"');
B=B.replace(/&amp;/gi,"&");
}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.getFirstChildWithNodeName=function(A,C){var B=A.firstChild;
while(B){if(B.nodeName==C){return B;
}B=B.nextSibling;
}return null;
};
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();
};
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.onloadDidFire=false;
Spry.Utils.addLoadListener(function(){Spry.Debug.onloadDidFire=true;
Spry.Debug.flushQueuedMessages();
});
Spry.Debug.flushQueuedMessages=function(){if(Spry.Debug.flushQueuedMessages.msgs){var B=Spry.Debug.flushQueuedMessages.msgs;
for(var A=0;
A<B.length;
A++){Spry.Debug.debugOut(B[A].msg,B[A].color);
}Spry.Debug.flushQueuedMessages.msgs=null;
}};
Spry.Debug.createDebugWindow=function(){if(!Spry.Debug.enableTrace||Spry.Debug.debugWindow||!Spry.Debug.onloadDidFire){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){if(!Spry.Debug.flushQueuedMessages.msgs){Spry.Debug.flushQueuedMessages.msgs=new Array;
}Spry.Debug.flushQueuedMessages.msgs.push({msg:C,color:A});
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.initRegionsOnLoad=true;
Spry.Data.initRegions=function(D){D=D?Spry.$(D):document.body;
var M=null;
var G=Spry.Utils.getNodesByFunc(D,function(U){try{if(U.nodeType!=1){return false;
}var S="spry:region";
var R=U.attributes.getNamedItem(S);
if(!R){S="spry:detailregion";
R=U.attributes.getNamedItem(S);
}if(R){if(M){var T=U.parentNode;
while(T){if(T==M){Spry.Debug.reportError("Found a nested "+S+" in the following markup. Nested regions are currently not supported.<br/><pre>"+Spry.Utils.encodeEntities(T.innerHTML)+"</pre>");
return false;
}T=T.parentNode;
}}if(R.value){R=U.attributes.getNamedItem("id");
if(!R||!R.value){U.setAttribute("id","spryregion"+(++Spry.Data.initRegions.nextUniqueRegionID));
}M=U;
return true;
}else{Spry.Debug.reportError(S+" attributes require one or more data set names as values!");
}}}catch(V){}return false;
});
var A,N,I;
var H=[];
for(I=0;
I<G.length;
I++){var C=G[I];
var J=false;
A=C.attributes.getNamedItem("id").value;
attr=C.attributes.getNamedItem("spry:region");
if(!attr){attr=C.attributes.getNamedItem("spry:detailregion");
J=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);
N=Spry.Data.Region.strToDataSetsArray(attr.value);
if(!N.length){Spry.Debug.reportError("spry:region or spry:detailregion attribute has no data set!");
continue;
}var K=false;
var P=false;
var F="";
var Q=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;
}attr=C.attributes.getNamedItem("spry:expiredstate");
if(attr&&attr.value){E.expired=attr.value;
}var L=Spry.Utils.getNodesByFunc(C,function(g){try{if(g.nodeType==1){var X=g.attributes;
var U=Spry.Data.Region.PI.orderedInstructions.length;
var S=null;
var R=null;
for(var j=0;
j<U;
j++){var h=Spry.Data.Region.PI.orderedInstructions[j];
var f=X.getNamedItem(h);
if(!f){continue;
}var d=Spry.Data.Region.PI.instructions[h];
var Z=(g==C)?true:d.childrenOnly;
var c=d.getOpenTag(g,h);
var W=d.getCloseTag(g,h);
if(Z){var a=document.createComment(c);
var b=document.createComment(W);
if(!S){g.insertBefore(a,g.firstChild);
}else{g.insertBefore(a,S.nextSibling);
}S=a;
if(!R){g.appendChild(b);
}else{g.insertBefore(b,R);
}R=b;
}else{var Y=g.parentNode;
Y.insertBefore(document.createComment(c),g);
Y.insertBefore(document.createComment(W),g.nextSibling);
}if(h=="spry:state"){B[f.value]=true;
}g.removeAttribute(h);
}if(Spry.Data.Region.enableBehaviorAttributes){var l=Spry.Data.Region.behaviorAttrs;
for(var T in l){var V=X.getNamedItem(T);
if(V){K=true;
if(l[T].setup){l[T].setup(g,V.value);
}}}}}}catch(k){}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(!P){C.innerHTML="";
}var O=new Spry.Data.Region(C,A,J,F,N,B,E,K);
Spry.Data.regionsArray[O.name]=O;
H.push(O);
}for(var I=0;
I<H.length;
I++){H[I].updateContent();
}};
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.getDataSetByName=function(A){var B=window[A];
if(typeof B!="object"||!B.getData||!B.filter){return null;
}return B;
};
Spry.Data.DataSet=function(A){Spry.Utils.Notifier.call(this);
this.name="";
this.internalID=Spry.Data.DataSet.nextDataSetID++;
this.curRowID=0;
this.data=[];
this.unfilteredData=null;
this.dataHash={};
this.columnTypes={};
this.filterFunc=null;
this.filterDataFunc=null;
this.distinctOnLoad=false;
this.distinctFieldsOnLoad=null;
this.sortOnLoad=null;
this.sortOrderOnLoad="ascending";
this.keepSorted=false;
this.dataWasLoaded=false;
this.pendingRequest=null;
this.lastSortColumns=[];
this.lastSortOrder="";
this.loadIntervalID=0;
Spry.Utils.setOptions(this,A);
};
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.getValue=function(C,B){var A=undefined;
if(!B){B=this.getCurrentRow();
}switch(C){case"ds_RowNumber":A=this.getRowNumber(B);
break;
case"ds_RowNumberPlus1":A=this.getRowNumber(B)+1;
break;
case"ds_RowCount":A=this.getRowCount();
break;
case"ds_UnfilteredRowCount":A=this.getRowCount(true);
break;
case"ds_CurrentRowNumber":A=this.getCurrentRowNumber();
break;
case"ds_CurrentRowID":A=this.getCurrentRowID();
break;
case"ds_EvenOddRow":A=(this.getRowNumber(B)%2)?Spry.Data.Region.evenRowClassName:Spry.Data.Region.oddRowClassName;
break;
case"ds_SortOrder":A=this.getSortOrder();
break;
case"ds_SortColumn":A=this.getSortColumn();
break;
default:if(B){A=B[C];
}break;
}return A;
};
Spry.Data.DataSet.prototype.setDataFromArray=function(A,E){this.notifyObservers("onPreLoad");
this.unfilteredData=null;
this.filteredData=null;
this.data=[];
this.dataHash={};
var B=A.length;
for(var C=0;
C<B;
C++){var D=A[C];
if(D.ds_RowID==undefined){D.ds_RowID=C;
}this.dataHash[D.ds_RowID]=D;
this.data.push(D);
}this.loadData(E);
};
Spry.Data.DataSet.prototype.loadData=function(C){var A=this;
this.pendingRequest=new Object;
this.dataWasLoaded=false;
var B=function(){A.pendingRequest=null;
A.dataWasLoaded=true;
A.applyColumnTypes();
A.disableNotifications();
A.filterAndSortData();
A.enableNotifications();
A.notifyObservers("onPostLoad");
A.notifyObservers("onDataChanged");
};
if(C){B();
}else{this.pendingRequest.timer=setTimeout(B,0);
}};
Spry.Data.DataSet.prototype.filterAndSortData=function(){if(this.filterDataFunc){this.filterData(this.filterDataFunc,true);
}if(this.distinctOnLoad){this.distinct(this.distinctFieldsOnLoad);
}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;
}};
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(E,A){if(E){var C=this.getData(A);
if(C&&C.length){var D=C.length;
for(var B=0;
B<D;
B++){if(C[B]==E){return B;
}}}}return -1;
};
Spry.Data.DataSet.prototype.getCurrentRowNumber=function(){return this.getRowNumber(this.getCurrentRow());
};
Spry.Data.DataSet.prototype.getCurrentRowID=function(){return this.curRowID;
};
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 A?null:D;
};
Spry.Data.DataSet.prototype.setColumnType=function(C,B){if(C){if(typeof C=="string"){C=[C];
}for(var A=0;
A<C.length;
A++){this.columnTypes[C[A]]=B;
}}};
Spry.Data.DataSet.prototype.getColumnType=function(A){if(this.columnTypes[A]){return this.columnTypes[A];
}return"string";
};
Spry.Data.DataSet.prototype.applyColumnTypes=function(){var D=this.getData(true);
var F=D.length;
var E=[];
if(F<1){return;
}for(var A in this.columnTypes){var C=this.columnTypes[A];
if(C!="string"){for(var B=0;
B<F;
B++){var H=D[B];
var G=H[A];
if(G!=undefined){if(C=="number"){H[A]=new Number(G);
}else{if(C=="html"){H[A]=Spry.Utils.decodeEntities(G);
}}}}}}};
Spry.Data.DataSet.prototype.distinct=function(H){if(this.data){var F=this.data;
this.data=[];
this.dataHash={};
var D=false;
var G={};
var E=0;
var J=[];
if(typeof H=="string"){J=[H];
}else{if(H){J=H;
}else{for(var A in F[0]){J[E++]=A;
}}}for(var E=0;
E<F.length;
E++){var B=F[E];
var I="";
for(var C=0;
C<J.length;
C++){A=J[C];
if(A!="ds_RowID"){if(I){I+=",";
}I+=A+':"'+B[A]+'"';
}}if(!G[I]){this.data.push(B);
this.dataHash[B.ds_RowID]=B;
G[I]=true;
}else{D=true;
}}if(D){this.notifyObservers("onDataChanged");
}}};
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){F=F[D];
E=E[D];
if(F==undefined||E==undefined){return(F==E)?0:(F?1:-1);
}return F-E;
};
}else{B=function(F,E){F=F[D];
E=E[D];
if(F==undefined||E==undefined){return(F==E)?0:(F?-1:1);
}return E-F;
};
}}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){K=K[D];
J=J[D];
if(K==undefined||J==undefined){return(K==J)?0:(K?1:-1);
}var N=K.toString();
var L=J.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;
}}return -1;
};
}else{B=function(K,J){K=K[D];
J=J[D];
if(K==undefined||J==undefined){return(K==J)?0:(K?-1:1);
}var N=K.toString();
var L=J.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;
}}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.HTTPSourceDataSet=function(A,B){Spry.Data.DataSet.call(this);
this.url=A;
this.dataSetsForDataRefStrings=new Array;
this.hasDataRefStrings=false;
this.useCache=true;
this.setRequestInfo(B,true);
Spry.Utils.setOptions(this,B,true);
this.recalculateDataSetDependencies();
if(this.loadInterval>0){this.startLoadInterval(this.loadInterval);
}};
Spry.Data.HTTPSourceDataSet.prototype=new Spry.Data.DataSet();
Spry.Data.HTTPSourceDataSet.prototype.constructor=Spry.Data.HTTPSourceDataSet;
Spry.Data.HTTPSourceDataSet.prototype.setRequestInfo=function(A,B){this.requestInfo=new Spry.Utils.loadURL.Request();
this.requestInfo.extractRequestOptions(A,B);
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.Data.HTTPSourceDataSet.prototype.recalculateDataSetDependencies=function(){this.hasDataRefStrings=false;
var B=0;
for(B=0;
B<this.dataSetsForDataRefStrings.length;
B++){var D=this.dataSetsForDataRefStrings[B];
if(D){D.removeObserver(this);
}}this.dataSetsForDataRefStrings=new Array();
var A=this.getDataRefStrings();
var C=0;
for(var G=0;
G<A.length;
G++){var E=Spry.Data.Region.getTokensFromStr(A[G]);
for(B=0;
E&&B<E.length;
B++){if(E[B].search(/{[^}:]+::[^}]+}/)!=-1){var F=E[B].replace(/^\{|::.*\}/g,"");
var D=null;
if(!this.dataSetsForDataRefStrings[F]){D=Spry.Data.getDataSetByName(F);
if(F&&D){this.dataSetsForDataRefStrings[F]=D;
this.dataSetsForDataRefStrings[C++]=D;
this.hasDataRefStrings=true;
}}}}}for(B=0;
B<this.dataSetsForDataRefStrings.length;
B++){var D=this.dataSetsForDataRefStrings[B];
D.addObserver(this);
}};
Spry.Data.HTTPSourceDataSet.prototype.getDataRefStrings=function(){var A=[];
if(this.url){A.push(this.url);
}if(this.requestInfo&&this.requestInfo.postData){A.push(this.requestInfo.postData);
}return A;
};
Spry.Data.HTTPSourceDataSet.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.HTTPSourceDataSet.prototype.onCurrentRowChanged=function(B,A){this.attemptLoadData();
};
Spry.Data.HTTPSourceDataSet.prototype.onPostSort=function(B,A){this.attemptLoadData();
};
Spry.Data.HTTPSourceDataSet.prototype.onDataChanged=function(B,A){this.attemptLoadData();
};
Spry.Data.HTTPSourceDataSet.prototype.loadData=function(){if(!this.url){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.HTTPSourceDataSet.LoadManager.loadData(E,this,this.useCache);
};
Spry.Data.HTTPSourceDataSet.prototype.cancelLoadData=function(){if(this.pendingRequest){Spry.Data.HTTPSourceDataSet.LoadManager.cancelLoadData(this.pendingRequest.data,this);
this.pendingRequest=null;
}};
Spry.Data.HTTPSourceDataSet.prototype.getURL=function(){return this.url;
};
Spry.Data.HTTPSourceDataSet.prototype.setURL=function(B,A){if(this.url==B){if(!A||(this.requestInfo.method==A.method&&(A.method!="POST"||this.requestInfo.postData==A.postData))){return;
}}this.url=B;
this.setRequestInfo(A);
this.cancelLoadData();
this.recalculateDataSetDependencies();
this.dataWasLoaded=false;
};
Spry.Data.HTTPSourceDataSet.prototype.setDataFromDoc=function(A){this.pendingRequest=null;
this.loadDataIntoDataSet(A);
this.applyColumnTypes();
this.disableNotifications();
this.filterAndSortData();
this.enableNotifications();
this.notifyObservers("onPostLoad");
this.notifyObservers("onDataChanged");
};
Spry.Data.HTTPSourceDataSet.prototype.loadDataIntoDataSet=function(A){this.dataHash=new Object;
this.data=new Array;
this.dataWasLoaded=true;
};
Spry.Data.HTTPSourceDataSet.prototype.xhRequestProcessor=function(A){var B=A.responseText;
if(A.status==200||A.status==0){return B;
}return null;
};
Spry.Data.HTTPSourceDataSet.prototype.sessionExpiredChecker=function(A){if(A.xhRequest.responseText=="session expired"){return true;
}return false;
};
Spry.Data.HTTPSourceDataSet.prototype.setSessionExpiredChecker=function(A){this.sessionExpiredChecker=A;
};
Spry.Data.HTTPSourceDataSet.prototype.onRequestResponse=function(A,B){this.setDataFromDoc(A.rawData);
};
Spry.Data.HTTPSourceDataSet.prototype.onRequestError=function(A,B){this.notifyObservers("onLoadError",B);
};
Spry.Data.HTTPSourceDataSet.prototype.onRequestSessionExpired=function(A,B){this.notifyObservers("onSessionExpired",B);
};
Spry.Data.HTTPSourceDataSet.LoadManager={};
Spry.Data.HTTPSourceDataSet.LoadManager.cache=[];
Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest=function(A,B,C){Spry.Utils.Notifier.call(this);
this.reqInfo=A;
this.rawData=null;
this.timer=null;
this.state=Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.NOT_LOADED;
this.xhRequestProcessor=B;
this.sessionExpiredChecker=C;
};
Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.prototype=new Spry.Utils.Notifier();
Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.prototype.constructor=Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest;
Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.NOT_LOADED=1;
Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.LOAD_REQUESTED=2;
Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.LOAD_FAILED=3;
Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.LOAD_SUCCESSFUL=4;
Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.prototype.loadDataCallback=function(A){if(A.xhRequest.readyState!=4){return;
}var B=null;
if(this.xhRequestProcessor){B=this.xhRequestProcessor(A.xhRequest);
}if(this.sessionExpiredChecker){Spry.Utils.setOptions(A,{rawData:B},false);
if(this.sessionExpiredChecker(A)){this.state=Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.LOAD_FAILED;
this.notifyObservers("onRequestSessionExpired",A);
this.observers.length=0;
return;
}}if(!B){this.state=Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.LOAD_FAILED;
this.notifyObservers("onRequestError",A);
this.observers.length=0;
return;
}this.rawData=B;
this.state=Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.LOAD_SUCCESSFUL;
this.notifyObservers("onRequestResponse",A);
this.observers.length=0;
};
Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.prototype.loadData=function(){var A=this;
this.cancelLoadData();
this.rawData=null;
this.state=Spry.Data.HTTPSourceDataSet.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.HTTPSourceDataSet.LoadManager.CachedRequest.prototype.cancelLoadData=function(){if(this.state==Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.LOAD_REQUESTED){if(this.timer){this.timer.clearTimeout();
this.timer=null;
}this.rawData=null;
this.state=Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.NOT_LOADED;
}};
Spry.Data.HTTPSourceDataSet.LoadManager.getCacheKey=function(A){return A.method+"::"+A.url+"::"+A.postData+"::"+A.username;
};
Spry.Data.HTTPSourceDataSet.LoadManager.loadData=function(C,D,B){if(!C){return null;
}var A=null;
var E=null;
if(B){E=Spry.Data.HTTPSourceDataSet.LoadManager.getCacheKey(C);
A=Spry.Data.HTTPSourceDataSet.LoadManager.cache[E];
}if(A){if(A.state==Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.LOAD_REQUESTED){if(D){A.addObserver(D);
}return A;
}else{if(A.state==Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.LOAD_SUCCESSFUL){if(D){setTimeout(function(){D.setDataFromDoc(A.rawData);
},0);
}return A;
}}}if(!A){A=new Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest(C,(D?D.xhRequestProcessor:null),(D?D.sessionExpiredChecker:null));
if(B){Spry.Data.HTTPSourceDataSet.LoadManager.cache[E]=A;
A.addObserver({onRequestError:function(){Spry.Data.HTTPSourceDataSet.LoadManager.cache[E]=undefined;
}});
}}if(D){A.addObserver(D);
}A.loadData();
return A;
};
Spry.Data.HTTPSourceDataSet.LoadManager.cancelLoadData=function(A,B){if(A){if(B){A.removeObserver(B);
}else{A.cancelLoadData();
}}};
Spry.Data.XMLDataSet=function(B,A,D){this.xpath=A;
this.doc=null;
this.subPaths=[];
this.entityEncodeStrings=true;
Spry.Data.HTTPSourceDataSet.call(this,B,D);
var C=typeof this.subPaths;
if(C=="string"||(C=="object"&&this.subPaths.constructor!=Array)){this.subPaths=[this.subPaths];
}};
Spry.Data.XMLDataSet.prototype=new Spry.Data.HTTPSourceDataSet();
Spry.Data.XMLDataSet.prototype.constructor=Spry.Data.XMLDataSet;
Spry.Data.XMLDataSet.prototype.getDataRefStrings=function(){var A=[];
if(this.url){A.push(this.url);
}if(this.xpath){A.push(this.xpath);
}if(this.requestInfo&&this.requestInfo.postData){A.push(this.requestInfo.postData);
}return A;
};
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.notifyObservers("onPreLoad");
this.setDataFromDoc(this.doc);
}}};
Spry.Data.XMLDataSet.nodeContainsElementNode=function(A){if(A){A=A.firstChild;
while(A){if(A.nodeType==1){return true;
}A=A.nextSibling;
}}return false;
};
Spry.Data.XMLDataSet.getNodeText=function(D,C,B){var A="";
if(!D){return;
}try{var F=D.firstChild;
while(F){try{if(F.nodeType==3){A+=C?Spry.Utils.encodeEntities(F.data):F.data;
}else{if(F.nodeType==4){A+=B?Spry.Utils.encodeEntities(F.data):F.data;
}}}catch(E){Spry.Debug.reportError("Spry.Data.XMLDataSet.getNodeText() exception caught: "+E+"\n");
}F=F.nextSibling;
}}catch(E){Spry.Debug.reportError("Spry.Data.XMLDataSet.getNodeText() exception caught: "+E+"\n");
}return A;
};
Spry.Data.XMLDataSet.createObjectForNode=function(C,G,I){if(!C){return null;
}var D=new Object();
var E=0;
var H=null;
try{for(E=0;
E<C.attributes.length;
E++){H=C.attributes[E];
if(H&&H.nodeType==2){D["@"+H.name]=H.value;
}}}catch(F){Spry.Debug.reportError("Spry.Data.XMLDataSet.createObjectForNode() caught exception while accessing attributes: "+F+"\n");
}var B=C.firstChild;
if(B&&!B.nextSibling&&B.nodeType!=1){D[C.nodeName]=Spry.Data.XMLDataSet.getNodeText(C,G,I);
}while(B){if(B.nodeType==1){if(!Spry.Data.XMLDataSet.nodeContainsElementNode(B)){D[B.nodeName]=Spry.Data.XMLDataSet.getNodeText(B,G,I);
try{var A=B.nodeName+"/@";
for(E=0;
E<B.attributes.length;
E++){H=B.attributes[E];
if(H&&H.nodeType==2){D[A+H.name]=H.value;
}}}catch(F){Spry.Debug.reportError("Spry.Data.XMLDataSet.createObjectForNode() caught exception while accessing attributes: "+F+"\n");
}}}B=B.nextSibling;
}return D;
};
Spry.Data.XMLDataSet.getRecordSetFromXMLDoc=function(O,N,J,K){if(!O||!N){return null;
}var L=new Object();
L.xmlDoc=O;
L.xmlPath=N;
L.dataHash=new Object;
L.data=new Array;
L.getData=function(){return this.data;
};
var M=new ExprContext(O);
var B=xpathParse(N);
var G=B.evaluate(M);
var C=G.nodeSetValue();
var A=true;
if(C&&C.length>0){A=C[0].nodeType!=2;
}var E=0;
var F=true;
var I=false;
if(typeof K=="boolean"){F=I=K;
}for(var D=0;
D<C.length;
D++){var H=null;
if(J){H=new Object;
}else{if(A){H=Spry.Data.XMLDataSet.createObjectForNode(C[D],F,I);
}else{H=new Object;
H["@"+C[D].name]=C[D].value;
}}if(H){H.ds_RowID=E++;
H.ds_XMLNode=C[D];
L.dataHash[H.ds_RowID]=H;
L.data.push(H);
}}return L;
};
Spry.Data.XMLDataSet.PathNode=function(A){this.path=A;
this.subPaths=[];
this.xpath="";
};
Spry.Data.XMLDataSet.PathNode.prototype.addSubPath=function(B){var A=this.findSubPath(B);
if(!A){A=new Spry.Data.XMLDataSet.PathNode(B);
this.subPaths.push(A);
}return A;
};
Spry.Data.XMLDataSet.PathNode.prototype.findSubPath=function(D){var A=this.subPaths.length;
for(var C=0;
C<A;
C++){var B=this.subPaths[C];
if(D==B.path){return B;
}}return null;
};
Spry.Data.XMLDataSet.PathNode.prototype.consolidate=function(){var A=this.subPaths.length;
if(!this.xpath&&A==1){var B=this.subPaths[0];
this.path+=((B[0]!="/")?"/":"")+B.path;
this.xpath=B.xpath;
this.subPaths=B.subPaths;
this.consolidate();
return;
}for(var C=0;
C<A;
C++){this.subPaths[C].consolidate();
}};
Spry.Data.XMLDataSet.prototype.convertXPathsToPathTree=function(H){var E=H.length;
var J=new Spry.Data.XMLDataSet.PathNode("");
for(var G=0;
G<E;
G++){var I=H[G];
var D=I.replace(/\/\//g,"/__SPRYDS__");
D=D.replace(/^\//,"");
var A=D.split(/\//);
var B=A.length;
var C=J;
for(var F=0;
F<B;
F++){var K=A[F].replace(/__SPRYDS__/,"//");
C=C.addSubPath(K);
}C.xpath=I;
}J.consolidate();
return J;
};
Spry.Data.XMLDataSet.prototype.flattenSubPaths=function(O,J){if(!O||!J){return;
}var U=J.length;
if(U<1){return;
}var b=O.data;
var S={};
var K=[];
var A=[];
for(var X=0;
X<U;
X++){var L=J[X];
if(typeof L=="object"){L=L.path;
}if(!L){L="";
}K[X]=Spry.Data.Region.processDataRefString(null,L,this.dataSetsForDataRefStrings);
A[X]=K[X].replace(/\[.*\]/g,"");
}var M;
var I=b.length;
var P=[];
for(var X=0;
X<I;
X++){M=b[X];
var Z=[M];
for(var W=0;
W<U;
W++){var a=Spry.Data.XMLDataSet.getRecordSetFromXMLDoc(M.ds_XMLNode,K[W],(J[W].xpath?false:true),this.entityEncodeStrings);
if(a&&a.data&&a.data.length){if(typeof J[W]=="object"&&J[W].subPaths){var Y=J[W].subPaths;
spType=typeof Y;
if(spType=="string"){Y=[Y];
}else{if(spType=="object"&&spType.constructor==Object){Y=[Y];
}}this.flattenSubPaths(a,Y);
}var R=a.data;
var E=R.length;
var Q=A[W]+"/";
var D=Z.length;
var N=[];
for(var V=0;
V<D;
V++){var G=Z[V];
for(var T=0;
T<E;
T++){var C=new Object;
var B=R[T];
for(F in G){C[F]=G[F];
}for(var F in B){var H=Q+F;
if(Q==(F+"/")||Q.search(new RegExp("\\/"+F+"\\/$"))!=-1){H=A[W];
}C[H]=B[F];
}N.push(C);
}}Z=N;
}}P=P.concat(Z);
}b=P;
I=b.length;
for(X=0;
X<I;
X++){M=b[X];
M.ds_RowID=X;
S[M.ds_RowID]=M;
}O.data=b;
O.dataHash=S;
};
Spry.Data.XMLDataSet.prototype.loadDataIntoDataSet=function(E){var B=null;
var A=Spry.Data.Region.processDataRefString(null,this.xpath,this.dataSetsForDataRefStrings);
var F=this.subPaths;
var G=false;
if(this.subPaths&&this.subPaths.length>0){var J=[];
var I=F.length;
for(var D=0;
D<I;
D++){var H=Spry.Data.Region.processDataRefString(null,F[D],this.dataSetsForDataRefStrings);
if(H.charAt(0)!="/"){H=A+"/"+H;
}J.push(H);
}J.unshift(A);
var C=this.convertXPathsToPathTree(J);
A=C.path;
F=C.subPaths;
G=C.xpath?false:true;
}B=Spry.Data.XMLDataSet.getRecordSetFromXMLDoc(E,A,G,this.entityEncodeStrings);
if(!B){Spry.Debug.reportError("Spry.Data.XMLDataSet.loadDataIntoDataSet() failed to create dataSet '"+this.name+"'for '"+this.xpath+"' - "+this.url+"\n");
return;
}this.flattenSubPaths(B,F);
this.doc=B.xmlDoc;
this.data=B.data;
this.dataHash=B.dataHash;
this.dataWasLoaded=(this.doc!=null);
};
Spry.Data.XMLDataSet.prototype.xhRequestProcessor=function(B){var C=B.responseXML;
var A=false;
if(B.status!=200){if(B.status==0){if(B.responseText&&(!C||!C.firstChild)){A=true;
}}}else{if(!C){A=true;
}}if(A){C=Spry.Utils.stringToXMLDoc(B.responseText);
}if(!C||!C.firstChild||C.firstChild.nodeName=="parsererror"){return null;
}return C;
};
Spry.Data.XMLDataSet.prototype.sessionExpiredChecker=function(A){if(A.xhRequest.responseText=="session expired"){return true;
}else{if(A.rawData){var B=A.rawData.documentElement.firstChild;
if(B&&B.nodeValue=="session expired"){return true;
}}}return false;
};
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]){var E={state:this.currentState};
if(!C){Spry.Data.Region.notifyObservers("onPreUpdate",this,E);
}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,E);
}}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.onSessionExpired=function(A){if(this.currentState!="expired"){this.setState("expired");
}Spry.Data.Region.notifyObservers("onExpired",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(C,F,A,E){if(F){var D=Spry.Data.getDataSetByName(F);
if(D){rowIDAttr=C.attributes.getNamedItem(A);
if(rowIDAttr){var B=rowIDAttr.value;
if(B){Spry.Utils.addEventListener(C,"click",function(G){D[E](B);
},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(A,D,F){if(!F){return;
}var E=A.getDataSets()[0];
var C="toggle";
var H=F.split(/\s/);
if(H.length>1){var B=Spry.Data.getDataSetByName(H[0]);
if(B){E=B;
H.shift();
}if(H.length>1){var G=H[H.length-1];
if(G=="ascending"||G=="descending"||G=="toggle"){C=G;
H.pop();
}}}if(E&&H.length>0){Spry.Utils.addEventListener(D,"click",function(I){E.sort(H,C);
},false);
}D.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(P){if(!P){return null;
}var H=new Spry.Data.Region.Token(Spry.Data.Region.Token.LIST_TOKEN,null,null,null);
var F=new Array;
var A=Spry.Data.Region.processContentPI(P);
F.push(H);
var T=/((<!--\s*){0,1}<\/{0,1}spry:[^>]+>(\s*-->){0,1})|((\{|%7[bB])[^\}\s%]+(\}|%7[dD]))/mg;
var B=0;
while(A.length){var K=T.exec(A);
var G=null;
if(!K||!K[0]){var L=A.substr(B,A.length-B);
G=new Spry.Data.Region.Token(Spry.Data.Region.Token.STRING_TOKEN,null,L,L);
F[F.length-1].addChild(G);
break;
}if(K.index!=B){var L=A.substr(B,K.index-B);
G=new Spry.Data.Region.Token(Spry.Data.Region.Token.STRING_TOKEN,null,L,L);
F[F.length-1].addChild(G);
}if(K[0].search(/^({|%7[bB])/)!=-1){var J=K[0];
var E=K[0];
J=J.replace(/^({|%7[bB])/,"");
J=J.replace(/(}|%7[dD])$/,"");
var S=null;
var R=J.split(/::/);
if(R.length>1){S=R[0];
J=R[1];
}E=E.replace(/^%7[bB]/,"{");
E=E.replace(/%7[dD]$/,"}");
G=new Spry.Data.Region.Token(Spry.Data.Region.Token.VALUE_TOKEN,S,J,new String(E));
F[F.length-1].addChild(G);
}else{if(K[0].charAt(0)=="<"){var O=K[0].replace(/^(<!--\s*){0,1}<\/?/,"");
O=O.replace(/>(\s*-->){0,1}|\s.*$/,"");
if(K[0].search(/<\//)!=-1){if(F[F.length-1].tokenType!=Spry.Data.Region.Token.PROCESSING_INSTRUCTION_TOKEN){Spry.Debug.reportError("Invalid processing instruction close tag: "+O+" -- "+K[0]+"\n");
return null;
}F.pop();
}else{var I=Spry.Data.Region.PI.instructions[O];
if(I){var N=null;
var C="";
if(K[0].search(/^.*\bselect=\"/)!=-1){C=K[0].replace(/^.*\bselect=\"/,"");
C=C.replace(/".*$/,"");
if(C){N=Spry.Data.getDataSetByName(C);
if(!N){Spry.Debug.reportError("Failed to retrieve data set ("+C+") for "+O+"\n");
C="";
}}}var D=null;
if(K[0].search(/^.*\btest=\"/)!=-1){D=K[0].replace(/^.*\btest=\"/,"");
D=D.replace(/".*$/,"");
D=Spry.Utils.decodeEntities(D);
}var Q=null;
if(K[0].search(/^.*\bname=\"/)!=-1){Q=K[0].replace(/^.*\bname=\"/,"");
Q=Q.replace(/".*$/,"");
Q=Spry.Utils.decodeEntities(Q);
}var M=new Spry.Data.Region.Token.PIData(O,C,D,Q);
G=new Spry.Data.Region.Token(Spry.Data.Region.Token.PROCESSING_INSTRUCTION_TOKEN,N,M,new String(K[0]));
F[F.length-1].addChild(G);
F.push(G);
}else{Spry.Debug.reportError("Unsupported region processing instruction: "+K[0]+"\n");
return null;
}}}else{Spry.Debug.reportError("Invalid region token: "+K[0]+"\n");
return null;
}}B=T.lastIndex;
}return H;
};
Spry.Data.Region.prototype.callScriptFunction=function(D,B){var A=undefined;
D=D.replace(/^\s*\{?\s*function::\s*|\s*\}?\s*$/g,"");
var C=Spry.Utils.getObjectByName(D);
if(C){A=C(this.name,function(){return B.getValueFromDataSet.apply(B,arguments);
});
}return A;
};
Spry.Data.Region.prototype.evaluateExpression=function(exprStr,processContext){var result=undefined;
try{if(exprStr.search(/^\s*function::/)!=-1){result=this.callScriptFunction(exprStr,processContext);
}else{result=Spry.Utils.eval(Spry.Data.Region.processDataRefString(processContext,exprStr,null,true));
}}catch(e){Spry.Debug.trace("Caught exception in Spry.Data.Region.prototype.evaluateExpression() while evaluating: "+Spry.Utils.encodeEntities(exprStr)+"\n    Exception:"+e+"\n");
}return result;
};
Spry.Data.Region.prototype.processTokenChildren=function(F,E,B){var D=E.children;
var A=D.length;
for(var C=0;
C<A;
C++){this.processTokens(F,D[C],B);
}};
Spry.Data.Region.prototype.processTokens=function(J,D,N){var G=0;
switch(D.tokenType){case Spry.Data.Region.Token.LIST_TOKEN:this.processTokenChildren(J,D,N);
break;
case Spry.Data.Region.Token.STRING_TOKEN:J.push(D.data);
break;
case Spry.Data.Region.Token.PROCESSING_INSTRUCTION_TOKEN:if(D.data.name=="spry:repeat"){var H=null;
if(D.dataSet){H=D.dataSet;
}else{H=this.dataSets[0];
}if(H){var F=N.getDataSetContext(H);
if(!F){Spry.Debug.reportError("processTokens() failed to get a data set context!\n");
break;
}F.pushState();
var L=F.getData();
var K=L.length;
for(G=0;
G<K;
G++){F.setRowIndex(G);
var M=true;
if(D.data.jsExpr){M=this.evaluateExpression(D.data.jsExpr,N);
}if(M){this.processTokenChildren(J,D,N);
}}F.popState();
}}else{if(D.data.name=="spry:if"){var M=true;
if(D.data.jsExpr){M=this.evaluateExpression(D.data.jsExpr,N);
}if(M){this.processTokenChildren(J,D,N);
}}else{if(D.data.name=="spry:choose"){var A=null;
var I=null;
var M=false;
var E=0;
for(E=0;
E<D.children.length;
E++){var B=D.children[E];
if(B.tokenType==Spry.Data.Region.Token.PROCESSING_INSTRUCTION_TOKEN){if(B.data.name=="spry:when"){if(B.data.jsExpr){M=this.evaluateExpression(B.data.jsExpr,N);
if(M){I=B;
break;
}}}else{if(B.data.name=="spry:default"){A=B;
}}}}if(!I&&A){I=A;
}if(I){this.processTokenChildren(J,I,N);
}}else{if(D.data.name=="spry:state"){var M=true;
if(!D.data.regionState||D.data.regionState==this.currentState){this.processTokenChildren(J,D,N);
}}else{Spry.Debug.reportError("processTokens(): Unknown processing instruction: "+D.data.name+"\n");
return"";
}}}}break;
case Spry.Data.Region.Token.VALUE_TOKEN:var H=D.dataSet;
var C=undefined;
if(H&&H=="function"){C=this.callScriptFunction(D.data,N);
}else{if(!H&&this.dataSets&&this.dataSets.length>0&&this.dataSets[0]){H=this.dataSets[0];
}if(!H){Spry.Debug.reportError("processTokens(): Value reference has no data set specified: "+D.regionStr+"\n");
return"";
}C=N.getValueFromDataSet(H,D.data);
}if(typeof C!="undefined"){J.push(C+"");
}break;
default:Spry.Debug.reportError("processTokens(): Invalid token type: "+D.regionStr+"\n");
break;
}};
Spry.Data.Region.prototype.transform=function(){if(this.data&&!this.tokens){this.tokens=this.tokenizeData(this.data);
}if(!this.tokens){return"";
}processContext=new Spry.Data.Region.ProcessingContext(this);
if(!processContext){return"";
}var A=[""];
this.processTokens(A,this.tokens,processContext);
return A.join("");
};
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,G,A){if(!K){return"";
}if(!J&&!G){return K;
}var H="";
var M=new RegExp("\\{([^\\}:]+::)?[^\\}]+\\}","g");
var I=0;
while(I<K.length){var F=M.exec(K);
if(!F||!F[0]){H+=K.substr(I,K.length-I);
return H;
}if(F.index!=I){H+=K.substr(I,F.index-I);
}var B="";
if(F[0].search(/^\{[^}:]+::/)!=-1){B=F[0].replace(/^\{|::.*/g,"");
}var L=F[0].replace(/^\{|.*::|\}/g,"");
var N=null;
var E="";
if(J){E=J.getValueFromDataSet(B,L);
}else{var D=B?G[B]:G[0];
if(D){E=D.getValue(L);
}}if(typeof E!="undefined"){E+="";
H+=A?Spry.Utils.escapeQuotesAndLineBreaks(E):E;
}if(I==M.lastIndex){var C=F.index+F[0].length;
if(C<K.length){H+=K.substr(C);
}break;
}I=M.lastIndex;
}return H;
};
Spry.Data.Region.strToDataSetsArray=function(H,E){var G=new Array;
var B={};
if(!H){return G;
}H=H.replace(/\s+/g," ");
H=H.replace(/^\s|\s$/g,"");
var A=H.split(/ /);
for(var D=0;
D<A.length;
D++){if(A[D]&&!Spry.Data.Region.PI.instructions[A[D]]){try{var C=Spry.Data.getDataSetByName(A[D]);
if(!B[A[D]]){if(E){G.push(A[D]);
}else{G.push(C);
}B[A[D]]=true;
}}catch(F){}}}return G;
};
Spry.Data.Region.DSContext=function(C,F){var D=C;
var A=F;
var G=[{rowIndex:-1}];
var B=null;
var E=[];
var H=function(){return G[G.length-1].rowIndex;
};
this.resetAll=function(){G=[{rowIndex:D.getCurrentRow()}];
};
this.getDataSet=function(){return D;
};
this.getNumRows=function(I){var J=this.getCurrentState().data;
return J?J.length:D.getRowCount(I);
};
this.getData=function(){var I=this.getCurrentState().data;
return I?I:D.getData();
};
this.setData=function(I){this.getCurrentState().data=I;
};
this.getValue=function(M,J){var I="";
var L=this.getCurrentState();
var K=L.nestedDS?L.nestedDS:this.getDataSet();
if(K){I=K.getValue(M,J);
}return I;
};
this.getCurrentRow=function(){if(G.length<2||H()<0){return D.getCurrentRow();
}var J=this.getData();
var I=H();
if(I<0||I>J.length){Spry.Debug.reportError("Invalid index used in Spry.Data.Region.DSContext.getCurrentRow()!\n");
return null;
}return J[I];
};
this.getRowIndex=function(){var I=H();
if(I>=0){return I;
}return D.getRowNumber(D.getCurrentRow());
};
this.setRowIndex=function(L){this.getCurrentState().rowIndex=L;
var J=this.getData();
var K=E.length;
for(var I=0;
I<K;
I++){E[I].syncDataWithParentRow(this,L,J);
}};
this.syncDataWithParentRow=function(L,O,I){var N=I[O];
if(N){nestedDS=D.getNestedDataSetForParentRow(N);
if(nestedDS){var K=this.getCurrentState();
K.nestedDS=nestedDS;
K.data=nestedDS.getData();
K.rowIndex=nestedDS.getCurrentRowNumber();
K.rowIndex=K.rowIndex<0?0:K.rowIndex;
var M=E.length;
for(var J=0;
J<M;
J++){E[J].syncDataWithParentRow(this,K.rowIndex,K.data);
}}}};
this.pushState=function(){var L=this.getCurrentState();
var K=new Object;
K.rowIndex=L.rowIndex;
K.data=L.data;
K.nestedDS=L.nestedDS;
G.push(K);
var J=E.length;
for(var I=0;
I<J;
I++){E[I].pushState();
}};
this.popState=function(){if(G.length<2){Spry.Debug.reportError("Stack underflow in Spry.Data.Region.DSContext.popState()!\n");
return;
}var J=E.length;
for(var I=0;
I<J;
I++){E[I].popState();
}G.pop();
};
this.getCurrentState=function(){return G[G.length-1];
};
this.addChild=function(K){var J=E.length;
for(var I=0;
I<J;
I++){if(E[I]==K){return;
}}E.push(K);
};
};
Spry.Data.Region.ProcessingContext=function(F){this.region=F;
this.dataSetContexts=[];
if(F&&F.dataSets){var G=F.dataSets.slice(0);
var E=G.length;
for(var D=0;
D<E;
D++){var B=F.dataSets[D];
while(B&&B.getParentDataSet){var J=false;
B=B.getParentDataSet();
if(B&&this.indexOf(G,B)==-1){G.push(B);
}}}for(D=0;
D<G.length;
D++){this.dataSetContexts.push(new Spry.Data.Region.DSContext(G[D],this));
}var K=this.dataSetContexts;
var H=K.length;
for(D=0;
D<H;
D++){var C=K[D];
var B=C.getDataSet();
if(B.getParentDataSet){var I=B.getParentDataSet();
if(I){var A=this.getDataSetContext(I);
if(A){A.addChild(C);
}}}}}};
Spry.Data.Region.ProcessingContext.prototype.indexOf=function(A,D){if(A){var B=A.length;
for(var C=0;
C<B;
C++){if(A[C]==D){return C;
}}}return -1;
};
Spry.Data.Region.ProcessingContext.prototype.getDataSetContext=function(B){if(!B){if(this.dataSetContexts.length>0){return this.dataSetContexts[0];
}return null;
}if(typeof B=="string"){B=Spry.Data.getDataSetByName(B);
if(!B){return null;
}}for(var A=0;
A<this.dataSetContexts.length;
A++){var C=this.dataSetContexts[A];
if(C.getDataSet()==B){return C;
}}return null;
};
Spry.Data.Region.ProcessingContext.prototype.getValueFromDataSet=function(){var E="";
var D="";
if(arguments.length>1){E=arguments[0];
D=arguments[1];
}else{var C=arguments[0].replace(/\s*{\s*|\s*}\s*/g,"");
if(C.search("::")!=-1){E=C.replace(/::.*/,"");
D=C.replace(/.*::/,"");
}else{D=C;
}}var B="";
var A=this.getDataSetContext(E);
if(A){B=A.getValue(D,A.getCurrentRow());
}else{Spry.Debug.reportError("getValueFromDataSet: Failed to get "+E+" context for the "+this.region.regionNode.id+" region.\n");
}return B;
};
Spry.Data.Region.ProcessingContext.prototype.$v=Spry.Data.Region.ProcessingContext.prototype.getValueFromDataSet;
Spry.Data.Region.ProcessingContext.prototype.getCurrentRowForDataSet=function(A){var B=this.getDataSetContext(A);
if(B){return B.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(){if(Spry.Data.initRegionsOnLoad){Spry.Data.initRegions();
}},0);
});
