
var Spry;if(!Spry)Spry={};if(!Spry.XML)Spry.XML={};if(!Spry.XML.Schema)Spry.XML.Schema={};Spry.XML.Schema.Node=function(nodeName)
{this.nodeName=nodeName;this.isAttribute=false;this.appearsMoreThanOnce=false;this.children=new Array;};Spry.XML.Schema.Node.prototype.toString=function(indentStr)
{if(!indentStr)
indentStr="";var str=indentStr+this.nodeName;if(this.appearsMoreThanOnce)
str+=" (+)";str+="\n";var newIndentStr=indentStr+"    ";for(var $childName in this.children)
{var child=this.children[$childName];if(child.isAttribute)
str+=newIndentStr+child.nodeName+"\n";else
str+=child.toString(newIndentStr);}
return str;};Spry.XML.Schema.mapElementIntoSchemaNode=function(ele,schemaNode)
{if(!ele||!schemaNode)
return;var i=0;for(i=0;i<ele.attributes.length;i++)
{var attr=ele.attributes.item(i);if(attr&&attr.nodeType==2)
{var attrName="@"+attr.name;if(!schemaNode.children[attrName])
{var attrObj=new Spry.XML.Schema.Node(attrName);attrObj.isAttribute=true;schemaNode.children[attrName]=attrObj;}}}
var child=ele.firstChild;var namesSeenSoFar=new Array;while(child)
{if(child.nodeType==1)
{var childSchemaNode=schemaNode.children[child.nodeName];if(!childSchemaNode)
{childSchemaNode=new Spry.XML.Schema.Node(child.nodeName);if(childSchemaNode)
schemaNode.children[child.nodeName]=childSchemaNode;}
if(childSchemaNode)
{if(namesSeenSoFar[childSchemaNode.nodeName])
childSchemaNode.appearsMoreThanOnce=true;else
namesSeenSoFar[childSchemaNode.nodeName]=true;}
Spry.XML.Schema.mapElementIntoSchemaNode(child,childSchemaNode);}
child=child.nextSibling;}};Spry.XML.getSchemaForElement=function(ele)
{if(!ele)
return null;schemaNode=new Spry.XML.Schema.Node(ele.nodeName);Spry.XML.Schema.mapElementIntoSchemaNode(ele,schemaNode);return schemaNode;};Spry.XML.getSchema=function(xmlDoc)
{if(!xmlDoc)
return null;var node=xmlDoc.firstChild;while(node)
{if(node.nodeType==1)
break;node=node.nextSibling;}
return Spry.XML.getSchemaForElement(node);};Spry.XML.nodeHasValue=function(node)
{if(node)
{var child=node.firstChild;if(child&&child.nextSibling==null&&(child.nodeType==3||child.nodeType==4))
return true;}
return false;};Spry.XML.XObject=function()
{};Spry.XML.XObject.prototype._value=function()
{var val=this["#text"];if(val!=undefined)
return val;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(prop)
{var val=this[prop];if(val==undefined)
return false;return(typeof val=="object"&&val.constructor==Array);};Spry.XML.XObject.prototype._getPropertyAsArray=function(prop)
{var arr=[];var val=this[prop];if(val!=undefined)
{if(typeof val=="object"&&val.constructor==Array)
return val;arr.push(val);}
return arr;};Spry.XML.XObject.prototype._getProperties=function()
{var props=[];for(var p in this)
{if(!/^_/.test(p))
props.push(p);}
return props;};Spry.XML.nodeToObject=function(node)
{if(!node)
return null;var obj=new Spry.XML.XObject();for(var i=0;i<node.attributes.length;i++)
{var attr=node.attributes[i];var attrName="@"+attr.name;obj[attrName]=attr.value;}
var child;if(Spry.XML.nodeHasValue(node))
{try
{child=node.firstChild;if(child.nodeType==3)
obj[child.nodeName]=Spry.Utils.encodeEntities(child.data);else if(child.nodeType==4)
obj[child.nodeName]=child.data;}catch(e){Spry.Debug.reportError("Spry.XML.nodeToObject() exception caught: "+e+"\n");}}
else
{child=node.firstChild;while(child)
{if(child.nodeType==1)
{var isArray=false;var tagName=child.nodeName;if(obj[tagName])
{if(obj[tagName].constructor!=Array)
{var curValue=obj[tagName];obj[tagName]=new Array;obj[tagName].push(curValue);}
isArray=true;}
var childObj=Spry.XML.nodeToObject(child);if(isArray)
obj[tagName].push(childObj);else
obj[tagName]=childObj;}
child=child.nextSibling;}}
return obj;};Spry.XML.documentToObject=function(xmlDoc)
{var obj=null;if(xmlDoc&&xmlDoc.firstChild)
{var child=xmlDoc.firstChild;while(child)
{if(child.nodeType==1)
{obj=new Spry.XML.XObject();obj[child.nodeName]=Spry.XML.nodeToObject(child);break;}
child=child.nextSibling;}}
return obj;};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 req=null;try
{if(window.XMLHttpRequest)
req=new XMLHttpRequest();else if(window.ActiveXObject)
{while(!req&&Spry.Utils.msProgIDs.length)
{try{req=new ActiveXObject(Spry.Utils.msProgIDs[0]);}catch(e){req=null;}
if(!req)
Spry.Utils.msProgIDs.splice(0,1);}}}
catch(e){req=null;}
if(!req)
Spry.Debug.reportError("Failed to create an XMLHttpRequest object!");return req;};Spry.Utils.loadURL=function(method,url,async,callback,opts)
{var req=new Spry.Utils.loadURL.Request();req.method=method;req.url=url;req.async=async;req.successCallback=callback;Spry.Utils.setOptions(req,opts);try
{req.xhRequest=Spry.Utils.createXMLHttpRequest();if(!req.xhRequest)
return null;if(req.async)
req.xhRequest.onreadystatechange=function(){Spry.Utils.loadURL.callback(req);};req.xhRequest.open(req.method,req.url,req.async,req.username,req.password);if(req.headers)
{for(var name in req.headers)
req.xhRequest.setRequestHeader(name,req.headers[name]);}
req.xhRequest.send(req.postData);if(!req.async)
Spry.Utils.loadURL.callback(req);}
catch(e){req=null;Spry.Debug.reportError("Exception caught while loading "+url+": "+e);}
return req;};Spry.Utils.loadURL.callback=function(req)
{if(!req||req.xhRequest.readyState!=4)
return;if(req.successCallback&&(req.xhRequest.status==200||req.xhRequest.status==0))
req.successCallback(req);else if(req.errorCallback)
req.errorCallback(req);};Spry.Utils.loadURL.Request=function()
{var props=Spry.Utils.loadURL.Request.props;var numProps=props.length;for(var i=0;i<numProps;i++)
this[props[i]]=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(opts,undefineRequestProps)
{if(!opts)
return;var props=Spry.Utils.loadURL.Request.props;var numProps=props.length;for(var i=0;i<numProps;i++)
{var prop=props[i];if(opts[prop]!=undefined)
{this[prop]=opts[prop];if(undefineRequestProps)
opts[prop]=undefined;}}};Spry.Utils.loadURL.Request.prototype.clone=function()
{var props=Spry.Utils.loadURL.Request.props;var numProps=props.length;var req=new Spry.Utils.loadURL.Request;for(var i=0;i<numProps;i++)
req[props[i]]=this[props[i]];if(this.headers)
{req.headers={};Spry.Utils.setOptions(req.headers,this.headers);}
return req;};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(ele,url,finishFunc,opts)
{var method=(opts&&opts.method)?opts.method:"GET";Spry.Utils.loadURL(method,url,false,function(req)
{Spry.Utils.setInnerHTML(ele,req.xhRequest.responseText);if(finishFunc)
finishFunc(ele,url);},opts);};Spry.Utils.addEventListener=function(element,eventType,handler,capture)
{try
{element=$(element);if(element.addEventListener)
element.addEventListener(eventType,handler,capture);else if(element.attachEvent)
element.attachEvent("on"+eventType,handler);}
catch(e){}};Spry.Utils.removeEventListener=function(element,eventType,handler,capture)
{try
{element=$(element);if(element.removeEventListener)
element.removeEventListener(eventType,handler,capture);else if(element.detachEvent)
element.detachEvent("on"+eventType,handler);}
catch(e){}};Spry.Utils.addLoadListener=function(handler)
{if(typeof window.addEventListener!='undefined')
window.addEventListener('load',handler,false);else if(typeof document.addEventListener!='undefined')
document.addEventListener('load',handler,false);else if(typeof window.attachEvent!='undefined')
window.attachEvent('onload',handler);};Spry.Utils.eval=function(str)
{return eval(str);};Spry.Utils.escapeQuotesAndLineBreaks=function(str)
{if(str)
{str=str.replace(/\\/g,"\\\\");str=str.replace(/["']/g,"\\$&");str=str.replace(/\n/g,"\\n");str=str.replace(/\r/g,"\\r");}
return str;};Spry.Utils.encodeEntities=function(str)
{if(str&&str.search(/[&<>"]/)!=-1)
{str=str.replace(/&/g,"&amp;");str=str.replace(/</g,"&lt;");str=str.replace(/>/g,"&gt;");str=str.replace(/"/g,"&quot;");}
return str};Spry.Utils.decodeEntities=function(str)
{var d=Spry.Utils.decodeEntities.div;if(!d)
{d=document.createElement('div');Spry.Utils.decodeEntities.div=d;if(!d)return str;}
d.innerHTML=str;if(d.childNodes.length==1&&d.firstChild.nodeType==3&&d.firstChild.nextSibling==null)
str=d.firstChild.data;else
{str=str.replace(/&lt;/,"<");str=str.replace(/&gt;/,">");str=str.replace(/&quot;/,"\"");str=str.replace(/&amp;/,"&");}
return str;};Spry.Utils.fixupIETagAttributes=function(inStr)
{var outStr="";var tagStart=inStr.match(/^<[^\s>]+\s*/)[0];var tagEnd=inStr.match(/\s*\/?>$/)[0];var tagAttrs=inStr.replace(/^<[^\s>]+\s*|\s*\/?>/g,"");outStr+=tagStart;if(tagAttrs)
{var startIndex=0;var endIndex=0;while(startIndex<tagAttrs.length)
{while(tagAttrs.charAt(endIndex)!='='&&endIndex<tagAttrs.length)
++endIndex;if(endIndex>=tagAttrs.length)
{outStr+=tagAttrs.substring(startIndex,endIndex);break;}
++endIndex;outStr+=tagAttrs.substring(startIndex,endIndex);startIndex=endIndex;if(tagAttrs.charAt(endIndex)=='"'||tagAttrs.charAt(endIndex)=="'")
{var savedIndex=endIndex++;while(endIndex<tagAttrs.length)
{if(tagAttrs.charAt(endIndex)==tagAttrs.charAt(savedIndex))
{endIndex++;break;}
else if(tagAttrs.charAt(endIndex)=="\\")
endIndex++;endIndex++;}
outStr+=tagAttrs.substring(startIndex,endIndex);startIndex=endIndex;}
else
{outStr+="\"";var sIndex=tagAttrs.slice(endIndex).search(/\s/);endIndex=(sIndex!=-1)?(endIndex+sIndex):tagAttrs.length;outStr+=tagAttrs.slice(startIndex,endIndex);outStr+="\"";startIndex=endIndex;}}}
outStr+=tagEnd;return outStr;}
Spry.Utils.fixUpIEInnerHTML=function(inStr)
{var outStr="";var regexp=new RegExp("<\\!--|<\\!\\[CDATA\\[|<\\w+[^<>]*>|-->|\\]\\](>|\&gt;)","g");var searchStartIndex=0;var skipFixUp=0;while(inStr.length)
{var results=regexp.exec(inStr);if(!results||!results[0])
{outStr+=inStr.substr(searchStartIndex,inStr.length-searchStartIndex);break;}
if(results.index!=searchStartIndex)
{outStr+=inStr.substr(searchStartIndex,results.index-searchStartIndex);}
if(results[0]=="<!--"||results[0]=="<![CDATA[")
{++skipFixUp;outStr+=results[0];}
else if(results[0]=="-->"||results[0]=="]]>"||(skipFixUp&&results[0]=="]]&gt;"))
{--skipFixUp;outStr+=results[0];}
else if(!skipFixUp&&results[0].charAt(0)=='<')
outStr+=Spry.Utils.fixupIETagAttributes(results[0]);else
outStr+=results[0];searchStartIndex=regexp.lastIndex;}
return outStr;};Spry.Utils.stringToXMLDoc=function(str)
{var xmlDoc=null;try
{var xmlDOMObj=new ActiveXObject("Microsoft.XMLDOM");xmlDOMObj.async=false;xmlDOMObj.loadXML(str);xmlDoc=xmlDOMObj;}
catch(e)
{try
{var domParser=new DOMParser;xmlDoc=domParser.parseFromString(str,'text/xml');}
catch(e)
{Spry.Debug.reportError("Caught exception in Spry.Utils.stringToXMLDoc(): "+e+"\n");xmlDoc=null;}}
return xmlDoc;};Spry.Utils.serializeObject=function(obj)
{var str="";var firstItem=true;if(obj==null||obj==undefined)
return str+obj;var objType=typeof obj;if(objType=="number"||objType=="boolean")
str+=obj;else if(objType=="string")
str+="\""+Spry.Utils.escapeQuotesAndLineBreaks(obj)+"\"";else if(obj.constructor==Array)
{str+="[";for(var i=0;i<obj.length;i++)
{if(!firstItem)
str+=", ";str+=Spry.Utils.serializeObject(obj[i]);firstItem=false;}
str+="]";}
else if(objType=="object")
{str+="{";for(var p in obj)
{if(!firstItem)
str+=", ";str+="\""+p+"\": "+Spry.Utils.serializeObject(obj[p]);firstItem=false;}
str+="}";}
return str;};Spry.Utils.getNodesByFunc=function(root,func)
{var nodeStack=new Array;var resultArr=new Array;var node=root;while(node)
{if(func(node))
resultArr.push(node);if(node.hasChildNodes())
{nodeStack.push(node);node=node.firstChild;}
else
{if(node==root)
node=null;else
try{node=node.nextSibling;}catch(e){node=null;};}
while(!node&&nodeStack.length>0)
{node=nodeStack.pop();if(node==root)
node=null;else
try{node=node.nextSibling;}catch(e){node=null;}}}
if(nodeStack&&nodeStack.length>0)
Spry.Debug.trace("-- WARNING: Spry.Utils.getNodesByFunc() failed to traverse all nodes!\n");return resultArr;};Spry.Utils.addClassName=function(ele,className)
{ele=$(ele);if(!ele||!className||(ele.className&&ele.className.search(new RegExp("\\b"+className+"\\b"))!=-1))
return;ele.className+=(ele.className?" ":"")+className;};Spry.Utils.removeClassName=function(ele,className)
{ele=$(ele);if(!ele||!className||(ele.className&&ele.className.search(new RegExp("\\b"+className+"\\b"))==-1))
return;ele.className=ele.className.replace(new RegExp("\\s*\\b"+className+"\\b","g"),"");};Spry.Utils.getFirstChildWithNodeName=function(node,nodeName)
{var child=node.firstChild;while(child)
{if(child.nodeName==nodeName)
return child;child=child.nextSibling;}
return null;};Spry.Utils.nodeContainsElementNode=function(node)
{if(node)
{node=node.firstChild;while(node)
{if(node.nodeType==1)
return true;node=node.nextSibling;}}
return false;};Spry.Utils.getNodeText=function(node)
{var txt="";if(!node)
return;try
{var child=node.firstChild;while(child)
{try
{if(child.nodeType==3)
txt+=Spry.Utils.encodeEntities(child.data);else if(child.nodeType==4)
txt+=child.data;}catch(e){Spry.Debug.reportError("Spry.Utils.getNodeText() exception caught: "+e+"\n");}
child=child.nextSibling;}}
catch(e){Spry.Debug.reportError("Spry.Utils.getNodeText() exception caught: "+e+"\n");}
return txt;};Spry.Utils.CreateObjectForNode=function(node)
{if(!node)
return null;var obj=null;var i=0;var attr=null;try
{for(i=0;i<node.attributes.length;i++)
{attr=node.attributes[i];if(attr&&attr.nodeType==2)
{if(!obj)
{obj=new Object();if(!obj)
{Spry.Debug.reportError("Spry.Utils.CreateObjectForNode(): Object creation failed!");return null;}}
obj["@"+attr.name]=attr.value;}}}
catch(e)
{Spry.Debug.reportError("Spry.Utils.CreateObjectForNode() caught exception while accessing attributes: "+e+"\n");}
var child=node.firstChild;if(child&&!child.nextSibling&&child.nodeType!=1)
{if(!obj)
{obj=new Object();if(!obj)
{Spry.Debug.reportError("Spry.Utils.CreateObjectForNode(): Object creation failed!");return null;}}
obj[node.nodeName]=Spry.Utils.getNodeText(node);}
while(child)
{if(child.nodeType==1)
{if(!Spry.Utils.nodeContainsElementNode(child))
{var txt=Spry.Utils.getNodeText(child);if(!obj)
{obj=new Object();if(!obj)
{Spry.Debug.reportError("Spry.Utils.CreateObjectForNode(): Object creation failed!");return null;}}
obj[child.nodeName]=txt;try
{var namePrefix=child.nodeName+"/@";for(i=0;i<child.attributes.length;i++)
{attr=child.attributes[i];if(attr&&attr.nodeType==2)
obj[namePrefix+attr.name]=attr.value;}}
catch(e)
{Spry.Debug.reportError("Spry.Utils.CreateObjectForNode() caught exception while accessing attributes: "+e+"\n");}}}
child=child.nextSibling;}
return obj;};Spry.Utils.getRecordSetFromXMLDoc=function(xmlDoc,path)
{if(!xmlDoc||!path)
return null;var recordSet=new Object();recordSet.xmlDoc=xmlDoc;recordSet.xmlPath=path;recordSet.dataHash=new Object;recordSet.data=new Array;recordSet.getData=function(){return this.data;};var ctx=new ExprContext(xmlDoc);var pathExpr=xpathParse(path);var e=pathExpr.evaluate(ctx);var nodeArray=e.nodeSetValue();var isDOMNodeArray=true;if(nodeArray&&nodeArray.length>0)
isDOMNodeArray=nodeArray[0].nodeType!=2;var nextID=0;for(var i=0;i<nodeArray.length;i++)
{var rowObj=null;if(isDOMNodeArray)
rowObj=Spry.Utils.CreateObjectForNode(nodeArray[i]);else
{rowObj=new Object;rowObj["@"+nodeArray[i].name]=nodeArray[i].value;}
if(rowObj)
{rowObj['ds_RowID']=nextID++;recordSet.dataHash[rowObj['ds_RowID']]=rowObj;recordSet.data.push(rowObj);}}
return recordSet;};Spry.Utils.setOptions=function(obj,optionsObj,ignoreUndefinedProps)
{if(!optionsObj)
return;for(var optionName in optionsObj)
{if(ignoreUndefinedProps&&optionsObj[optionName]==undefined)
continue;obj[optionName]=optionsObj[optionName];}};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(element,className,multiSelect)
{var selObj=null;if(!multiSelect)
{this.clearSelection();}
else
{for(var i=0;i<this.selectedElements.length;i++)
{selObj=this.selectedElements[i].element;if(selObj.element==element)
{if(selObj.className!=className)
{Spry.Utils.removeClassName(element,selObj.className);Spry.Utils.addClassName(element,className);}
return;}}}
selObj=new Object;selObj.element=element;selObj.className=className;this.selectedElements.push(selObj);Spry.Utils.addClassName(element,className);};Spry.Utils.SelectionManager.SelectionGroup.prototype.unSelect=function(element)
{for(var i=0;i<this.selectedElements.length;i++)
{var selObj=this.selectedElements[i].element;if(selObj.element==element)
{Spry.Utils.removeClassName(selObj.element,selObj.className);return;}}};Spry.Utils.SelectionManager.SelectionGroup.prototype.clearSelection=function()
{var selObj=null;do
{selObj=this.selectedElements.shift();if(selObj)
Spry.Utils.removeClassName(selObj.element,selObj.className);}
while(selObj);};Spry.Utils.SelectionManager.getSelectionGroup=function(selectionGroupName)
{if(!selectionGroupName)
return null;var groupObj=Spry.Utils.SelectionManager.selectionGroups[selectionGroupName];if(!groupObj)
{groupObj=new Spry.Utils.SelectionManager.SelectionGroup();Spry.Utils.SelectionManager.selectionGroups[selectionGroupName]=groupObj;}
return groupObj;};Spry.Utils.SelectionManager.select=function(selectionGroupName,element,className,multiSelect)
{var groupObj=Spry.Utils.SelectionManager.getSelectionGroup(selectionGroupName);if(!groupObj)
return;groupObj.select(element,className,multiSelect);};Spry.Utils.SelectionManager.unSelect=function(selectionGroupName,element)
{var groupObj=Spry.Utils.SelectionManager.getSelectionGroup(selectionGroupName);if(!groupObj)
return;groupObj.unSelect(element,className);};Spry.Utils.SelectionManager.clearSelection=function(selectionGroupName)
{var groupObj=Spry.Utils.SelectionManager.getSelectionGroup(selectionGroupName);if(!groupObj)
return;groupObj.clearSelection();};function $()
{var elements=new Array();for(var i=0;i<arguments.length;i++)
{var element=arguments[i];if(typeof element=='string')
element=document.getElementById(element);if(arguments.length==1)
return element;elements.push(element);}
return elements;}
Spry.Utils.Notifier=function()
{this.observers=[];this.suppressNotifications=0;};Spry.Utils.Notifier.prototype.addObserver=function(observer)
{if(!observer)
return;var len=this.observers.length;for(var i=0;i<len;i++)
{if(this.observers[i]==observer)
return;}
this.observers[len]=observer;};Spry.Utils.Notifier.prototype.removeObserver=function(observer)
{if(!observer)
return;for(var i=0;i<this.observers.length;i++)
{if(this.observers[i]==observer)
{this.observers.splice(i,1);break;}}};Spry.Utils.Notifier.prototype.notifyObservers=function(methodName,data)
{if(!methodName)
return;if(!this.suppressNotifications)
{var len=this.observers.length;for(var i=0;i<len;i++)
{var obs=this.observers[i];if(obs)
{if(typeof obs=="function")
obs(methodName,this,data);else if(obs[methodName])
obs[methodName](this,data);}}}};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 div=Spry.Debug.debugWindow;div.style.fontSize="12px";div.style.fontFamily="console";div.style.position="absolute";div.style.width="400px";div.style.height="300px";div.style.overflow="auto";div.style.border="solid 1px black";div.style.backgroundColor="white";div.style.color="black";div.style.bottom="0px";div.style.right="0px";div.setAttribute("id","SpryDebugWindow");document.body.appendChild(Spry.Debug.debugWindow);}
catch(e){}};Spry.Debug.debugOut=function(str,bgColor)
{if(!Spry.Debug.debugWindow)
{Spry.Debug.createDebugWindow();if(!Spry.Debug.debugWindow)
return;}
var d=document.createElement("div");if(bgColor)
d.style.backgroundColor=bgColor;d.innerHTML=str;Spry.Debug.debugWindow.appendChild(d);};Spry.Debug.trace=function(str)
{Spry.Debug.debugOut(str);};Spry.Debug.reportError=function(str)
{Spry.Debug.debugOut(str,"red");};Spry.Data={};Spry.Data.regionsArray={};Spry.Data.initRegions=function(rootNode)
{if(!rootNode)
rootNode=document.body;var lastRegionFound=null;var regions=Spry.Utils.getNodesByFunc(rootNode,function(node)
{try
{if(node.nodeType!=1)
return false;var attrName="spry:region";var attr=node.attributes.getNamedItem(attrName);if(!attr)
{attrName="spry:detailregion";attr=node.attributes.getNamedItem(attrName);}
if(attr)
{if(lastRegionFound)
{var parent=node.parentNode;while(parent)
{if(parent==lastRegionFound)
{Spry.Debug.reportError("Found a nested "+attrName+" in the following markup. Nested regions are currently not supported.<br/><pre>"+Spry.Utils.encodeEntities(parent.innerHTML)+"</pre>");return false;}
parent=parent.parentNode;}}
if(attr.value)
{attr=node.attributes.getNamedItem("id");if(!attr||!attr.value)
{node.setAttribute("id","spryregion"+(++Spry.Data.initRegions.nextUniqueRegionID));}
lastRegionFound=node;return true;}
else
Spry.Debug.reportError(attrName+" attributes require one or more data set names as values!");}}
catch(e){}
return false;});var name,dataSets,i;for(i=0;i<regions.length;i++)
{var rgn=regions[i];var isDetailRegion=false;name=rgn.attributes.getNamedItem("id").value;attr=rgn.attributes.getNamedItem("spry:region");if(!attr)
{attr=rgn.attributes.getNamedItem("spry:detailregion");isDetailRegion=true;}
if(!attr.value)
{Spry.Debug.reportError("spry:region and spry:detailregion attributes require one or more data set names as values!");continue;}
rgn.attributes.removeNamedItem(attr.nodeName);Spry.Utils.removeClassName(rgn,Spry.Data.Region.hiddenRegionClassName);dataSets=Spry.Data.Region.strToDataSetsArray(attr.value);if(!dataSets.length)
{Spry.Debug.reportError("spry:region or spry:detailregion attribute has no data set!");continue;}
var hasBehaviorAttributes=false;var hasSpryContent=false;var dataStr="";var parent=null;var regionStates={};var regionStateMap={};attr=rgn.attributes.getNamedItem("spry:readystate");if(attr&&attr.value)
regionStateMap["ready"]=attr.value;attr=rgn.attributes.getNamedItem("spry:errorstate");if(attr&&attr.value)
regionStateMap["error"]=attr.value;attr=rgn.attributes.getNamedItem("spry:loadingstate");if(attr&&attr.value)
regionStateMap["loading"]=attr.value;var piRegions=Spry.Utils.getNodesByFunc(rgn,function(node)
{try
{if(node.nodeType==1)
{var attributes=node.attributes;var numPI=Spry.Data.Region.PI.orderedInstructions.length;var lastStartComment=null;var lastEndComment=null;for(var i=0;i<numPI;i++)
{var piName=Spry.Data.Region.PI.orderedInstructions[i];var attr=attributes.getNamedItem(piName);if(!attr)
continue;var piDesc=Spry.Data.Region.PI.instructions[piName];var childrenOnly=(node==rgn)?true:piDesc.childrenOnly;var openTag=piDesc.getOpenTag(node,piName);var closeTag=piDesc.getCloseTag(node,piName);if(childrenOnly)
{var oComment=document.createComment(openTag);var cComment=document.createComment(closeTag)
if(!lastStartComment)
node.insertBefore(oComment,node.firstChild);else
node.insertBefore(oComment,lastStartComment.nextSibling);lastStartComment=oComment;if(!lastEndComment)
node.appendChild(cComment);else
node.insertBefore(cComment,lastEndComment);lastEndComment=cComment;}
else
{var parent=node.parentNode;parent.insertBefore(document.createComment(openTag),node);parent.insertBefore(document.createComment(closeTag),node.nextSibling);}
if(piName=="spry:state")
regionStates[attr.value]=true;node.removeAttribute(piName);}
if(Spry.Data.Region.enableBehaviorAttributes)
{var bAttrs=Spry.Data.Region.behaviorAttrs;for(var behaviorAttrName in bAttrs)
{var bAttr=attributes.getNamedItem(behaviorAttrName);if(bAttr)
{hasBehaviorAttributes=true;if(bAttrs[behaviorAttrName].setup)
bAttrs[behaviorAttrName].setup(node,bAttr.value);}}}}}
catch(e){}
return false;});dataStr=rgn.innerHTML;if(window.ActiveXObject&&!Spry.Data.Region.disableIEInnerHTMLFixUp&&dataStr.search(/=\{/)!=-1)
{if(Spry.Data.Region.debug)
Spry.Debug.trace("<hr />Performing IE innerHTML fix up of Region: "+name+"<br /><br />"+Spry.Utils.encodeEntities(dataStr));dataStr=Spry.Utils.fixUpIEInnerHTML(dataStr);}
if(Spry.Data.Region.debug)
Spry.Debug.trace("<hr />Region template markup for '"+name+"':<br /><br />"+Spry.Utils.encodeEntities(dataStr));if(!hasSpryContent)
{rgn.innerHTML="";}
var region=new Spry.Data.Region(rgn,name,isDetailRegion,dataStr,dataSets,regionStates,regionStateMap,hasBehaviorAttributes);Spry.Data.regionsArray[region.name]=region;}
Spry.Data.updateAllRegions();};Spry.Data.initRegions.nextUniqueRegionID=0;Spry.Data.updateRegion=function(regionName)
{if(!regionName||!Spry.Data.regionsArray||!Spry.Data.regionsArray[regionName])
return;try{Spry.Data.regionsArray[regionName].updateContent();}
catch(e){Spry.Debug.reportError("Spry.Data.updateRegion("+regionName+") caught an exception: "+e+"\n");}};Spry.Data.getRegion=function(regionName)
{return Spry.Data.regionsArray[regionName];};Spry.Data.updateAllRegions=function()
{if(!Spry.Data.regionsArray)
return;for(var regionName in Spry.Data.regionsArray)
Spry.Data.updateRegion(regionName);};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(unfiltered)
{return(unfiltered&&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 self=this;this.pendingRequest=new Object;this.dataWasLoaded=false;this.pendingRequest.timer=setTimeout(function()
{self.pendingRequest=null;self.dataWasLoaded=true;if(self.filterDataFunc)
self.filterData(self.filterDataFunc,true);if(self.distinctOnLoad)
self.distinct();if(self.keepSorted&&self.getSortColumn())
self.sort(self.lastSortColumns,self.lastSortOrder)
else if(self.sortOnLoad)
self.sort(self.sortOnLoad,self.sortOrderOnLoad);if(self.filterFunc)
self.filter(self.filterFunc,true);self.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(unfiltered)
{var rows=this.getData(unfiltered);return rows?rows.length:0;};Spry.Data.DataSet.prototype.getRowByID=function(rowID)
{if(!this.data)
return null;return this.dataHash[rowID];};Spry.Data.DataSet.prototype.getRowByRowNumber=function(rowNumber,unfiltered)
{var rows=this.getData(unfiltered);if(rows&&rowNumber>=0&&rowNumber<rows.length)
return rows[rowNumber];return null;};Spry.Data.DataSet.prototype.getCurrentRow=function()
{return this.getRowByID(this.curRowID);};Spry.Data.DataSet.prototype.setCurrentRow=function(rowID)
{if(this.curRowID==rowID)
return;var nData={oldRowID:this.curRowID,newRowID:rowID};this.curRowID=rowID;this.notifyObservers("onCurrentRowChanged",nData);};Spry.Data.DataSet.prototype.getRowNumber=function(row)
{if(row&&this.data&&this.data.length)
{var numRows=this.data.length;for(var i=0;i<numRows;i++)
{if(this.data[i]==row)
return i;}}
return 0;};Spry.Data.DataSet.prototype.getCurrentRowNumber=function()
{return this.getRowNumber(this.getCurrentRow());};Spry.Data.DataSet.prototype.setCurrentRowNumber=function(rowNumber)
{if(!this.data||rowNumber>=this.data.length)
{Spry.Debug.trace("Invalid row number: "+rowNumber+"\n");return;}
var rowID=this.data[rowNumber]["ds_RowID"];if(rowID==undefined||this.curRowID==rowID)
return;this.setCurrentRow(rowID);};Spry.Data.DataSet.prototype.findRowsWithColumnValues=function(valueObj,firstMatchOnly,unfiltered)
{var results=[];var rows=this.getData(unfiltered);if(rows)
{var numRows=rows.length;for(var i=0;i<numRows;i++)
{var row=rows[i];var matched=true;for(var colName in valueObj)
{if(valueObj[colName]!=row[colName])
{matched=false;break;}}
if(matched)
{if(firstMatchOnly)
return row;results.push(row);}}}
return results;};Spry.Data.DataSet.prototype.setColumnType=function(columnName,columnType)
{if(columnName)
this.columnTypes[columnName]=columnType;};Spry.Data.DataSet.prototype.getColumnType=function(columnName)
{if(this.columnTypes[columnName])
return this.columnTypes[columnName];return"string";};Spry.Data.DataSet.prototype.distinct=function()
{if(this.data)
{var oldData=this.data;this.data=[];this.dataHash={};var alreadySeenHash={};var i=0;for(var i=0;i<oldData.length;i++)
{var rec=oldData[i];var hashStr="";for(var recField in rec)
{if(recField!="ds_RowID")
{if(hashStr)
hashStr+=",";hashStr+=recField+":"+"\""+rec[recField]+"\"";}}
if(!alreadySeenHash[hashStr])
{this.data.push(rec);this.dataHash[rec['ds_RowID']]=rec;alreadySeenHash[hashStr]=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(columnNames,sortOrder)
{if(!columnNames)
return;if(typeof columnNames=="string")
columnNames=[columnNames,"ds_RowID"];else if(columnNames.length<2&&columnNames[0]!="ds_RowID")
columnNames.push("ds_RowID");if(!sortOrder)
sortOrder="toggle";if(sortOrder=="toggle")
{if(this.lastSortColumns.length>0&&this.lastSortColumns[0]==columnNames[0]&&this.lastSortOrder=="ascending")
sortOrder="descending";else
sortOrder="ascending";}
if(sortOrder!="ascending"&&sortOrder!="descending")
{Spry.Debug.reportError("Invalid sort order type specified: "+sortOrder+"\n");return;}
var nData={oldSortColumns:this.lastSortColumns,oldSortOrder:this.lastSortOrder,newSortColumns:columnNames,newSortOrder:sortOrder};this.notifyObservers("onPreSort",nData);var cname=columnNames[columnNames.length-1];var sortfunc=Spry.Data.DataSet.prototype.sort.getSortFunc(cname,this.getColumnType(cname),sortOrder);for(var i=columnNames.length-2;i>=0;i--)
{cname=columnNames[i];sortfunc=Spry.Data.DataSet.prototype.sort.buildSecondarySortFunc(Spry.Data.DataSet.prototype.sort.getSortFunc(cname,this.getColumnType(cname),sortOrder),sortfunc);}
if(this.unfilteredData)
{this.unfilteredData.sort(sortfunc);if(this.filterFunc)
this.filter(this.filterFunc,true);}
else
this.data.sort(sortfunc);this.lastSortColumns=columnNames.slice(0);this.lastSortOrder=sortOrder;this.notifyObservers("onPostSort",nData);};Spry.Data.DataSet.prototype.sort.getSortFunc=function(prop,type,order)
{var sortfunc=null;if(type=="number")
{if(order=="ascending")
sortfunc=function(a,b){return a[prop]-b[prop];};else
sortfunc=function(a,b){return b[prop]-a[prop];};}
else if(type=="date")
{if(order=="ascending")
sortfunc=function(a,b)
{var dA=a[prop];var dB=b[prop];dA=dA?(new Date(dA)):0;dB=dB?(new Date(dB)):0;return dA-dB;};else
sortfunc=function(a,b)
{var dA=a[prop];var dB=b[prop];dA=dA?(new Date(dA)):0;dB=dB?(new Date(dB)):0;return dB-dA;};}
else
{if(order=="ascending")
sortfunc=function(a,b){var tA=a[prop].toString();var tB=b[prop].toString();var tA_l=tA.toLowerCase();var tB_l=tB.toLowerCase();var min_len=tA.length>tB.length?tB.length:tA.length;for(var i=0;i<min_len;i++){var a_l_c=tA_l.charAt(i);var b_l_c=tB_l.charAt(i);var a_c=tA.charAt(i);var b_c=tB.charAt(i);if(a_l_c>b_l_c){return 1;}else if(a_l_c<b_l_c){return-1;}else if(a_c>b_c){return 1;}else if(a_c<b_c){return-1;}}
if(tA.length==tB.length){return 0;}else if(tA.length>tB.length){return 1;}else{return-1;}};else
sortfunc=function(a,b){var tA=a[prop].toString();var tB=b[prop].toString();var tA_l=tA.toLowerCase();var tB_l=tB.toLowerCase();var min_len=tA.length>tB.length?tB.length:tA.length;for(var i=0;i<min_len;i++){var a_l_c=tA_l.charAt(i);var b_l_c=tB_l.charAt(i);var a_c=tA.charAt(i);var b_c=tB.charAt(i);if(a_l_c>b_l_c){return-1;}else if(a_l_c<b_l_c){return 1;}else if(a_c>b_c){return-1;}else if(a_c<b_c){return 1;}}
if(tA.length==tB.length){return 0;}else if(tA.length>tB.length){return-1;}else{return 1;}};}
return sortfunc;};Spry.Data.DataSet.prototype.sort.buildSecondarySortFunc=function(funcA,funcB)
{return function(a,b)
{var ret=funcA(a,b);if(ret==0)
ret=funcB(a,b);return ret;};};Spry.Data.DataSet.prototype.filterData=function(filterFunc,filterOnly)
{var dataChanged=false;if(!filterFunc)
{this.filterDataFunc=null;dataChanged=true;}
else
{this.filterDataFunc=filterFunc;if(this.dataWasLoaded&&((this.unfilteredData&&this.unfilteredData.length)||(this.data&&this.data.length)))
{if(this.unfilteredData)
{this.data=this.unfilteredData;this.unfilteredData=null;}
var oldData=this.data;this.data=[];this.dataHash={};for(var i=0;i<oldData.length;i++)
{var newRow=filterFunc(this,oldData[i],i);if(newRow)
{this.data.push(newRow);this.dataHash[newRow["ds_RowID"]]=newRow;}}
dataChanged=true;}}
if(dataChanged)
{if(!filterOnly)
{this.disableNotifications();if(this.filterFunc)
this.filter(this.filterFunc,true);this.enableNotifications();}
this.notifyObservers("onDataChanged");}};Spry.Data.DataSet.prototype.filter=function(filterFunc,filterOnly)
{var dataChanged=false;if(!filterFunc)
{if(this.filterFunc&&this.unfilteredData)
{this.data=this.unfilteredData;this.unfilteredData=null;this.filterFunc=null;dataChanged=true;}}
else
{this.filterFunc=filterFunc;if(this.dataWasLoaded&&(this.unfilteredData||(this.data&&this.data.length)))
{if(!this.unfilteredData)
this.unfilteredData=this.data;var udata=this.unfilteredData;this.data=[];for(var i=0;i<udata.length;i++)
{var newRow=filterFunc(this,udata[i],i);if(newRow)
this.data.push(newRow);}
dataChanged=true;}}
if(dataChanged)
this.notifyObservers("onDataChanged");};Spry.Data.DataSet.prototype.startLoadInterval=function(interval)
{this.stopLoadInterval();if(interval>0)
{var self=this;this.loadInterval=interval;this.loadIntervalID=setInterval(function(){self.loadData();},interval);}};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(dataSetURL,dataSetPath,dataSetOptions)
{Spry.Data.DataSet.call(this);this.url=dataSetURL;this.xpath=dataSetPath;this.doc=null;this.dataSetsForDataRefStrings=new Array;this.hasDataRefStrings=false;this.useCache=true;this.requestInfo=new Spry.Utils.loadURL.Request();this.requestInfo.extractRequestOptions(dataSetOptions,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,dataSetOptions,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 i=0;i<this.dataSetsForDataRefStrings.length;i++)
{var ds=this.dataSetsForDataRefStrings[i];if(ds.getLoadDataRequestIsPending()||!ds.getDataWasLoaded())
return;}
this.loadData();};Spry.Data.XMLDataSet.prototype.onCurrentRowChanged=function(ds,data)
{this.attemptLoadData();};Spry.Data.XMLDataSet.prototype.onPostSort=function(ds,data)
{this.attemptLoadData();};Spry.Data.XMLDataSet.prototype.onDataChanged=function(ds,data)
{this.attemptLoadData();};Spry.Data.XMLDataSet.prototype.loadData=function()
{if(!this.url||!this.xpath)
return;this.cancelLoadData();var url=this.url;var postData=this.requestInfo.postData;if(this.hasDataRefStrings)
{var allDataSetsReady=true;for(var i=0;i<this.dataSetsForDataRefStrings.length;i++)
{var ds=this.dataSetsForDataRefStrings[i];if(ds.getLoadDataRequestIsPending())
allDataSetsReady=false;else if(!ds.getDataWasLoaded())
{ds.loadData();allDataSetsReady=false;}}
if(!allDataSetsReady)
return;url=Spry.Data.Region.processDataRefString(null,this.url,this.dataSetsForDataRefStrings);if(!url)
return;if(postData&&(typeof postData)=="string")
postData=Spry.Data.Region.processDataRefString(null,postData,this.dataSetsForDataRefStrings);}
this.notifyObservers("onPreLoad");this.data=null;this.dataWasLoaded=false;this.unfilteredData=null;this.dataHash=null;this.curRowID=0;var req=this.requestInfo.clone();req.url=url;req.postData=postData;this.pendingRequest=new Object;this.pendingRequest.data=Spry.Data.XMLDataSet.LoadManager.loadData(req,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(url,requestOptions)
{if(this.url==url)
return;this.url=url;if(requestOptions)
this.requestInfo.extractRequestOptions(requestOptions);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(path)
{if(this.xpath!=path)
{this.xpath=path;if(this.dataWasLoaded&&this.doc)
this.setDataFromDoc(this.doc);}};Spry.Data.XMLDataSet.prototype.setDataFromDoc=function(doc)
{this.pendingRequest=null;var rs=null;rs=Spry.Utils.getRecordSetFromXMLDoc(doc,Spry.Data.Region.processDataRefString(null,this.xpath,this.dataSetsForDataRefStrings));if(!rs)
{Spry.Debug.reportError("Spry.Data.XMLDataSet.setDataFromDoc() failed to create dataSet '"+this.name+"'for '"+this.xpath+"' - "+this.url+"\n");return;}
this.doc=rs.xmlDoc;this.data=rs.data;this.dataHash=rs.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(cachedRequest,req)
{this.setDataFromDoc(cachedRequest.doc);};Spry.Data.XMLDataSet.prototype.onRequestError=function(cachedRequest,req)
{this.notifyObservers("onLoadError",req);};Spry.Data.XMLDataSet.LoadManager={};Spry.Data.XMLDataSet.LoadManager.cache=[];Spry.Data.XMLDataSet.LoadManager.CachedRequest=function(reqInfo)
{Spry.Utils.Notifier.call(this);this.reqInfo=reqInfo;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(req)
{if(req.xhRequest.readyState!=4)
return;var xmlDoc=req.xhRequest.responseXML;if(req.xhRequest.status!=200)
{if(req.xhRequest.status==0)
{if(req.xhRequest.responseText&&(!xmlDoc||!xmlDoc.firstChild))
xmlDoc=Spry.Utils.stringToXMLDoc(req.xhRequest.responseText);}}
if(!xmlDoc||!xmlDoc.firstChild||xmlDoc.firstChild.nodeName=="parsererror")
{this.state=Spry.Data.XMLDataSet.LoadManager.CachedRequest.LOAD_FAILED;this.notifyObservers("onRequestError",req);this.observers.length=0;return;}
this.doc=xmlDoc;this.state=Spry.Data.XMLDataSet.LoadManager.CachedRequest.LOAD_SUCCESSFUL;this.notifyObservers("onRequestResponse",req);this.observers.length=0;};Spry.Data.XMLDataSet.LoadManager.CachedRequest.prototype.loadData=function()
{var self=this;this.cancelLoadData();this.doc=null;this.state=Spry.Data.XMLDataSet.LoadManager.CachedRequest.LOAD_REQUESTED;var reqInfo=this.reqInfo.clone();reqInfo.successCallback=function(req){self.loadDataCallback(req);};reqInfo.errorCallback=reqInfo.successCallback;this.timer=setTimeout(function()
{self.timer=null;Spry.Utils.loadURL(reqInfo.method,reqInfo.url,reqInfo.async,reqInfo.successCallback,reqInfo);},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(reqInfo)
{return reqInfo.method+"::"+reqInfo.url+"::"+reqInfo.postData+"::"+reqInfo.username;};Spry.Data.XMLDataSet.LoadManager.loadData=function(reqInfo,ds,useCache)
{if(!reqInfo)
return null;var cacheObj=null;var cacheKey=null;if(useCache)
{cacheKey=Spry.Data.XMLDataSet.LoadManager.getCacheKey(reqInfo);cacheObj=Spry.Data.XMLDataSet.LoadManager.cache[cacheKey];}
if(cacheObj)
{if(cacheObj.state==Spry.Data.XMLDataSet.LoadManager.CachedRequest.LOAD_REQUESTED)
{if(ds)
cacheObj.addObserver(ds);return cacheObj;}
else if(cacheObj.state==Spry.Data.XMLDataSet.LoadManager.CachedRequest.LOAD_SUCCESSFUL)
{if(ds)
setTimeout(function(){ds.setDataFromDoc(cacheObj.doc);},0);return cacheObj;}}
if(!cacheObj)
{cacheObj=new Spry.Data.XMLDataSet.LoadManager.CachedRequest(reqInfo);if(useCache)
{Spry.Data.XMLDataSet.LoadManager.cache[cacheKey]=cacheObj;cacheObj.addObserver({onRequestError:function(){Spry.Data.XMLDataSet.LoadManager.cache[cacheKey]=undefined;}});}}
if(ds)
cacheObj.addObserver(ds);cacheObj.loadData();return cacheObj;};Spry.Data.XMLDataSet.LoadManager.cancelLoadData=function(cacheObj,ds)
{if(cacheObj)
{if(ds)
cacheObj.removeObserver(ds);else
cacheObj.cancelLoadData();}};Spry.Data.Region=function(regionNode,name,isDetailRegion,data,dataSets,regionStates,regionStateMap,hasBehaviorAttributes)
{this.regionNode=regionNode;this.name=name;this.isDetailRegion=isDetailRegion;this.data=data;this.dataSets=dataSets;this.hasBehaviorAttributes=hasBehaviorAttributes;this.tokens=null;this.currentState=null;this.states={ready:true};this.stateMap={};Spry.Utils.setOptions(this.states,regionStates);Spry.Utils.setOptions(this.stateMap,regionStateMap);for(var i=0;i<this.dataSets.length;i++)
{var ds=this.dataSets[i];try
{if(ds)
ds.addObserver(this);}
catch(e){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(regionID,observer)
{var n=Spry.Data.Region.notifiers[regionID];if(!n)
{n=new Spry.Utils.Notifier();Spry.Data.Region.notifiers[regionID]=n;}
n.addObserver(observer);};Spry.Data.Region.removeObserver=function(regionID,observer)
{var n=Spry.Data.Region.notifiers[regionID];if(n)
n.removeObserver(observer);};Spry.Data.Region.notifyObservers=function(methodName,region,data)
{var n=Spry.Data.Region.notifiers[region.name];if(n)
{var dataObj={};if(data&&typeof data=="object")
dataObj=data;else
dataObj.data=data;dataObj.region=region;dataObj.regionID=region.name;dataObj.regionNode=region.regionNode;n.notifyObservers(methodName,dataObj);}};Spry.Data.Region.RS_Error=0x01;Spry.Data.Region.RS_LoadingData=0x02;Spry.Data.Region.RS_PreUpdate=0x04;Spry.Data.Region.RS_PostUpdate=0x08;Spry.Data.Region.prototype.getState=function()
{return this.currentState;};Spry.Data.Region.prototype.mapState=function(stateName,newStateName)
{this.stateMap[stateName]=newStateName;};Spry.Data.Region.prototype.getMappedState=function(stateName)
{var mappedState=this.stateMap[stateName];return mappedState?mappedState:stateName;};Spry.Data.Region.prototype.setState=function(stateName,suppressNotfications)
{var stateObj={state:stateName,mappedState:this.getMappedState(stateName)};if(!suppressNotfications)
Spry.Data.Region.notifyObservers("onPreStateChange",this,stateObj);this.currentState=stateObj.mappedState?stateObj.mappedState:stateName;if(this.states[stateName])
{if(!suppressNotfications)
Spry.Data.Region.notifyObservers("onPreUpdate",this,{state:this.currentState});var str=this.transform();if(Spry.Data.Region.debug)
Spry.Debug.trace("<hr />Generated region markup for '"+this.name+"':<br /><br />"+Spry.Utils.encodeEntities(str));Spry.Utils.setInnerHTML(this.regionNode,str,!Spry.Data.Region.evalScripts);if(this.hasBehaviorAttributes)
this.attachBehaviors();if(!suppressNotfications)
Spry.Data.Region.notifyObservers("onPostUpdate",this,{state:this.currentState});}
if(!suppressNotfications)
Spry.Data.Region.notifyObservers("onPostStateChange",this,stateObj);};Spry.Data.Region.prototype.getDataSets=function()
{return this.dataSets;};Spry.Data.Region.prototype.addDataSet=function(aDataSet)
{if(!aDataSet)
return;if(!this.dataSets)
this.dataSets=new Array;for(var i=0;i<this.dataSets.length;i++)
{if(this.dataSets[i]==aDataSet)
return;}
this.dataSets.push(aDataSet);aDataSet.addObserver(this);};Spry.Data.Region.prototype.removeDataSet=function(aDataSet)
{if(!aDataSet||this.dataSets)
return;for(var i=0;i<this.dataSets.length;i++)
{if(this.dataSets[i]==aDataSet)
{this.dataSets.splice(i,1);aDataSet.removeObserver(this);return;}}};Spry.Data.Region.prototype.onPreLoad=function(dataSet)
{if(this.currentState!="loading")
this.setState("loading");};Spry.Data.Region.prototype.onLoadError=function(dataSet)
{if(this.currentState!="error")
this.setState("error");Spry.Data.Region.notifyObservers("onError",this);};Spry.Data.Region.prototype.onCurrentRowChanged=function(dataSet,data)
{if(this.isDetailRegion)
this.updateContent();};Spry.Data.Region.prototype.onPostSort=function(dataSet,data)
{this.updateContent();};Spry.Data.Region.prototype.onDataChanged=function(dataSet,data)
{this.updateContent();};Spry.Data.Region.enableBehaviorAttributes=true;Spry.Data.Region.behaviorAttrs={};Spry.Data.Region.behaviorAttrs["spry:select"]={attach:function(rgn,node,value)
{var selectGroupName=null;try{selectGroupName=node.attributes.getNamedItem("spry:selectgroup").value;}catch(e){}
if(!selectGroupName)
selectGroupName="default";Spry.Utils.addEventListener(node,"click",function(event){Spry.Utils.SelectionManager.select(selectGroupName,node,value);},false);if(node.attributes.getNamedItem("spry:selected"))
Spry.Utils.SelectionManager.select(selectGroupName,node,value);}};Spry.Data.Region.behaviorAttrs["spry:hover"]={attach:function(rgn,node,value)
{Spry.Utils.addEventListener(node,"mouseover",function(event){Spry.Utils.addClassName(node,value);},false);Spry.Utils.addEventListener(node,"mouseout",function(event){Spry.Utils.removeClassName(node,value);},false);}};Spry.Data.Region.setUpRowNumberForEvenOddAttr=function(node,attr,value,rowNumAttrName)
{if(!value)
{Spry.Debug.showError("The "+attr+" attribute requires a CSS class name as its value!");node.attributes.removeNamedItem(attr);return;}
var dsName="";var valArr=value.split(/\s/);if(valArr.length>1)
{dsName=valArr[0];node.setAttribute(attr,valArr[1]);}
node.setAttribute(rowNumAttrName,"{"+(dsName?(dsName+"::"):"")+"ds_RowNumber}");};Spry.Data.Region.behaviorAttrs["spry:even"]={setup:function(node,value)
{Spry.Data.Region.setUpRowNumberForEvenOddAttr(node,"spry:even",value,"spryevenrownumber");},attach:function(rgn,node,value)
{if(value)
{rowNumAttr=node.attributes.getNamedItem("spryevenrownumber");if(rowNumAttr&&rowNumAttr.value)
{var rowNum=parseInt(rowNumAttr.value);if(rowNum%2)
Spry.Utils.addClassName(node,value);}}
node.removeAttribute("spry:even");node.removeAttribute("spryevenrownumber");}};Spry.Data.Region.behaviorAttrs["spry:odd"]={setup:function(node,value)
{Spry.Data.Region.setUpRowNumberForEvenOddAttr(node,"spry:odd",value,"spryoddrownumber");},attach:function(rgn,node,value)
{if(value)
{rowNumAttr=node.attributes.getNamedItem("spryoddrownumber");if(rowNumAttr&&rowNumAttr.value)
{var rowNum=parseInt(rowNumAttr.value);if(rowNum%2==0)
Spry.Utils.addClassName(node,value);}}
node.removeAttribute("spry:odd");node.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(node,value)
{if(!value)
{Spry.Debug.reportError("The spry:setrow attribute requires a data set name as its value!");node.removeAttribute("spry:setrow");return;}
node.setAttribute("spryrowid","{"+value+"::ds_RowID}");},attach:function(rgn,node,value)
{Spry.Data.Region.setRowAttrClickHandler(node,value,"spryrowid","setCurrentRow");node.removeAttribute("spry:setrow");node.removeAttribute("spryrowid");}};Spry.Data.Region.behaviorAttrs["spry:setrownumber"]={setup:function(node,value)
{if(!value)
{Spry.Debug.reportError("The spry:setrownumber attribute requires a data set name as its value!");node.removeAttribute("spry:setrownumber");return;}
node.setAttribute("spryrownumber","{"+value+"::ds_RowID}");},attach:function(rgn,node,value)
{Spry.Data.Region.setRowAttrClickHandler(node,value,"spryrownumber","setCurrentRowNumber");node.removeAttribute("spry:setrownumber");node.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 rgn=this;Spry.Utils.getNodesByFunc(this.regionNode,function(node)
{if(!node||node.nodeType!=1)
return false;try
{var bAttrs=Spry.Data.Region.behaviorAttrs;for(var bAttrName in bAttrs)
{var attr=node.attributes.getNamedItem(bAttrName);if(attr)
{var behavior=bAttrs[bAttrName];if(behavior&&behavior.attach)
behavior.attach(rgn,node,attr.value);}}}catch(e){}
return false;});};Spry.Data.Region.prototype.updateContent=function()
{var allDataSetsReady=true;var dsArray=this.getDataSets();if(!dsArray||dsArray.length<1)
{Spry.Debug.reportError("updateContent(): Region '"+this.name+"' has no data set!\n");return;}
for(var i=0;i<dsArray.length;i++)
{var ds=dsArray[i];if(ds)
{if(ds.getLoadDataRequestIsPending())
allDataSetsReady=false;else if(!ds.getDataWasLoaded())
{ds.loadData();allDataSetsReady=false;}}}
if(!allDataSetsReady)
{Spry.Data.Region.notifyObservers("onLoadingData",this);return;}
this.setState("ready");};Spry.Data.Region.prototype.clearContent=function()
{this.regionNode.innerHTML="";};Spry.Data.Region.processContentPI=function(inStr)
{var outStr="";var regexp=/<!--\s*<\/?spry:content\s*[^>]*>\s*-->/mg;var searchStartIndex=0;var processingContentTag=0;while(inStr.length)
{var results=regexp.exec(inStr);if(!results||!results[0])
{outStr+=inStr.substr(searchStartIndex,inStr.length-searchStartIndex);break;}
if(!processingContentTag&&results.index!=searchStartIndex)
{outStr+=inStr.substr(searchStartIndex,results.index-searchStartIndex);}
if(results[0].search(/<\//)!=-1)
{--processingContentTag;if(processingContentTag)
Spry.Debug.reportError("Nested spry:content regions are not allowed!\n");}
else
{++processingContentTag;var dataRefStr=results[0].replace(/.*\bdataref="/,"");outStr+=dataRefStr.replace(/".*$/,"");}
searchStartIndex=regexp.lastIndex;}
return outStr;}
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(token,processContext)
{var strArr=[""];var len=token.children.length;var children=token.children;for(var i=0;i<len;i++)
strArr.push(this.processTokens(children[i],processContext));return strArr.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(ele,piName,attrName)
{if(!ele||!piName)
return"";var jsExpr="";try
{var testAttr=ele.attributes.getNamedItem(piName);if(testAttr&&testAttr.value)
jsExpr=Spry.Utils.encodeEntities(testAttr.value);}
catch(e){jsExpr="";}
if(!jsExpr)
{Spry.Debug.reportError(piName+" attribute requires a JavaScript expression that returns true or false!\n");return"";}
return"<"+Spry.Data.Region.PI.instructions[piName].tagName+" "+attrName+"=\""+jsExpr+"\">";};Spry.Data.Region.PI.buildOpenTagForTest=function(ele,piName)
{return Spry.Data.Region.PI.buildOpenTagForValueAttr(ele,piName,"test");};Spry.Data.Region.PI.buildOpenTagForState=function(ele,piName)
{return Spry.Data.Region.PI.buildOpenTagForValueAttr(ele,piName,"name");};Spry.Data.Region.PI.buildOpenTagForRepeat=function(ele,piName)
{if(!ele||!piName)
return"";var selectAttrStr="";try
{var selectAttr=ele.attributes.getNamedItem(piName);if(selectAttr&&selectAttr.value)
{selectAttrStr=selectAttr.value;selectAttrStr=selectAttrStr.replace(/\s/g,"");}}
catch(e){selectAttrStr="";}
if(!selectAttrStr)
{Spry.Debug.reportError(piName+" attribute requires a data set name!\n");return"";}
var testAttrStr="";try
{var testAttr=ele.attributes.getNamedItem("spry:test");if(testAttr)
{if(testAttr.value)
testAttrStr=" test=\""+Spry.Utils.encodeEntities(testAttr.value)+"\"";ele.attributes.removeNamedItem(testAttr.nodeName);}}
catch(e){testAttrStr="";}
return"<"+Spry.Data.Region.PI.instructions[piName].tagName+" select=\""+selectAttrStr+"\""+testAttrStr+">";};Spry.Data.Region.PI.buildOpenTagForContent=function(ele,piName)
{if(!ele||!piName)
return"";var dataRefStr="";try
{var contentAttr=ele.attributes.getNamedItem(piName);if(contentAttr&&contentAttr.value)
dataRefStr=Spry.Utils.encodeEntities(contentAttr.value);}
catch(e){dataRefStr="";}
if(!dataRefStr)
{Spry.Debug.reportError(piName+" attribute requires a data reference!\n");return"";}
return"<"+Spry.Data.Region.PI.instructions[piName].tagName+" dataref=\""+dataRefStr+"\">";};Spry.Data.Region.PI.buildOpenTag=function(ele,piName)
{return"<"+Spry.Data.Region.PI.instructions[piName].tagName+">";};Spry.Data.Region.PI.buildCloseTag=function(ele,piName)
{return"</"+Spry.Data.Region.PI.instructions[piName].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(str)
{if(!str)
return null;return str.match(/{[^}]+}/g);};Spry.Data.Region.processDataRefString=function(processingContext,regionStr,dataSetsToUse,isJSExpr)
{if(!regionStr)
return"";if(!processingContext&&!dataSetsToUse)
return regionStr;var resultStr="";var re=new RegExp("\\{([^\\}:]+::)?[^\\}]+\\}","g");var startSearchIndex=0;while(startSearchIndex<regionStr.length)
{var reArray=re.exec(regionStr);if(!reArray||!reArray[0])
{resultStr+=regionStr.substr(startSearchIndex,regionStr.length-startSearchIndex);return resultStr;}
if(reArray.index!=startSearchIndex)
resultStr+=regionStr.substr(startSearchIndex,reArray.index-startSearchIndex);var dsName="";if(reArray[0].search(/^\{[^}:]+::/)!=-1)
dsName=reArray[0].replace(/^\{|::.*/g,"");var fieldName=reArray[0].replace(/^\{|.*::|\}/g,"");var row=null;if(processingContext)
{var dsContext=processingContext.getDataSetContext(dsName);if(fieldName=="ds_RowNumber")
{resultStr+=dsContext.getRowIndex();row=null;}
else if(fieldName=="ds_RowNumberPlus1")
{resultStr+=(dsContext.getRowIndex()+1);row=null;}
else if(fieldName=="ds_RowCount")
{resultStr+=dsContext.getNumRows();row=null;}
else if(fieldName=="ds_UnfilteredRowCount")
{resultStr+=dsContext.getNumRows(true);row=null;}
else if(fieldName=="ds_CurrentRowNumber")
{var ds=dsContext.getDataSet();resultStr+=ds.getRowNumber(ds.getCurrentRow());row=null;}
else if(fieldName=="ds_CurrentRowID")
{var ds=dsContext.getDataSet();resultStr+=""+ds.curRowID;row=null;}
else if(fieldName=="ds_EvenOddRow")
{resultStr+=(dsContext.getRowIndex()%2)?Spry.Data.Region.evenRowClassName:Spry.Data.Region.oddRowClassName;row=null;}
else if(fieldName=="ds_SortOrder")
{resultStr+=dsContext.getDataSet().getSortOrder();;row=null;}
else if(fieldName=="ds_SortColumn")
{resultStr+=dsContext.getDataSet().getSortColumn();row=null;}
else
row=processingContext.getCurrentRowForDataSet(dsName);}
else
{var ds=dsName?dataSetsToUse[dsName]:dataSetsToUse[0];if(ds)
row=ds.getCurrentRow();}
if(row)
resultStr+=isJSExpr?Spry.Utils.escapeQuotesAndLineBreaks(""+row[fieldName]):row[fieldName];if(startSearchIndex==re.lastIndex)
{var leftOverIndex=reArray.index+reArray[0].length;if(leftOverIndex<regionStr.length)
resultStr+=regionStr.substr(leftOverIndex);break;}
startSearchIndex=re.lastIndex;}
return resultStr;};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(dataSet)
{var m_self=this;var m_dataSet=dataSet;var m_curRowIndexArray=[-1];function getInternalRowIndex(){return m_curRowIndexArray[m_curRowIndexArray.length-1];}
this.resetAll=function(){m_curRowIndexArray=[m_dataSet.getCurrentRow()]};this.getDataSet=function(){return m_dataSet;};this.getNumRows=function(unfiltered)
{return m_dataSet.getRowCount(unfiltered);};this.getCurrentRow=function()
{if(m_curRowIndexArray.length<2||getInternalRowIndex()<0)
return m_dataSet.getCurrentRow();var data=m_dataSet.getData();var curRowIndex=getInternalRowIndex();if(curRowIndex<0||curRowIndex>data.length)
{Spry.Debug.reportError("Invalid index used in Spry.Data.Region.DSContext.getCurrentRow()!\n");return null;}
return data[curRowIndex];};this.getRowIndex=function()
{var curRowIndex=getInternalRowIndex();if(curRowIndex>=0)
return curRowIndex;return m_dataSet.getRowNumber(m_dataSet.getCurrentRow());};this.setRowIndex=function(rowIndex){m_curRowIndexArray[m_curRowIndexArray.length-1]=rowIndex;};this.pushState=function(){m_curRowIndexArray.push(getInternalRowIndex());};this.popState=function()
{if(m_curRowIndexArray.length<2)
{Spry.Debug.reportError("Stack underflow in Spry.Data.Region.DSContext.popState()!\n");return;}
m_curRowIndexArray.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(tokenType,dataSet,data,regionStr)
{var self=this;this.tokenType=tokenType;this.dataSet=dataSet;this.data=data;this.regionStr=regionStr;this.parent=null;this.children=null;};Spry.Data.Region.Token.prototype.addChild=function(child)
{if(!child)
return;if(!this.children)
this.children=new Array;this.children.push(child);child.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(piName,data,jsExpr,regionState)
{var self=this;this.name=piName;this.data=data;this.jsExpr=jsExpr;this.regionState=regionState;};Spry.Utils.addLoadListener(function(){setTimeout(function(){Spry.Data.initRegions();},0);});function xpathParse(expr){if(xpathdebug){Log.write('XPath parse '+expr);}
xpathParseInit();var cached=xpathCacheLookup(expr);if(cached){if(xpathdebug){Log.write(' ... cached');}
return cached;}
if(expr.match(/^(\$|@)?\w+$/i)){var ret=makeSimpleExpr(expr);xpathParseCache[expr]=ret;if(xpathdebug){Log.write(' ... simple');}
return ret;}
if(expr.match(/^\w+(\/\w+)*$/i)){var ret=makeSimpleExpr2(expr);xpathParseCache[expr]=ret;if(xpathdebug){Log.write(' ... simple 2');}
return ret;}
var cachekey=expr;if(xpathdebug){Timer.start('XPath parse',cachekey);}
var stack=[];var ahead=null;var previous=null;var done=false;var parse_count=0;var lexer_count=0;var reduce_count=0;while(!done){parse_count++;expr=expr.replace(/^\s*/,'');previous=ahead;ahead=null;var rule=null;var match='';for(var i=0;i<xpathTokenRules.length;++i){var result=xpathTokenRules[i].re.exec(expr);lexer_count++;if(result&&result.length>0&&result[0].length>match.length){rule=xpathTokenRules[i];match=result[0];break;}}
if(rule&&(rule==TOK_DIV||rule==TOK_MOD||rule==TOK_AND||rule==TOK_OR)&&(!previous||previous.tag==TOK_AT||previous.tag==TOK_DSLASH||previous.tag==TOK_SLASH||previous.tag==TOK_AXIS||previous.tag==TOK_DOLLAR)){rule=TOK_QNAME;}
if(rule){expr=expr.substr(match.length);if(xpathdebug){Log.write('token: '+match+' -- '+rule.label);}
ahead={tag:rule,match:match,prec:rule.prec?rule.prec:0,expr:makeTokenExpr(match)};}else{if(xpathdebug){Log.write('DONE');}
done=true;}
while(xpathReduce(stack,ahead)){reduce_count++;if(xpathdebug){Log.write('stack: '+stackToString(stack));}}}
if(xpathdebug){Log.write(stackToString(stack));}
if(stack.length!=1){throw'XPath parse error '+cachekey+':\n'+stackToString(stack);}
var result=stack[0].expr;xpathParseCache[cachekey]=result;if(xpathdebug){Timer.end('XPath parse',cachekey);}
if(xpathdebug){Log.write('XPath parse: '+parse_count+' / '+
lexer_count+' / '+reduce_count);}
return result;}
var xpathParseCache={};function xpathCacheLookup(expr){return xpathParseCache[expr];}
function xpathReduce(stack,ahead){var cand=null;if(stack.length>0){var top=stack[stack.length-1];var ruleset=xpathRules[top.tag.key];if(ruleset){for(var i=0;i<ruleset.length;++i){var rule=ruleset[i];var match=xpathMatchStack(stack,rule[1]);if(match.length){cand={tag:rule[0],rule:rule,match:match};cand.prec=xpathGrammarPrecedence(cand);break;}}}}
var ret;if(cand&&(!ahead||cand.prec>ahead.prec||(ahead.tag.left&&cand.prec>=ahead.prec))){for(var i=0;i<cand.match.matchlength;++i){stack.pop();}
if(xpathdebug){Log.write('reduce '+cand.tag.label+' '+cand.prec+' ahead '+(ahead?ahead.tag.label+' '+ahead.prec+
(ahead.tag.left?' left':''):' none '));}
var matchexpr=mapExpr(cand.match,function(m){return m.expr;});cand.expr=cand.rule[3].apply(null,matchexpr);stack.push(cand);ret=true;}else{if(ahead){if(xpathdebug){Log.write('shift '+ahead.tag.label+' '+ahead.prec+
(ahead.tag.left?' left':'')+' over '+(cand?cand.tag.label+' '+
cand.prec:' none'));}
stack.push(ahead);}
ret=false;}
return ret;}
function xpathMatchStack(stack,pattern){var S=stack.length;var P=pattern.length;var p,s;var match=[];match.matchlength=0;var ds=0;for(p=P-1,s=S-1;p>=0&&s>=0;--p,s-=ds){ds=0;var qmatch=[];if(pattern[p]==Q_MM){p-=1;match.push(qmatch);while(s-ds>=0&&stack[s-ds].tag==pattern[p]){qmatch.push(stack[s-ds]);ds+=1;match.matchlength+=1;}}else if(pattern[p]==Q_01){p-=1;match.push(qmatch);while(s-ds>=0&&ds<2&&stack[s-ds].tag==pattern[p]){qmatch.push(stack[s-ds]);ds+=1;match.matchlength+=1;}}else if(pattern[p]==Q_1M){p-=1;match.push(qmatch);if(stack[s].tag==pattern[p]){while(s-ds>=0&&stack[s-ds].tag==pattern[p]){qmatch.push(stack[s-ds]);ds+=1;match.matchlength+=1;}}else{return[];}}else if(stack[s].tag==pattern[p]){match.push(stack[s]);ds+=1;match.matchlength+=1;}else{return[];}
reverseInplace(qmatch);qmatch.expr=mapExpr(qmatch,function(m){return m.expr;});}
reverseInplace(match);if(p==-1){return match;}else{return[];}}
function xpathTokenPrecedence(tag){return tag.prec||2;}
function xpathGrammarPrecedence(frame){var ret=0;if(frame.rule){if(frame.rule.length>=3&&frame.rule[2]>=0){ret=frame.rule[2];}else{for(var i=0;i<frame.rule[1].length;++i){var p=xpathTokenPrecedence(frame.rule[1][i]);ret=Math.max(ret,p);}}}else if(frame.tag){ret=xpathTokenPrecedence(frame.tag);}else if(frame.length){for(var j=0;j<frame.length;++j){var p=xpathGrammarPrecedence(frame[j]);ret=Math.max(ret,p);}}
return ret;}
function stackToString(stack){var ret='';for(var i=0;i<stack.length;++i){if(ret){ret+='\n';}
ret+=stack[i].tag.label;}
return ret;}
function ExprContext(node,position,nodelist,parent){this.node=node;this.position=position||0;this.nodelist=nodelist||[node];this.variables={};this.parent=parent||null;this.root=parent?parent.root:node.ownerDocument;}
ExprContext.prototype.clone=function(node,position,nodelist){return new
ExprContext(node||this.node,typeof position!='undefined'?position:this.position,nodelist||this.nodelist,this);};ExprContext.prototype.setVariable=function(name,value){this.variables[name]=value;};ExprContext.prototype.getVariable=function(name){if(typeof this.variables[name]!='undefined'){return this.variables[name];}else if(this.parent){return this.parent.getVariable(name);}else{return null;}}
ExprContext.prototype.setNode=function(node,position){this.node=node;this.position=position;}
function StringValue(value){this.value=value;this.type='string';}
StringValue.prototype.stringValue=function(){return this.value;}
StringValue.prototype.booleanValue=function(){return this.value.length>0;}
StringValue.prototype.numberValue=function(){return this.value-0;}
StringValue.prototype.nodeSetValue=function(){throw this+' '+Error().stack;}
function BooleanValue(value){this.value=value;this.type='boolean';}
BooleanValue.prototype.stringValue=function(){return''+this.value;}
BooleanValue.prototype.booleanValue=function(){return this.value;}
BooleanValue.prototype.numberValue=function(){return this.value?1:0;}
BooleanValue.prototype.nodeSetValue=function(){throw this+' '+Error().stack;}
function NumberValue(value){this.value=value;this.type='number';}
NumberValue.prototype.stringValue=function(){return''+this.value;}
NumberValue.prototype.booleanValue=function(){return!!this.value;}
NumberValue.prototype.numberValue=function(){return this.value-0;}
NumberValue.prototype.nodeSetValue=function(){throw this+' '+Error().stack;}
function NodeSetValue(value){this.value=value;this.type='node-set';}
NodeSetValue.prototype.stringValue=function(){if(this.value.length==0){return'';}else{return xmlValue(this.value[0]);}}
NodeSetValue.prototype.booleanValue=function(){return this.value.length>0;}
NodeSetValue.prototype.numberValue=function(){return this.stringValue()-0;}
NodeSetValue.prototype.nodeSetValue=function(){return this.value;};function TokenExpr(m){this.value=m;}
TokenExpr.prototype.evaluate=function(){return new StringValue(this.value);};function LocationExpr(){this.absolute=false;this.steps=[];}
LocationExpr.prototype.appendStep=function(s){this.steps.push(s);}
LocationExpr.prototype.prependStep=function(s){var steps0=this.steps;this.steps=[s];for(var i=0;i<steps0.length;++i){this.steps.push(steps0[i]);}};LocationExpr.prototype.evaluate=function(ctx){var start;if(this.absolute){start=ctx.root;}else{start=ctx.node;}
var nodes=[];xPathStep(nodes,this.steps,0,start,ctx);return new NodeSetValue(nodes);};function xPathStep(nodes,steps,step,input,ctx){var s=steps[step];var ctx2=ctx.clone(input);var nodelist=s.evaluate(ctx2).nodeSetValue();for(var i=0;i<nodelist.length;++i){if(step==steps.length-1){nodes.push(nodelist[i]);}else{xPathStep(nodes,steps,step+1,nodelist[i],ctx);}}}
function StepExpr(axis,nodetest,predicate){this.axis=axis;this.nodetest=nodetest;this.predicate=predicate||[];}
StepExpr.prototype.appendPredicate=function(p){this.predicate.push(p);}
StepExpr.prototype.evaluate=function(ctx){var input=ctx.node;var nodelist=[];if(this.axis==xpathAxis.ANCESTOR_OR_SELF){nodelist.push(input);for(var n=input.parentNode;n;n=input.parentNode){nodelist.push(n);}}else if(this.axis==xpathAxis.ANCESTOR){for(var n=input.parentNode;n;n=input.parentNode){nodelist.push(n);}}else if(this.axis==xpathAxis.ATTRIBUTE){copyArray(nodelist,input.attributes);}else if(this.axis==xpathAxis.CHILD){copyArray(nodelist,input.childNodes);}else if(this.axis==xpathAxis.DESCENDANT_OR_SELF){nodelist.push(input);xpathCollectDescendants(nodelist,input);}else if(this.axis==xpathAxis.DESCENDANT){xpathCollectDescendants(nodelist,input);}else if(this.axis==xpathAxis.FOLLOWING){for(var n=input.parentNode;n;n=n.parentNode){for(var nn=n.nextSibling;nn;nn=nn.nextSibling){nodelist.push(nn);xpathCollectDescendants(nodelist,nn);}}}else if(this.axis==xpathAxis.FOLLOWING_SIBLING){for(var n=input.nextSibling;n;n=input.nextSibling){nodelist.push(n);}}else if(this.axis==xpathAxis.NAMESPACE){alert('not implemented: axis namespace');}else if(this.axis==xpathAxis.PARENT){if(input.parentNode){nodelist.push(input.parentNode);}}else if(this.axis==xpathAxis.PRECEDING){for(var n=input.parentNode;n;n=n.parentNode){for(var nn=n.previousSibling;nn;nn=nn.previousSibling){nodelist.push(nn);xpathCollectDescendantsReverse(nodelist,nn);}}}else if(this.axis==xpathAxis.PRECEDING_SIBLING){for(var n=input.previousSibling;n;n=input.previousSibling){nodelist.push(n);}}else if(this.axis==xpathAxis.SELF){nodelist.push(input);}else{throw'ERROR -- NO SUCH AXIS: '+this.axis;}
var nodelist0=nodelist;nodelist=[];for(var i=0;i<nodelist0.length;++i){var n=nodelist0[i];if(this.nodetest.evaluate(ctx.clone(n,i,nodelist0)).booleanValue()){nodelist.push(n);}}
for(var i=0;i<this.predicate.length;++i){var nodelist0=nodelist;nodelist=[];for(var ii=0;ii<nodelist0.length;++ii){var n=nodelist0[ii];if(this.predicate[i].evaluate(ctx.clone(n,ii,nodelist0)).booleanValue()){nodelist.push(n);}}}
return new NodeSetValue(nodelist);};function NodeTestAny(){this.value=new BooleanValue(true);}
NodeTestAny.prototype.evaluate=function(ctx){return this.value;};function NodeTestElement(){}
NodeTestElement.prototype.evaluate=function(ctx){return new BooleanValue(ctx.node.nodeType==DOM_ELEMENT_NODE);}
function NodeTestText(){}
NodeTestText.prototype.evaluate=function(ctx){return new BooleanValue(ctx.node.nodeType==DOM_TEXT_NODE);}
function NodeTestComment(){}
NodeTestComment.prototype.evaluate=function(ctx){return new BooleanValue(ctx.node.nodeType==DOM_COMMENT_NODE);}
function NodeTestPI(target){this.target=target;}
NodeTestPI.prototype.evaluate=function(ctx){return new
BooleanValue(ctx.node.nodeType==DOM_PROCESSING_INSTRUCTION_NODE&&(!this.target||ctx.node.nodeName==this.target));}
function NodeTestNC(nsprefix){this.regex=new RegExp("^"+nsprefix+":");this.nsprefix=nsprefix;}
NodeTestNC.prototype.evaluate=function(ctx){var n=ctx.node;return new BooleanValue(this.regex.match(n.nodeName));}
function NodeTestName(name){this.name=name;}
NodeTestName.prototype.evaluate=function(ctx){var n=ctx.node;return new BooleanValue(n.nodeName==this.name);}
function PredicateExpr(expr){this.expr=expr;}
PredicateExpr.prototype.evaluate=function(ctx){var v=this.expr.evaluate(ctx);if(v.type=='number'){return new BooleanValue(ctx.position==v.numberValue()-1);}else{return new BooleanValue(v.booleanValue());}};function FunctionCallExpr(name){this.name=name;this.args=[];}
FunctionCallExpr.prototype.appendArg=function(arg){this.args.push(arg);};FunctionCallExpr.prototype.evaluate=function(ctx){var fn=''+this.name.value;var f=this.xpathfunctions[fn];if(f){return f.call(this,ctx);}else{Log.write('XPath NO SUCH FUNCTION '+fn);return new BooleanValue(false);}};FunctionCallExpr.prototype.xpathfunctions={'last':function(ctx){assert(this.args.length==0);return new NumberValue(ctx.nodelist.length);},'position':function(ctx){assert(this.args.length==0);return new NumberValue(ctx.position+1);},'count':function(ctx){assert(this.args.length==1);var v=this.args[0].evaluate(ctx);return new NumberValue(v.nodeSetValue().length);},'id':function(ctx){assert(this.args.length==1);var e=this.args.evaluate(ctx);var ret=[];var ids;if(e.type=='node-set'){ids=[];for(var i=0;i<e.length;++i){var v=xmlValue(e[i]).split(/\s+/);for(var ii=0;ii<v.length;++ii){ids.push(v[ii]);}}}else{ids=e.split(/\s+/);}
var d=ctx.node.ownerDocument;for(var i=0;i<ids.length;++i){var n=d.getElementById(ids[i]);if(n){ret.push(n);}}
return new NodeSetValue(ret);},'local-name':function(ctx){alert('not implmented yet: XPath function local-name()');},'namespace-uri':function(ctx){alert('not implmented yet: XPath function namespace-uri()');},'name':function(ctx){assert(this.args.length==1||this.args.length==0);var n;if(this.args.length==0){n=[ctx.node];}else{n=this.args[0].evaluate(ctx).nodeSetValue();}
if(n.length==0){return new StringValue('');}else{return new StringValue(n[0].nodeName);}},'string':function(ctx){assert(this.args.length==1||this.args.length==0);if(this.args.length==0){return new StringValue(new NodeSetValue([ctx.node]).stringValue());}else{return new StringValue(this.args[0].evaluate(ctx).stringValue());}},'concat':function(ctx){var ret='';for(var i=0;i<this.args.length;++i){ret+=this.args[i].evaluate(ctx).stringValue();}
return new StringValue(ret);},'starts-with':function(ctx){assert(this.args.length==2);var s0=this.args[0].evaluate(ctx).stringValue();var s1=this.args[1].evaluate(ctx).stringValue();return new BooleanValue(s0.indexOf(s1)==0);},'contains':function(ctx){assert(this.args.length==2);var s0=this.args[0].evaluate(ctx).stringValue();var s1=this.args[1].evaluate(ctx).stringValue();return new BooleanValue(s0.indexOf(s1)!=-1);},'substring-before':function(ctx){assert(this.args.length==2);var s0=this.args[0].evaluate(ctx).stringValue();var s1=this.args[1].evaluate(ctx).stringValue();var i=s0.indexOf(s1);var ret;if(i==-1){ret='';}else{ret=s0.substr(0,i);}
return new StringValue(ret);},'substring-after':function(ctx){assert(this.args.length==2);var s0=this.args[0].evaluate(ctx).stringValue();var s1=this.args[1].evaluate(ctx).stringValue();var i=s0.indexOf(s1);var ret;if(i==-1){ret='';}else{ret=s0.substr(i+s1.length);}
return new StringValue(ret);},'substring':function(ctx){assert(this.args.length==2||this.args.length==3);var s0=this.args[0].evaluate(ctx).stringValue();var s1=this.args[1].evaluate(ctx).numberValue();var ret;if(this.args.length==2){var i1=Math.max(0,Math.round(s1)-1);ret=s0.substr(i1);}else{var s2=this.args[2].evaluate(ctx).numberValue();var i0=Math.round(s1)-1;var i1=Math.max(0,i0);var i2=Math.round(s2)-Math.max(0,-i0);ret=s0.substr(i1,i2);}
return new StringValue(ret);},'string-length':function(ctx){var s;if(this.args.length>0){s=this.args[0].evaluate(ctx).stringValue();}else{s=new NodeSetValue([ctx.node]).stringValue();}
return new NumberValue(s.length);},'normalize-space':function(ctx){var s;if(this.args.length>0){s=this.args[0].evaluate(ctx).stringValue();}else{s=new NodeSetValue([ctx.node]).stringValue();}
s=s.replace(/^\s*/,'').replace(/\s*$/,'').replace(/\s+/g,' ');return new StringValue(s);},'translate':function(ctx){assert(this.args.length==3);var s0=this.args[0].evaluate(ctx).stringValue();var s1=this.args[1].evaluate(ctx).stringValue();var s2=this.args[2].evaluate(ctx).stringValue();for(var i=0;i<s1.length;++i){s0=s0.replace(new RegExp(s1.charAt(i),'g'),s2.charAt(i));}
return new StringValue(s0);},'boolean':function(ctx){assert(this.args.length==1);return new BooleanValue(this.args[0].evaluate(ctx).booleanValue());},'not':function(ctx){assert(this.args.length==1);var ret=!this.args[0].evaluate(ctx).booleanValue();return new BooleanValue(ret);},'true':function(ctx){assert(this.args.length==0);return new BooleanValue(true);},'false':function(ctx){assert(this.args.length==0);return new BooleanValue(false);},'lang':function(ctx){assert(this.args.length==1);var lang=this.args[0].evaluate(ctx).stringValue();var xmllang;var n=ctx.node;while(n&&n!=n.parentNode){xmllang=n.getAttribute('xml:lang');if(xmllang){break;}
n=n.parentNode;}
if(!xmllang){return new BooleanValue(false);}else{var re=new RegExp('^'+lang+'$','i');return new BooleanValue(xmllang.match(re)||xmllang.replace(/_.*$/,'').match(re));}},'number':function(ctx){assert(this.args.length==1||this.args.length==0);if(this.args.length==1){return new NumberValue(this.args[0].evaluate(ctx).numberValue());}else{return new NumberValue(new NodeSetValue([ctx.node]).numberValue());}},'sum':function(ctx){assert(this.args.length==1);var n=this.args[0].evaluate(ctx).nodeSetValue();var sum=0;for(var i=0;i<n.length;++i){sum+=xmlValue(n[i])-0;}
return new NumberValue(sum);},'floor':function(ctx){assert(this.args.length==1);var num=this.args[0].evaluate(ctx).numberValue();return new NumberValue(Math.floor(num));},'ceiling':function(ctx){assert(this.args.length==1);var num=this.args[0].evaluate(ctx).numberValue();return new NumberValue(Math.ceil(num));},'round':function(ctx){assert(this.args.length==1);var num=this.args[0].evaluate(ctx).numberValue();return new NumberValue(Math.round(num));},'ext-join':function(ctx){assert(this.args.length==2);var nodes=this.args[0].evaluate(ctx).nodeSetValue();var delim=this.args[1].evaluate(ctx).stringValue();var ret='';for(var i=0;i<nodes.length;++i){if(ret){ret+=delim;}
ret+=xmlValue(nodes[i]);}
return new StringValue(ret);},'ext-if':function(ctx){assert(this.args.length==3);if(this.args[0].evaluate(ctx).booleanValue()){return this.args[1].evaluate(ctx);}else{return this.args[2].evaluate(ctx);}},'ext-sprintf':function(ctx){assert(this.args.length>=1);var args=[];for(var i=0;i<this.args.length;++i){args.push(this.args[i].evaluate(ctx).stringValue());}
return new StringValue(sprintf.apply(null,args));},'ext-cardinal':function(ctx){assert(this.args.length>=1);var c=this.args[0].evaluate(ctx).numberValue();var ret=[];for(var i=0;i<c;++i){ret.push(ctx.node);}
return new NodeSetValue(ret);}};function UnionExpr(expr1,expr2){this.expr1=expr1;this.expr2=expr2;}
UnionExpr.prototype.evaluate=function(ctx){var nodes1=this.expr1.evaluate(ctx).nodeSetValue();var nodes2=this.expr2.evaluate(ctx).nodeSetValue();var I1=nodes1.length;for(var i2=0;i2<nodes2.length;++i2){for(var i1=0;i1<I1;++i1){if(nodes1[i1]==nodes2[i2]){i1=I1;}}
nodes1.push(nodes2[i2]);}
return new NodeSetValue(nodes2);};function PathExpr(filter,rel){this.filter=filter;this.rel=rel;}
PathExpr.prototype.evaluate=function(ctx){var nodes=this.filter.evaluate(ctx).nodeSetValue();var nodes1=[];for(var i=0;i<nodes.length;++i){var nodes0=this.rel.evaluate(ctx.clone(nodes[i],i,nodes)).nodeSetValue();for(var ii=0;ii<nodes0.length;++ii){nodes1.push(nodes0[ii]);}}
return new NodeSetValue(nodes1);};function FilterExpr(expr,predicate){this.expr=expr;this.predicate=predicate;}
FilterExpr.prototype.evaluate=function(ctx){var nodes=this.expr.evaluate(ctx).nodeSetValue();for(var i=0;i<this.predicate.length;++i){var nodes0=nodes;nodes=[];for(var j=0;j<nodes0.length;++j){var n=nodes0[j];if(this.predicate[i].evaluate(ctx.clone(n,j,nodes0)).booleanValue()){nodes.push(n);}}}
return new NodeSetValue(nodes);}
function UnaryMinusExpr(expr){this.expr=expr;}
UnaryMinusExpr.prototype.evaluate=function(ctx){return new NumberValue(-this.expr.evaluate(ctx).numberValue());};function BinaryExpr(expr1,op,expr2){this.expr1=expr1;this.expr2=expr2;this.op=op;}
BinaryExpr.prototype.evaluate=function(ctx){var ret;switch(this.op.value){case'or':ret=new BooleanValue(this.expr1.evaluate(ctx).booleanValue()||this.expr2.evaluate(ctx).booleanValue());break;case'and':ret=new BooleanValue(this.expr1.evaluate(ctx).booleanValue()&&this.expr2.evaluate(ctx).booleanValue());break;case'+':ret=new NumberValue(this.expr1.evaluate(ctx).numberValue()+
this.expr2.evaluate(ctx).numberValue());break;case'-':ret=new NumberValue(this.expr1.evaluate(ctx).numberValue()-
this.expr2.evaluate(ctx).numberValue());break;case'*':ret=new NumberValue(this.expr1.evaluate(ctx).numberValue()*this.expr2.evaluate(ctx).numberValue());break;case'mod':ret=new NumberValue(this.expr1.evaluate(ctx).numberValue()%this.expr2.evaluate(ctx).numberValue());break;case'div':ret=new NumberValue(this.expr1.evaluate(ctx).numberValue()/this.expr2.evaluate(ctx).numberValue());break;case'=':ret=this.compare(ctx,function(x1,x2){return x1==x2;});break;case'!=':ret=this.compare(ctx,function(x1,x2){return x1!=x2;});break;case'<':ret=this.compare(ctx,function(x1,x2){return x1<x2;});break;case'<=':ret=this.compare(ctx,function(x1,x2){return x1<=x2;});break;case'>':ret=this.compare(ctx,function(x1,x2){return x1>x2;});break;case'>=':ret=this.compare(ctx,function(x1,x2){return x1>=x2;});break;default:alert('BinaryExpr.evaluate: '+this.op.value);}
return ret;};BinaryExpr.prototype.compare=function(ctx,cmp){var v1=this.expr1.evaluate(ctx);var v2=this.expr2.evaluate(ctx);var ret;if(v1.type=='node-set'&&v2.type=='node-set'){var n1=v1.nodeSetValue();var n2=v2.nodeSetValue();ret=false;for(var i1=0;i1<n1.length;++i1){for(var i2=0;i2<n2.length;++i2){if(cmp(xmlValue(n1[i1]),xmlValue(n2[i2]))){ret=true;i2=n2.length;i1=n1.length;}}}}else if(v1.type=='node-set'||v2.type=='node-set'){if(v1.type=='number'){var s=v1.numberValue();var n=v2.nodeSetValue();ret=false;for(var i=0;i<n.length;++i){var nn=xmlValue(n[i])-0;if(cmp(s,nn)){ret=true;break;}}}else if(v2.type=='number'){var n=v1.nodeSetValue();var s=v2.numberValue();ret=false;for(var i=0;i<n.length;++i){var nn=xmlValue(n[i])-0;if(cmp(nn,s)){ret=true;break;}}}else if(v1.type=='string'){var s=v1.stringValue();var n=v2.nodeSetValue();ret=false;for(var i=0;i<n.length;++i){var nn=xmlValue(n[i]);if(cmp(s,nn)){ret=true;break;}}}else if(v2.type=='string'){var n=v1.nodeSetValue();var s=v2.stringValue();ret=false;for(var i=0;i<n.length;++i){var nn=xmlValue(n[i]);if(cmp(nn,s)){ret=true;break;}}}else{ret=cmp(v1.booleanValue(),v2.booleanValue());}}else if(v1.type=='boolean'||v2.type=='boolean'){ret=cmp(v1.booleanValue(),v2.booleanValue());}else if(v1.type=='number'||v2.type=='number'){ret=cmp(v1.numberValue(),v2.numberValue());}else{ret=cmp(v1.stringValue(),v2.stringValue());}
return new BooleanValue(ret);}
function LiteralExpr(value){this.value=value;}
LiteralExpr.prototype.evaluate=function(ctx){return new StringValue(this.value);};function NumberExpr(value){this.value=value;}
NumberExpr.prototype.evaluate=function(ctx){return new NumberValue(this.value);};function VariableExpr(name){this.name=name;}
VariableExpr.prototype.evaluate=function(ctx){return ctx.getVariable(this.name);}
function makeTokenExpr(m){return new TokenExpr(m);}
function passExpr(e){return e;}
function makeLocationExpr1(slash,rel){rel.absolute=true;return rel;}
function makeLocationExpr2(dslash,rel){rel.absolute=true;rel.prependStep(makeAbbrevStep(dslash.value));return rel;}
function makeLocationExpr3(slash){var ret=new LocationExpr();ret.appendStep(makeAbbrevStep('.'));ret.absolute=true;return ret;}
function makeLocationExpr4(dslash){var ret=new LocationExpr();ret.absolute=true;ret.appendStep(makeAbbrevStep(dslash.value));return ret;}
function makeLocationExpr5(step){var ret=new LocationExpr();ret.appendStep(step);return ret;}
function makeLocationExpr6(rel,slash,step){rel.appendStep(step);return rel;}
function makeLocationExpr7(rel,dslash,step){rel.appendStep(makeAbbrevStep(dslash.value));return rel;}
function makeStepExpr1(dot){return makeAbbrevStep(dot.value);}
function makeStepExpr2(ddot){return makeAbbrevStep(ddot.value);}
function makeStepExpr3(axisname,axis,nodetest){return new StepExpr(axisname.value,nodetest);}
function makeStepExpr4(at,nodetest){return new StepExpr('attribute',nodetest);}
function makeStepExpr5(nodetest){return new StepExpr('child',nodetest);}
function makeStepExpr6(step,predicate){step.appendPredicate(predicate);return step;}
function makeAbbrevStep(abbrev){switch(abbrev){case'//':return new StepExpr('descendant-or-self',new NodeTestAny);case'.':return new StepExpr('self',new NodeTestAny);case'..':return new StepExpr('parent',new NodeTestAny);}}
function makeNodeTestExpr1(asterisk){return new NodeTestElement;}
function makeNodeTestExpr2(ncname,colon,asterisk){return new NodeTestNC(ncname.value);}
function makeNodeTestExpr3(qname){return new NodeTestName(qname.value);}
function makeNodeTestExpr4(typeo,parenc){var type=typeo.value.replace(/\s*\($/,'');switch(type){case'node':return new NodeTestAny;case'text':return new NodeTestText;case'comment':return new NodeTestComment;case'processing-instruction':return new NodeTestPI;}}
function makeNodeTestExpr5(typeo,target,parenc){var type=typeo.replace(/\s*\($/,'');if(type!='processing-instruction'){throw type+' '+Error().stack;}
return new NodeTestPI(target.value);}
function makePredicateExpr(pareno,expr,parenc){return new PredicateExpr(expr);}
function makePrimaryExpr(pareno,expr,parenc){return expr;}
function makeFunctionCallExpr1(name,pareno,parenc){return new FunctionCallExpr(name);}
function makeFunctionCallExpr2(name,pareno,arg1,args,parenc){var ret=new FunctionCallExpr(name);ret.appendArg(arg1);for(var i=0;i<args.length;++i){ret.appendArg(args[i]);}
return ret;}
function makeArgumentExpr(comma,expr){return expr;}
function makeUnionExpr(expr1,pipe,expr2){return new UnionExpr(expr1,expr2);}
function makePathExpr1(filter,slash,rel){return new PathExpr(filter,rel);}
function makePathExpr2(filter,dslash,rel){rel.prependStep(makeAbbrevStep(dslash.value));return new PathExpr(filter,rel);}
function makeFilterExpr(expr,predicates){if(predicates.length>0){return new FilterExpr(expr,predicates);}else{return expr;}}
function makeUnaryMinusExpr(minus,expr){return new UnaryMinusExpr(expr);}
function makeBinaryExpr(expr1,op,expr2){return new BinaryExpr(expr1,op,expr2);}
function makeLiteralExpr(token){var value=token.value.substring(1,token.value.length-1);return new LiteralExpr(value);}
function makeNumberExpr(token){return new NumberExpr(token.value);}
function makeVariableReference(dollar,name){return new VariableExpr(name.value);}
function makeSimpleExpr(expr){if(expr.charAt(0)=='$'){return new VariableExpr(expr.substr(1));}else if(expr.charAt(0)=='@'){var a=new NodeTestName(expr.substr(1));var b=new StepExpr('attribute',a);var c=new LocationExpr();c.appendStep(b);return c;}else if(expr.match(/^[0-9]+$/)){return new NumberExpr(expr);}else{var a=new NodeTestName(expr);var b=new StepExpr('child',a);var c=new LocationExpr();c.appendStep(b);return c;}}
function makeSimpleExpr2(expr){var steps=expr.split('/');var c=new LocationExpr();for(var i=0;i<steps.length;i++){var a=new NodeTestName(steps[i]);var b=new StepExpr('child',a);c.appendStep(b);}
return c;}
var xpathAxis={ANCESTOR_OR_SELF:'ancestor-or-self',ANCESTOR:'ancestor',ATTRIBUTE:'attribute',CHILD:'child',DESCENDANT_OR_SELF:'descendant-or-self',DESCENDANT:'descendant',FOLLOWING_SIBLING:'following-sibling',FOLLOWING:'following',NAMESPACE:'namespace',PARENT:'parent',PRECEDING_SIBLING:'preceding-sibling',PRECEDING:'preceding',SELF:'self'};var xpathAxesRe=[xpathAxis.ANCESTOR_OR_SELF,xpathAxis.ANCESTOR,xpathAxis.ATTRIBUTE,xpathAxis.CHILD,xpathAxis.DESCENDANT_OR_SELF,xpathAxis.DESCENDANT,xpathAxis.FOLLOWING_SIBLING,xpathAxis.FOLLOWING,xpathAxis.NAMESPACE,xpathAxis.PARENT,xpathAxis.PRECEDING_SIBLING,xpathAxis.PRECEDING,xpathAxis.SELF].join('|');var TOK_PIPE={label:"|",prec:17,re:new RegExp("^\\|")};var TOK_DSLASH={label:"//",prec:19,re:new RegExp("^//")};var TOK_SLASH={label:"/",prec:30,re:new RegExp("^/")};var TOK_AXIS={label:"::",prec:20,re:new RegExp("^::")};var TOK_COLON={label:":",prec:1000,re:new RegExp("^:")};var TOK_AXISNAME={label:"[axis]",re:new RegExp('^('+xpathAxesRe+')')};var TOK_PARENO={label:"(",prec:34,re:new RegExp("^\\(")};var TOK_PARENC={label:")",re:new RegExp("^\\)")};var TOK_DDOT={label:"..",prec:34,re:new RegExp("^\\.\\.")};var TOK_DOT={label:".",prec:34,re:new RegExp("^\\.")};var TOK_AT={label:"@",prec:34,re:new RegExp("^@")};var TOK_COMMA={label:",",re:new RegExp("^,")};var TOK_OR={label:"or",prec:10,re:new RegExp("^or\\b")};var TOK_AND={label:"and",prec:11,re:new RegExp("^and\\b")};var TOK_EQ={label:"=",prec:12,re:new RegExp("^=")};var TOK_NEQ={label:"!=",prec:12,re:new RegExp("^!=")};var TOK_GE={label:">=",prec:13,re:new RegExp("^>=")};var TOK_GT={label:">",prec:13,re:new RegExp("^>")};var TOK_LE={label:"<=",prec:13,re:new RegExp("^<=")};var TOK_LT={label:"<",prec:13,re:new RegExp("^<")};var TOK_PLUS={label:"+",prec:14,re:new RegExp("^\\+"),left:true};var TOK_MINUS={label:"-",prec:14,re:new RegExp("^\\-"),left:true};var TOK_DIV={label:"div",prec:15,re:new RegExp("^div\\b"),left:true};var TOK_MOD={label:"mod",prec:15,re:new RegExp("^mod\\b"),left:true};var TOK_BRACKO={label:"[",prec:32,re:new RegExp("^\\[")};var TOK_BRACKC={label:"]",re:new RegExp("^\\]")};var TOK_DOLLAR={label:"$",re:new RegExp("^\\$")};var TOK_NCNAME={label:"[ncname]",re:new RegExp('^[a-z][-\\w]*','i')};var TOK_ASTERISK={label:"*",prec:15,re:new RegExp("^\\*"),left:true};var TOK_LITERALQ={label:"[litq]",prec:20,re:new RegExp("^'[^\\']*'")};var TOK_LITERALQQ={label:"[litqq]",prec:20,re:new RegExp('^"[^\\"]*"')};var TOK_NUMBER={label:"[number]",prec:35,re:new RegExp('^\\d+(\\.\\d*)?')};var TOK_QNAME={label:"[qname]",re:new RegExp('^([a-z][-\\w]*:)?[a-z][-\\w]*','i')};var TOK_NODEO={label:"[nodetest-start]",re:new RegExp('^(processing-instruction|comment|text|node)\\(')};var xpathTokenRules=[TOK_DSLASH,TOK_SLASH,TOK_DDOT,TOK_DOT,TOK_AXIS,TOK_COLON,TOK_AXISNAME,TOK_NODEO,TOK_PARENO,TOK_PARENC,TOK_BRACKO,TOK_BRACKC,TOK_AT,TOK_COMMA,TOK_OR,TOK_AND,TOK_NEQ,TOK_EQ,TOK_GE,TOK_GT,TOK_LE,TOK_LT,TOK_PLUS,TOK_MINUS,TOK_ASTERISK,TOK_PIPE,TOK_MOD,TOK_DIV,TOK_LITERALQ,TOK_LITERALQQ,TOK_NUMBER,TOK_QNAME,TOK_NCNAME,TOK_DOLLAR];var XPathLocationPath={label:"LocationPath"};var XPathRelativeLocationPath={label:"RelativeLocationPath"};var XPathAbsoluteLocationPath={label:"AbsoluteLocationPath"};var XPathStep={label:"Step"};var XPathNodeTest={label:"NodeTest"};var XPathPredicate={label:"Predicate"};var XPathLiteral={label:"Literal"};var XPathExpr={label:"Expr"};var XPathPrimaryExpr={label:"PrimaryExpr"};var XPathVariableReference={label:"Variablereference"};var XPathNumber={label:"Number"};var XPathFunctionCall={label:"FunctionCall"};var XPathArgumentRemainder={label:"ArgumentRemainder"};var XPathPathExpr={label:"PathExpr"};var XPathUnionExpr={label:"UnionExpr"};var XPathFilterExpr={label:"FilterExpr"};var XPathDigits={label:"Digits"};var xpathNonTerminals=[XPathLocationPath,XPathRelativeLocationPath,XPathAbsoluteLocationPath,XPathStep,XPathNodeTest,XPathPredicate,XPathLiteral,XPathExpr,XPathPrimaryExpr,XPathVariableReference,XPathNumber,XPathFunctionCall,XPathArgumentRemainder,XPathPathExpr,XPathUnionExpr,XPathFilterExpr,XPathDigits];var Q_01={label:"?"};var Q_MM={label:"*"};var Q_1M={label:"+"};var ASSOC_LEFT=true;var xpathGrammarRules=[[XPathLocationPath,[XPathRelativeLocationPath],18,passExpr],[XPathLocationPath,[XPathAbsoluteLocationPath],18,passExpr],[XPathAbsoluteLocationPath,[TOK_SLASH,XPathRelativeLocationPath],18,makeLocationExpr1],[XPathAbsoluteLocationPath,[TOK_DSLASH,XPathRelativeLocationPath],18,makeLocationExpr2],[XPathAbsoluteLocationPath,[TOK_SLASH],0,makeLocationExpr3],[XPathAbsoluteLocationPath,[TOK_DSLASH],0,makeLocationExpr4],[XPathRelativeLocationPath,[XPathStep],31,makeLocationExpr5],[XPathRelativeLocationPath,[XPathRelativeLocationPath,TOK_SLASH,XPathStep],31,makeLocationExpr6],[XPathRelativeLocationPath,[XPathRelativeLocationPath,TOK_DSLASH,XPathStep],31,makeLocationExpr7],[XPathStep,[TOK_DOT],33,makeStepExpr1],[XPathStep,[TOK_DDOT],33,makeStepExpr2],[XPathStep,[TOK_AXISNAME,TOK_AXIS,XPathNodeTest],33,makeStepExpr3],[XPathStep,[TOK_AT,XPathNodeTest],33,makeStepExpr4],[XPathStep,[XPathNodeTest],33,makeStepExpr5],[XPathStep,[XPathStep,XPathPredicate],33,makeStepExpr6],[XPathNodeTest,[TOK_ASTERISK],33,makeNodeTestExpr1],[XPathNodeTest,[TOK_NCNAME,TOK_COLON,TOK_ASTERISK],33,makeNodeTestExpr2],[XPathNodeTest,[TOK_QNAME],33,makeNodeTestExpr3],[XPathNodeTest,[TOK_NODEO,TOK_PARENC],33,makeNodeTestExpr4],[XPathNodeTest,[TOK_NODEO,XPathLiteral,TOK_PARENC],33,makeNodeTestExpr5],[XPathPredicate,[TOK_BRACKO,XPathExpr,TOK_BRACKC],33,makePredicateExpr],[XPathPrimaryExpr,[XPathVariableReference],33,passExpr],[XPathPrimaryExpr,[TOK_PARENO,XPathExpr,TOK_PARENC],33,makePrimaryExpr],[XPathPrimaryExpr,[XPathLiteral],30,passExpr],[XPathPrimaryExpr,[XPathNumber],30,passExpr],[XPathPrimaryExpr,[XPathFunctionCall],30,passExpr],[XPathFunctionCall,[TOK_QNAME,TOK_PARENO,TOK_PARENC],-1,makeFunctionCallExpr1],[XPathFunctionCall,[TOK_QNAME,TOK_PARENO,XPathExpr,XPathArgumentRemainder,Q_MM,TOK_PARENC],-1,makeFunctionCallExpr2],[XPathArgumentRemainder,[TOK_COMMA,XPathExpr],-1,makeArgumentExpr],[XPathUnionExpr,[XPathPathExpr],20,passExpr],[XPathUnionExpr,[XPathUnionExpr,TOK_PIPE,XPathPathExpr],20,makeUnionExpr],[XPathPathExpr,[XPathLocationPath],20,passExpr],[XPathPathExpr,[XPathFilterExpr],19,passExpr],[XPathPathExpr,[XPathFilterExpr,TOK_SLASH,XPathRelativeLocationPath],20,makePathExpr1],[XPathPathExpr,[XPathFilterExpr,TOK_DSLASH,XPathRelativeLocationPath],20,makePathExpr2],[XPathFilterExpr,[XPathPrimaryExpr,XPathPredicate,Q_MM],20,makeFilterExpr],[XPathExpr,[XPathPrimaryExpr],16,passExpr],[XPathExpr,[XPathUnionExpr],16,passExpr],[XPathExpr,[TOK_MINUS,XPathExpr],-1,makeUnaryMinusExpr],[XPathExpr,[XPathExpr,TOK_OR,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_AND,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_EQ,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_NEQ,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_LT,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_LE,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_GT,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_GE,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_PLUS,XPathExpr],-1,makeBinaryExpr,ASSOC_LEFT],[XPathExpr,[XPathExpr,TOK_MINUS,XPathExpr],-1,makeBinaryExpr,ASSOC_LEFT],[XPathExpr,[XPathExpr,TOK_ASTERISK,XPathExpr],-1,makeBinaryExpr,ASSOC_LEFT],[XPathExpr,[XPathExpr,TOK_DIV,XPathExpr],-1,makeBinaryExpr,ASSOC_LEFT],[XPathExpr,[XPathExpr,TOK_MOD,XPathExpr],-1,makeBinaryExpr,ASSOC_LEFT],[XPathLiteral,[TOK_LITERALQ],-1,makeLiteralExpr],[XPathLiteral,[TOK_LITERALQQ],-1,makeLiteralExpr],[XPathNumber,[TOK_NUMBER],-1,makeNumberExpr],[XPathVariableReference,[TOK_DOLLAR,TOK_QNAME],200,makeVariableReference]];var xpathRules=[];function xpathParseInit(){if(xpathRules.length){return;}
xpathGrammarRules.sort(function(a,b){var la=a[1].length;var lb=b[1].length;if(la<lb){return 1;}else if(la>lb){return-1;}else{return 0;}});var k=1;for(var i=0;i<xpathNonTerminals.length;++i){xpathNonTerminals[i].key=k++;}
for(i=0;i<xpathTokenRules.length;++i){xpathTokenRules[i].key=k++;}
if(xpathdebug)
Log.write('XPath parse INIT: '+k+' rules');function push_(array,position,element){if(!array[position]){array[position]=[];}
array[position].push(element);}
for(i=0;i<xpathGrammarRules.length;++i){var rule=xpathGrammarRules[i];var pattern=rule[1];for(var j=pattern.length-1;j>=0;--j){if(pattern[j]==Q_1M){push_(xpathRules,pattern[j-1].key,rule);break;}else if(pattern[j]==Q_MM||pattern[j]==Q_01){push_(xpathRules,pattern[j-1].key,rule);--j;}else{push_(xpathRules,pattern[j].key,rule);break;}}}
if(xpathdebug)
Log.write('XPath parse INIT: '+xpathRules.length+' rule bins');var sum=0;mapExec(xpathRules,function(i){if(i){sum+=i.length;}});if(xpathdebug)
Log.write('XPath parse INIT: '+(sum/xpathRules.length)+' average bin size');}
function xpathCollectDescendants(nodelist,node){for(var n=node.firstChild;n;n=n.nextSibling){nodelist.push(n);arguments.callee(nodelist,n);}}
function xpathCollectDescendantsReverse(nodelist,node){for(var n=node.lastChild;n;n=n.previousSibling){nodelist.push(n);arguments.callee(nodelist,n);}}
function xpathDomEval(expr,node){var expr1=xpathParse(expr);var ret=expr1.evaluate(new ExprContext(node));return ret;}
function xpathSort(input,sort){if(sort.length==0){return;}
var sortlist=[];for(var i=0;i<input.nodelist.length;++i){var node=input.nodelist[i];var sortitem={node:node,key:[]};var context=input.clone(node,0,[node]);for(var j=0;j<sort.length;++j){var s=sort[j];var value=s.expr.evaluate(context);var evalue;if(s.type=='text'){evalue=value.stringValue();}else if(s.type=='number'){evalue=value.numberValue();}
sortitem.key.push({value:evalue,order:s.order});}
sortitem.key.push({value:i,order:'ascending'});sortlist.push(sortitem);}
sortlist.sort(xpathSortByKey);var nodes=[];for(var i=0;i<sortlist.length;++i){nodes.push(sortlist[i].node);}
input.nodelist=nodes;input.setNode(nodes[0],0);}
function xpathSortByKey(v1,v2){for(var i=0;i<v1.key.length;++i){var o=v1.key[i].order=='descending'?-1:1;if(v1.key[i].value>v2.key[i].value){return+1*o;}else if(v1.key[i].value<v2.key[i].value){return-1*o;}}
return 0;}
function el(i){return document.getElementById(i);}
function px(x){return x+'px';}
function stringSplit(s,c){var a=s.indexOf(c);if(a==-1){return[s];}
var parts=[];parts.push(s.substr(0,a));while(a!=-1){var a1=s.indexOf(c,a+1);if(a1!=-1){parts.push(s.substr(a+1,a1-a-1));}else{parts.push(s.substr(a+1));}
a=a1;}
return parts;}
function xmlValue(node){if(!node){return'';}
var ret='';if(node.nodeType==DOM_TEXT_NODE||node.nodeType==DOM_CDATA_SECTION_NODE||node.nodeType==DOM_ATTRIBUTE_NODE){ret+=node.nodeValue;}else if(node.nodeType==DOM_ELEMENT_NODE||node.nodeType==DOM_DOCUMENT_NODE||node.nodeType==DOM_DOCUMENT_FRAGMENT_NODE){for(var i=0;i<node.childNodes.length;++i){ret+=arguments.callee(node.childNodes[i]);}}
return ret;}
function xmlText(node){var ret='';if(node.nodeType==DOM_TEXT_NODE){ret+=xmlEscapeText(node.nodeValue);}else if(node.nodeType==DOM_ELEMENT_NODE){ret+='<'+node.nodeName;for(var i=0;i<node.attributes.length;++i){var a=node.attributes[i];if(a&&a.nodeName&&a.nodeValue){ret+=' '+a.nodeName;ret+='="'+xmlEscapeAttr(a.nodeValue)+'"';}}
if(node.childNodes.length==0){ret+='/>';}else{ret+='>';for(var i=0;i<node.childNodes.length;++i){ret+=arguments.callee(node.childNodes[i]);}
ret+='</'+node.nodeName+'>';}}else if(node.nodeType==DOM_DOCUMENT_NODE||node.nodeType==DOM_DOCUMENT_FRAGMENT_NODE){for(var i=0;i<node.childNodes.length;++i){ret+=arguments.callee(node.childNodes[i]);}}
return ret;}
function mapExec(array,func){for(var i=0;i<array.length;++i){func(array[i]);}}
function mapExpr(array,func){var ret=[];for(var i=0;i<array.length;++i){ret.push(func(array[i]));}
return ret;};function reverseInplace(array){for(var i=0;i<array.length/2;++i){var h=array[i];var ii=array.length-i-1;array[i]=array[ii];array[ii]=h;}}
function copyArray(dst,src){for(var i=0;i<src.length;++i){dst.push(src[i]);}}
function assert(b){if(!b){throw'assertion failed';}}
var DOM_ELEMENT_NODE=1;var DOM_ATTRIBUTE_NODE=2;var DOM_TEXT_NODE=3;var DOM_CDATA_SECTION_NODE=4;var DOM_ENTITY_REFERENCE_NODE=5;var DOM_ENTITY_NODE=6;var DOM_PROCESSING_INSTRUCTION_NODE=7;var DOM_COMMENT_NODE=8;var DOM_DOCUMENT_NODE=9;var DOM_DOCUMENT_TYPE_NODE=10;var DOM_DOCUMENT_FRAGMENT_NODE=11;var DOM_NOTATION_NODE=12;var xpathdebug=false;var xsltdebug=false;function xmlEscapeText(s){return s.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');}
function xmlEscapeAttr(s){return xmlEscapeText(s).replace(/\"/g,'&quot;');}
function xmlEscapeTags(s){return s.replace(/</g,'&lt;').replace(/>/g,'&gt;');}
var logging__=true;function Log(){};Log.lines=[];Log.write=function(s){if(logging__){this.lines.push(xmlEscapeText(s));this.show();}};Log.writeXML=function(xml){if(logging__){var s0=xml.replace(/</g,'\n<');var s1=xmlEscapeText(s0);var s2=s1.replace(/\s*\n(\s|\n)*/g,'<br/>');this.lines.push(s2);this.show();}}
Log.writeRaw=function(s){if(logging__){this.lines.push(s);this.show();}}
Log.clear=function(){if(logging__){var l=this.div();l.innerHTML='';this.lines=[];}}
Log.show=function(){var l=this.div();l.innerHTML+=this.lines.join('<br/>')+'<br/>';this.lines=[];l.scrollTop=l.scrollHeight;}
Log.div=function(){var l=document.getElementById('log');if(!l){l=document.createElement('div');l.id='log';l.style.position='absolute';l.style.right='5px';l.style.top='5px';l.style.width='250px';l.style.height='150px';l.style.overflow='auto';l.style.backgroundColor='#f0f0f0';l.style.border='1px solid gray';l.style.fontSize='10px';l.style.padding='5px';document.body.appendChild(l);}
return l;}
function Timer(){}
Timer.start=function(){}
Timer.end=function(){}
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(element)
{this.element=element;this.currentEffect=-1;this.effectArray=new Array();};this.AnimatedElement=_AnimatedElement;};Spry.Effect.Registry.prototype.getRegisteredEffect=function(element,effect)
{var eleIdx=this.getIndexOfElement(element);if(eleIdx==-1)
{this.elements[this.elements.length]=new this.AnimatedElement(element);eleIdx=this.elements.length-1;}
var foundEffectArrayIdx=-1;for(var i=0;i<this.elements[eleIdx].effectArray.length;i++)
{if(this.elements[eleIdx].effectArray[i])
{if(this.effectsAreTheSame(this.elements[eleIdx].effectArray[i],effect))
{foundEffectArrayIdx=i;if(this.elements[eleIdx].effectArray[i].isRunning==true){this.elements[eleIdx].effectArray[i].cancel();}
this.elements[eleIdx].currentEffect=i;if(this.elements[eleIdx].effectArray[i].options&&(this.elements[eleIdx].effectArray[i].options.toggle!=null)){if(this.elements[eleIdx].effectArray[i].options.toggle==true)
this.elements[eleIdx].effectArray[i].doToggle();}else{this.elements[eleIdx].effectArray[i]=effect;}
break;}}}
if(foundEffectArrayIdx==-1)
{var currEffectIdx=this.elements[eleIdx].effectArray.length;this.elements[eleIdx].effectArray[currEffectIdx]=effect;this.elements[eleIdx].currentEffect=currEffectIdx;}
var idx=this.elements[eleIdx].currentEffect;return this.elements[eleIdx].effectArray[idx];}
Spry.Effect.Registry.prototype.getIndexOfElement=function(element)
{var registryIndex=-1;for(var i=0;i<this.elements.length;i++)
{if(this.elements[i]){if(this.elements[i].element==element)
registryIndex=i;}}
return registryIndex;}
Spry.Effect.Registry.prototype.effectsAreTheSame=function(effectA,effectB)
{if(effectA.name!=effectB.name)
return false;if(effectA.effectsArray!=null)
{for(var i=0;i<effectA.effectsArray.length;i++)
{if(!Spry.Effect.Utils.optionsAreIdentical(effectA.effectsArray[i].effect.options,effectB.effectsArray[i].effect.options))
return false;}}
else
{if(!Spry.Effect.Utils.optionsAreIdentical(effectA.options,effectB.options))
return false;}
return true;}
var SpryRegistry=new Spry.Effect.Registry;if(!Spry.Effect.Utils)Spry.Effect.Utils={};Spry.Effect.Utils.showError=function(msg)
{alert('Spry.Effect ERR: '+msg);}
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(integerNum)
{var result=integerNum.toString(16);if(result.length==1)
result="0"+result;return result;}
Spry.Effect.Utils.hexToInt=function(hexStr)
{return parseInt(hexStr,16);}
Spry.Effect.Utils.rgb=function(redInt,greenInt,blueInt)
{var redHex=Spry.Effect.Utils.intToHex(redInt);var greenHex=Spry.Effect.Utils.intToHex(greenInt);var blueHex=Spry.Effect.Utils.intToHex(blueInt);compositeColorHex=redHex.concat(greenHex,blueHex);compositeColorHex='#'+compositeColorHex;return compositeColorHex;}
Spry.Effect.Utils.camelize=function(stringToCamelize)
{var oStringList=stringToCamelize.split('-');var isFirstEntry=true;var camelizedString='';for(var i=0;i<oStringList.length;i++)
{if(oStringList[i].length>0)
{if(isFirstEntry)
{camelizedString=oStringList[i];isFirstEntry=false;}
else
{var s=oStringList[i];camelizedString+=s.charAt(0).toUpperCase()+s.substring(1);}}}
return camelizedString;}
Spry.Effect.Utils.isPercentValue=function(value)
{var result=false;try
{if(value.lastIndexOf("%")>0)
result=true;}
catch(e){}
return result;}
Spry.Effect.Utils.getPercentValue=function(value)
{var result=0;try
{result=Number(value.substring(0,value.lastIndexOf("%")));}
catch(e){Spry.Effect.Utils.showError('Spry.Effect.Utils.getPercentValue: '+e);}
return result;}
Spry.Effect.Utils.getPixelValue=function(value)
{var result=0;try
{result=Number(value.substring(0,value.lastIndexOf("px")));}
catch(e){}
return result;}
Spry.Effect.Utils.getFirstChildElement=function(node)
{if(node)
{var childCurr=node.firstChild;while(childCurr)
{if(childCurr.nodeType==1)
return childCurr;childCurr=childCurr.nextSibling;}}
return null;};Spry.Effect.Utils.fetchChildImages=function(startEltIn,targetImagesOut)
{if(!startEltIn||startEltIn.nodeType!=1||!targetImagesOut)
return;if(startEltIn.hasChildNodes())
{var childImages=startEltIn.getElementsByTagName('img')
var imageCnt=childImages.length;for(var i=0;i<imageCnt;i++)
{var imgCurr=childImages[i];var dimensionsCurr=Spry.Effect.getDimensions(imgCurr);targetImagesOut.push([imgCurr,dimensionsCurr.width,dimensionsCurr.height]);}}}
Spry.Effect.Utils.optionsAreIdentical=function(optionsA,optionsB)
{if(optionsA==null&&optionsB==null)
return true;if(optionsA!=null&&optionsB!=null)
{var objectCountA=0;var objectCountB=0;for(var propA in optionsA)objectCountA++;for(var propB in optionsB)objectCountB++;if(objectCountA!=objectCountB)
return false;for(var prop in optionsA)
{if(optionsA[prop]===undefined)
{if(optionsB[prop]!==undefined)
return false;}
else if((optionsB[prop]===undefined)||(optionsA[prop]!=optionsB[prop]))
{return false;}}
return true;}
return false;}
Spry.Effect.getElement=function(ele)
{var element=null;if(ele&&typeof ele=="string")
element=document.getElementById(ele);else
element=ele;if(element==null)Spry.Effect.Utils.showError('Element "'+ele+'" not found.');return element;}
Spry.Effect.getStyleProp=function(element,prop)
{var value;try
{value=element.style[Spry.Effect.Utils.camelize(prop)];if(!value)
{if(element.currentStyle){value=element.currentStyle[Spry.Effect.Utils.camelize(prop)];}}}
catch(e){Spry.Effect.Utils.showError('Spry.Effect.getStyleProp: '+e);}
return value=='auto'?null:value;};Spry.Effect.getStylePropRegardlessOfDisplayState=function(element,prop,displayElement)
{var refElement=displayElement?displayElement:element;var displayOrig=Spry.Effect.getStyleProp(refElement,'display');var visibilityOrig=Spry.Effect.getStyleProp(refElement,'visibility');if(displayOrig=='none')
{Spry.Effect.setStyleProp(refElement,'visibility','hidden');Spry.Effect.setStyleProp(refElement,'display','block');if(window.opera)
refElement.focus();}
var styleProp=Spry.Effect.getStyleProp(element,prop);if(displayOrig=='none')
{Spry.Effect.setStyleProp(refElement,'display','none');Spry.Effect.setStyleProp(refElement,'visibility',visibilityOrig);}
return styleProp;};Spry.Effect.setStyleProp=function(element,prop,value)
{try
{element.style[Spry.Effect.Utils.camelize(prop)]=value;}
catch(e){Spry.Effect.Utils.showError('Spry.Effect.setStyleProp: '+e);}
return null;};Spry.Effect.makePositioned=function(element)
{var pos=Spry.Effect.getStyleProp(element,'position');if(!pos||pos=='static'){element.style.position='relative';if(window.opera){element.style.top=0;element.style.left=0;}}}
Spry.Effect.isInvisible=function(element)
{var propDisplay=Spry.Effect.getStyleProp(element,'display');if(propDisplay&&propDisplay.toLowerCase()=='none')
return true;var propVisible=Spry.Effect.getStyleProp(element,'visibility');if(propVisible&&propVisible.toLowerCase()=='hidden')
return true;return false;}
Spry.Effect.enforceVisible=function(element)
{var propDisplay=Spry.Effect.getStyleProp(element,'display');if(propDisplay&&propDisplay.toLowerCase()=='none')
Spry.Effect.setStyleProp(element,'display','block');var propVisible=Spry.Effect.getStyleProp(element,'visibility');if(propVisible&&propVisible.toLowerCase()=='hidden')
Spry.Effect.setStyleProp(element,'visibility','visible');}
Spry.Effect.makeClipping=function(element)
{var overflow=Spry.Effect.getStyleProp(element,'overflow');if(overflow!='hidden'&&overflow!='scroll')
{var heightCache=0;var needsCache=/MSIE 7.0/.test(navigator.userAgent)&&/Windows NT/.test(navigator.userAgent);if(needsCache)
heightCache=Spry.Effect.getDimensionsRegardlessOfDisplayState(element).height;Spry.Effect.setStyleProp(element,'overflow','hidden');if(needsCache)
Spry.Effect.setStyleProp(element,'height',heightCache+'px');}}
Spry.Effect.cleanWhitespace=function(element)
{var childCountInit=element.childNodes.length;for(var i=childCountInit-1;i>=0;i--){var node=element.childNodes[i];if(node.nodeType==3&&!/\S/.test(node.nodeValue))
{try
{element.removeChild(node);}
catch(e){Spry.Effect.Utils.showError('Spry.Effect.cleanWhitespace: '+e);}}}}
Spry.Effect.getComputedStyle=function(element)
{var computedStyle=/MSIE/.test(navigator.userAgent)?element.currentStyle:document.defaultView.getComputedStyle(element,null);return computedStyle;}
Spry.Effect.getDimensions=function(element)
{var dimensions=new Spry.Effect.Utils.Rectangle;var computedStyle=null;if(element.style.width&&/px/i.test(element.style.width))
{dimensions.width=parseInt(element.style.width);}
else
{computedStyle=Spry.Effect.getComputedStyle(element);var tryComputedStyle=computedStyle&&computedStyle.width&&/px/i.test(computedStyle.width);if(tryComputedStyle)
dimensions.width=parseInt(computedStyle.width);if(!tryComputedStyle||dimensions.width==0)
dimensions.width=element.offsetWidth;}
if(element.style.height&&/px/i.test(element.style.height))
{dimensions.height=parseInt(element.style.height);}
else
{if(!computedStyle)
computedStyle=Spry.Effect.getComputedStyle(element);var tryComputedStyle=computedStyle&&computedStyle.height&&/px/i.test(computedStyle.height);if(tryComputedStyle)
dimensions.height=parseInt(computedStyle.height);if(!tryComputedStyle||dimensions.height==0)
dimensions.height=element.offsetHeight;}
return dimensions;}
Spry.Effect.getDimensionsRegardlessOfDisplayState=function(element,displayElement)
{var refElement=displayElement?displayElement:element;var displayOrig=Spry.Effect.getStyleProp(refElement,'display');var visibilityOrig=Spry.Effect.getStyleProp(refElement,'visibility');if(displayOrig=='none')
{Spry.Effect.setStyleProp(refElement,'visibility','hidden');Spry.Effect.setStyleProp(refElement,'display','block');if(window.opera)
refElement.focus();}
var dimensions=Spry.Effect.getDimensions(element);if(displayOrig=='none')
{Spry.Effect.setStyleProp(refElement,'display','none');Spry.Effect.setStyleProp(refElement,'visibility',visibilityOrig);}
return dimensions;}
Spry.Effect.getOpacity=function(element)
{var o=Spry.Effect.getStyleProp(element,"opacity");if(o==undefined||o==null)
o=1.0;return o;}
Spry.Effect.getColor=function(element)
{var c=Spry.Effect.getStyleProp(ele,"background-color");return c;}
Spry.Effect.getPosition=function(element)
{var position=new Spry.Effect.Utils.Position;var computedStyle=null;if(element.style.left&&/px/i.test(element.style.left))
{position.x=parseInt(element.style.left);}
else
{computedStyle=Spry.Effect.getComputedStyle(element);var tryComputedStyle=computedStyle&&computedStyle.left&&/px/i.test(computedStyle.left);if(tryComputedStyle)
position.x=parseInt(computedStyle.left);if(!tryComputedStyle||position.x==0)
position.x=element.offsetLeft;}
if(element.style.top&&/px/i.test(element.style.top))
{position.y=parseInt(element.style.top);}
else
{if(!computedStyle)
computedStyle=Spry.Effect.getComputedStyle(element);var tryComputedStyle=computedStyle&&computedStyle.top&&/px/i.test(computedStyle.top);if(tryComputedStyle)
position.y=parseInt(computedStyle.top);if(!tryComputedStyle||position.y==0)
position.y=element.offsetTop;}
return position;}
Spry.Effect.getOffsetPosition=Spry.Effect.getPosition;Spry.Effect.Animator=function(options)
{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(options);};Spry.Effect.Animator.prototype.setOptions=function(options)
{if(!options)
return;for(var prop in options)
this.options[prop]=options[prop];};Spry.Effect.Animator.prototype.start=function(withoutTimer)
{if(arguments.length==0)
withoutTimer=false;var self=this;if(this.options.setup)
{try
{this.options.setup(this.element,this);}
catch(e){Spry.Effect.Utils.showError('Spry.Effect.Animator.prototype.start: setup callback: '+e);}}
this.prepareStart();var currDate=new Date();this.startMilliseconds=currDate.getTime();if(withoutTimer==false){this.timer=setInterval(function(){self.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(e){Spry.Effect.Utils.showError('Spry.Effect.Animator.prototype.stop: finish callback: '+e);}}
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 isRunning=true;var position=this.getElapsedMilliseconds()/this.options.duration;if(this.getElapsedMilliseconds()>this.options.duration){position=1.0;}else{if(this.options.transition==Spry.sinusoidalTransition)
{position=(-Math.cos(position*Math.PI)/2)+0.5;}
else if(this.options.transition==Spry.linearTransition)
{}
else
{Spry.Effect.Utils.showError('unknown transition');}}
this.animate(position);if(this.getElapsedMilliseconds()>this.options.duration){this.stop();isRunning=false;}
return isRunning;};Spry.Effect.Animator.prototype.getElapsedMilliseconds=function()
{if(this.startMilliseconds>0){var currDate=new Date();return(currDate.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(position){};Spry.Effect.Move=function(element,fromPos,toPos,options)
{this.dynamicFromPos=false;if(arguments.length==3)
{options=toPos;toPos=fromPos;fromPos=Spry.Effect.getPosition(element);this.dynamicFromPos=true;}
Spry.Effect.Animator.call(this,options);this.name='Move';this.element=Spry.Effect.getElement(element);if(fromPos.units!=toPos.units)
Spry.Effect.Utils.showError('Spry.Effect.Move: Conflicting units ('+fromPos.units+', '+toPos.units+')');this.units=fromPos.units;this.startX=fromPos.x;this.stopX=toPos.x;this.startY=fromPos.y;this.stopY=toPos.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(position)
{var left=0;var top=0;if(this.direction==Spry.forwards){left=this.startX-(this.rangeMoveX*position);top=this.startY-(this.rangeMoveY*position);}else if(this.direction==Spry.backwards){left=this.rangeMoveX*position+this.stopX;top=this.rangeMoveY*position+this.stopY;}
this.element.style.left=left+this.units;this.element.style.top=top+this.units;};Spry.Effect.Move.prototype.prepareStart=function()
{if(this.dynamicFromPos==true)
{var fromPos=Spry.Effect.getPosition(this.element);this.startX=fromPos.x;this.startY=fromPos.y;this.rangeMoveX=this.startX-this.stopX;this.rangeMoveY=this.startY-this.stopY;}};Spry.Effect.MoveSlide=function(element,fromPos,toPos,horizontal,options)
{this.dynamicFromPos=false;if(arguments.length==4)
{options=horizontal;horizontal=toPos;toPos=fromPos;fromPos=Spry.Effect.getPosition(element);this.dynamicFromPos=true;}
Spry.Effect.Animator.call(this,options);this.name='MoveSlide';this.element=Spry.Effect.getElement(element);this.horizontal=horizontal;this.firstChildElement=Spry.Effect.Utils.getFirstChildElement(element);this.overflow=Spry.Effect.getStyleProp(this.element,'overflow');this.originalChildRect=Spry.Effect.getDimensionsRegardlessOfDisplayState(this.firstChildElement,this.element);if(fromPos.units!=toPos.units)
Spry.Effect.Utils.showError('Spry.Effect.MoveSlide: Conflicting units ('+fromPos.units+', '+toPos.units+')');this.units=fromPos.units;var originalRect=Spry.Effect.getDimensionsRegardlessOfDisplayState(element);this.startHeight=originalRect.height;this.startX=Number(fromPos.x);this.stopX=Number(toPos.x);this.startY=Number(fromPos.y);this.stopY=Number(toPos.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(position)
{if(this.horizontal)
{var xStart=(this.direction==Spry.forwards)?this.startX:this.stopX;var xStop=(this.direction==Spry.forwards)?this.stopX:this.startX;var eltWidth=xStart+position*(xStop-xStart);if(eltWidth<0)eltWidth=0;if(this.overflow!='scroll'||eltWidth>this.originalChildRect.width)
this.firstChildElement.style.left=eltWidth-this.originalChildRect.width+this.units;this.element.style.width=eltWidth+this.units;}
else
{var yStart=(this.direction==Spry.forwards)?this.startY:this.stopY;var yStop=(this.direction==Spry.forwards)?this.stopY:this.startY;var eltHeight=yStart+position*(yStop-yStart);if(eltHeight<0)eltHeight=0;if(this.overflow!='scroll'||eltHeight>this.originalChildRect.height)
this.firstChildElement.style.top=eltHeight-this.originalChildRect.height+this.units;this.element.style.height=eltHeight+this.units;}
if(this.enforceVisible)
{Spry.Effect.enforceVisible(this.element);this.enforceVisible=false;}};Spry.Effect.MoveSlide.prototype.prepareStart=function()
{if(this.dynamicFromPos==true)
{var fromPos=Spry.Effect.getPosition(this.element);this.startX=fromPos.x;this.startY=fromPos.y;this.rangeMoveX=this.startX-this.stopX;this.rangeMoveY=this.startY-this.stopY;}};Spry.Effect.Size=function(element,fromRect,toRect,options)
{this.dynamicFromRect=false;if(arguments.length==3)
{options=toRect;toRect=fromRect;fromRect=Spry.Effect.getDimensionsRegardlessOfDisplayState(element);this.dynamicFromRect=true;}
Spry.Effect.Animator.call(this,options);this.name='Size';this.element=Spry.Effect.getElement(element);if(fromRect.units!=toRect.units)
Spry.Effect.Utils.showError('Spry.Effect.Size: Conflicting units ('+fromRect.units+', '+toRect.units+')');this.units=fromRect.units;var originalRect=Spry.Effect.getDimensionsRegardlessOfDisplayState(element);this.originalWidth=originalRect.width;this.startWidth=fromRect.width;this.startHeight=fromRect.height;this.stopWidth=toRect.width;this.stopHeight=toRect.height;this.childImages=new Array();if(this.options.scaleContent)
Spry.Effect.Utils.fetchChildImages(element,this.childImages);this.fontFactor=1.0;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 startWidthPercent=Spry.Effect.Utils.getPercentValue(this.startWidth);this.startWidth=originalRect.width*(startWidthPercent/100);}
if(Spry.Effect.Utils.isPercentValue(this.startHeight))
{var startHeightPercent=Spry.Effect.Utils.getPercentValue(this.startHeight);this.startHeight=originalRect.height*(startHeightPercent/100);}
if(Spry.Effect.Utils.isPercentValue(this.stopWidth))
{var stopWidthPercent=Spry.Effect.Utils.getPercentValue(this.stopWidth);var originalRect=Spry.Effect.getDimensionsRegardlessOfDisplayState(element);this.stopWidth=originalRect.width*(stopWidthPercent/100);}
if(Spry.Effect.Utils.isPercentValue(this.stopHeight))
{var stopHeightPercent=Spry.Effect.Utils.getPercentValue(this.stopHeight);var originalRect=Spry.Effect.getDimensionsRegardlessOfDisplayState(element);this.stopHeight=originalRect.height*(stopHeightPercent/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(position)
{var width=0;var height=0;var fontSize=0;if(this.direction==Spry.forwards){width=this.startWidth-(this.widthRange*position);height=this.startHeight-(this.heightRange*position);fontSize=this.fontFactor*(this.startWidth+position*(this.stopWidth-this.startWidth))/this.originalWidth;}else if(this.direction==Spry.backwards){width=this.widthRange*position+this.stopWidth;height=this.heightRange*position+this.stopHeight;fontSize=this.fontFactor*(this.stopWidth+position*(this.startWidth-this.stopWidth))/this.originalWidth;}
if(this.options.scaleContent==true)
this.element.style.fontSize=fontSize+'em';this.element.style.width=width+this.units;this.element.style.height=height+this.units;if(this.options.scaleContent)
{var propFactor=(this.direction==Spry.forwards)?(this.startWidth+position*(this.stopWidth-this.startWidth))/this.originalWidth:(this.stopWidth+position*(this.startWidth-this.stopWidth))/this.originalWidth;for(var i=0;i<this.childImages.length;i++)
{this.childImages[i][0].style.width=propFactor*this.childImages[i][1]+this.units;this.childImages[i][0].style.height=propFactor*this.childImages[i][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 fromRect=Spry.Effect.getDimensions(element);this.startWidth=fromRect.width;this.startHeight=fromRect.height;this.widthRange=this.startWidth-this.stopWidth;this.heightRange=this.startHeight-this.stopHeight;}};Spry.Effect.Opacity=function(element,startOpacity,stopOpacity,options)
{this.dynamicStartOpacity=false;if(arguments.length==3)
{options=stopOpacity;stopOpacity=startOpacity;startOpacity=Spry.Effect.getOpacity(element);this.dynamicStartOpacity=true;}
Spry.Effect.Animator.call(this,options);this.name='Opacity';this.element=Spry.Effect.getElement(element);if(/MSIE/.test(navigator.userAgent)&&(!this.element.hasLayout))
Spry.Effect.setStyleProp(this.element,'zoom','1');this.startOpacity=startOpacity;this.stopOpacity=stopOpacity;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(position)
{var opacity=0;if(this.direction==Spry.forwards){opacity=this.startOpacity-(this.opacityRange*position);}else if(this.direction==Spry.backwards){opacity=this.opacityRange*position+this.stopOpacity;}
this.element.style.opacity=opacity;this.element.style.filter="alpha(opacity="+Math.floor(opacity*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(element,startColor,stopColor,options)
{this.dynamicStartColor=false;if(arguments.length==3)
{options=stopColor;stopColor=startColor;startColor=Spry.Effect.getColor(element);this.dynamicStartColor=true;}
Spry.Effect.Animator.call(this,options);this.name='Color';this.element=Spry.Effect.getElement(element);this.startColor=startColor;this.stopColor=stopColor;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.stopRedColor=Spry.Effect.Utils.hexToInt(stopColor.substr(1,2));this.stopGreenColor=Spry.Effect.Utils.hexToInt(stopColor.substr(3,2));this.stopBlueColor=Spry.Effect.Utils.hexToInt(stopColor.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(position)
{var redColor=0;var greenColor=0;var blueColor=0;if(this.direction==Spry.forwards){redColor=parseInt(this.startRedColor-(this.redColorRange*position));greenColor=parseInt(this.startGreenColor-(this.greenColorRange*position));blueColor=parseInt(this.startBlueColor-(this.blueColorRange*position));}else if(this.direction==Spry.backwards){redColor=parseInt(this.redColorRange*position)+this.stopRedColor;greenColor=parseInt(this.greenColorRange*position)+this.stopGreenColor;blueColor=parseInt(this.blueColorRange*position)+this.stopBlueColor;}
this.element.style.backgroundColor=Spry.Effect.Utils.rgb(redColor,greenColor,blueColor);};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(options)
{Spry.Effect.Animator.call(this,options);this.name='Cluster';this.effectsArray=new Array();this.currIdx=-1;_ClusteredEffect=function(effect,kind)
{this.effect=effect;this.kind=kind;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 isRunning=true;var allEffectsDidRun=false;if(this.currIdx==-1)
this.initNextEffectsRunning();var baseEffectIsStillRunning=false;var evalNextEffectsRunning=false
for(var i=0;i<this.effectsArray.length;i++)
{if(this.effectsArray[i].isRunning==true)
{baseEffectIsStillRunning=this.effectsArray[i].effect.drawEffect();if(baseEffectIsStillRunning==false&&i==this.currIdx)
{evalNextEffectsRunning=true;}}}
if(evalNextEffectsRunning==true)
{allEffectsDidRun=this.initNextEffectsRunning();}
if(allEffectsDidRun==true){this.stop();isRunning=false;for(var i=0;i<this.effectsArray.length;i++)
{this.effectsArray[i].isRunning=false;}
this.currIdx=-1;}
return isRunning;};Spry.Effect.Cluster.prototype.initNextEffectsRunning=function()
{var allEffectsDidRun=false;this.currIdx++;if(this.currIdx>(this.effectsArray.length-1))
{allEffectsDidRun=true;}
else
{for(var i=this.currIdx;i<this.effectsArray.length;i++)
{if((i>this.currIdx)&&this.effectsArray[i].kind=="queue")
break;this.effectsArray[i].effect.start(true);this.effectsArray[i].isRunning=true;this.currIdx=i;};}
return allEffectsDidRun;};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 i=0;i<this.effectsArray.length;i++)
{if(this.effectsArray[i].effect.options&&(this.effectsArray[i].effect.options.toggle!=null)){if(this.effectsArray[i].effect.options.toggle==true)
{this.effectsArray[i].effect.doToggle();}}}};Spry.Effect.Cluster.prototype.cancel=function()
{for(var i=0;i<this.effectsArray.length;i++)
{this.effectsArray[i].effect.cancel();}
if(this.timer){clearInterval(this.timer);this.timer=null;}
this.isRunning=false;};Spry.Effect.Cluster.prototype.addNextEffect=function(effect)
{this.effectsArray[this.effectsArray.length]=new this.ClusteredEffect(effect,"queue");if(this.effectsArray.length==1){this.element=effect.element;}};Spry.Effect.Cluster.prototype.addParallelEffect=function(effect)
{this.effectsArray[this.effectsArray.length]=new this.ClusteredEffect(effect,"parallel");if(this.effectsArray.length==1){this.element=effect.element;}};Spry.Effect.AppearFade=function(element,options)
{var element=Spry.Effect.getElement(element);var durationInMilliseconds=1000;var fromOpacity=0.0;var toOpacity=100.0;var doToggle=false;var kindOfTransition=Spry.sinusoidalTransition;var setupCallback=null;var finishCallback=null;if(options)
{if(options.duration!=null)durationInMilliseconds=options.duration;if(options.from!=null)fromOpacity=options.from;if(options.to!=null)toOpacity=options.to;if(options.toggle!=null)doToggle=options.toggle;if(options.transition!=null)kindOfTransition=options.transition;if(options.setup!=null)setupCallback=options.setup;if(options.finish!=null)finishCallback=options.finish;}
options={duration:durationInMilliseconds,toggle:doToggle,transition:kindOfTransition,setup:setupCallback,finish:finishCallback,from:fromOpacity,to:toOpacity};fromOpacity=fromOpacity/100.0;toOpacity=toOpacity/100.0;var appearFadeEffect=new Spry.Effect.Opacity(element,fromOpacity,toOpacity,options);appearFadeEffect.name='AppearFade';var registeredEffect=SpryRegistry.getRegisteredEffect(element,appearFadeEffect);registeredEffect.start();return registeredEffect;};Spry.Effect.Blind=function(element,options)
{var element=Spry.Effect.getElement(element);Spry.Effect.makeClipping(element);var durationInMilliseconds=1000;var doToggle=false;var kindOfTransition=Spry.sinusoidalTransition;var doScaleContent=false;var setupCallback=null;var finishCallback=null;var originalRect=Spry.Effect.getDimensionsRegardlessOfDisplayState(element);var fromHeightPx=originalRect.height;var toHeightPx=0;var optionFrom=options?options.from:originalRect.height;var optionTo=options?options.to:0;if(options)
{if(options.duration!=null)durationInMilliseconds=options.duration;if(options.from!=null)
{if(Spry.Effect.Utils.isPercentValue(options.from))
fromHeightPx=Spry.Effect.Utils.getPercentValue(options.from)*originalRect.height/100;else
fromHeightPx=Spry.Effect.Utils.getPixelValue(options.from);}
if(options.to!=null)
{if(Spry.Effect.Utils.isPercentValue(options.to))
toHeightPx=Spry.Effect.Utils.getPercentValue(options.to)*originalRect.height/100;else
toHeightPx=Spry.Effect.Utils.getPixelValue(options.to);}
if(options.toggle!=null)doToggle=options.toggle;if(options.transition!=null)kindOfTransition=options.transition;if(options.setup!=null)setupCallback=options.setup;if(options.finish!=null)finishCallback=options.finish;}
var fromRect=new Spry.Effect.Utils.Rectangle;fromRect.width=originalRect.width;fromRect.height=fromHeightPx;var toRect=new Spry.Effect.Utils.Rectangle;toRect.width=originalRect.width;toRect.height=toHeightPx;options={duration:durationInMilliseconds,toggle:doToggle,transition:kindOfTransition,scaleContent:doScaleContent,setup:setupCallback,finish:finishCallback,from:optionFrom,to:optionTo};var blindEffect=new Spry.Effect.Size(element,fromRect,toRect,options);blindEffect.name='Blind';var registeredEffect=SpryRegistry.getRegisteredEffect(element,blindEffect);registeredEffect.start();return registeredEffect;};function setupHighlight(element,effect)
{Spry.Effect.setStyleProp(element,'background-image','none');};function finishHighlight(element,effect)
{Spry.Effect.setStyleProp(element,'background-image',effect.options.restoreBackgroundImage);if(effect.direction==Spry.forwards)
Spry.Effect.setStyleProp(element,'background-color',effect.options.restoreColor);};Spry.Effect.Highlight=function(element,options)
{var durationInMilliseconds=1000;var toColor="#ffffff";var doToggle=false;var kindOfTransition=Spry.sinusoidalTransition;var setupCallback=setupHighlight;var finishCallback=finishHighlight;var element=Spry.Effect.getElement(element);var fromColor=Spry.Effect.getStyleProp(element,"background-color");var restoreColor=fromColor;if(fromColor=="transparent")fromColor="#ffff99";var optionFrom=options?options.from:'#ffff00';var optionTo=options?options.to:'#0000ff';if(options)
{if(options.duration!=null)durationInMilliseconds=options.duration;if(options.from!=null)fromColor=options.from;if(options.to!=null)toColor=options.to;if(options.restoreColor)restoreColor=options.restoreColor;if(options.toggle!=null)doToggle=options.toggle;if(options.transition!=null)kindOfTransition=options.transition;if(options.setup!=null)setupCallback=options.setup;if(options.finish!=null)finishCallback=options.finish;}
var restoreBackgroundImage=Spry.Effect.getStyleProp(element,'background-image');options={duration:durationInMilliseconds,toggle:doToggle,transition:kindOfTransition,setup:setupCallback,finish:finishCallback,restoreColor:restoreColor,restoreBackgroundImage:restoreBackgroundImage,from:optionFrom,to:optionTo};var highlightEffect=new Spry.Effect.Color(element,fromColor,toColor,options);highlightEffect.name='Highlight';var registeredEffect=SpryRegistry.getRegisteredEffect(element,highlightEffect);registeredEffect.start();return registeredEffect;};Spry.Effect.Slide=function(element,options)
{var element=Spry.Effect.getElement(element);var durationInMilliseconds=2000;var doToggle=false;var kindOfTransition=Spry.sinusoidalTransition;var slideHorizontally=false;var setupCallback=null;var finishCallback=null;var firstChildElt=Spry.Effect.Utils.getFirstChildElement(element);if(/MSIE 7.0/.test(navigator.userAgent)&&/Windows NT/.test(navigator.userAgent))
Spry.Effect.makePositioned(element);Spry.Effect.makeClipping(element);if(/MSIE 6.0/.test(navigator.userAgent)&&/Windows NT/.test(navigator.userAgent))
{var pos=Spry.Effect.getStyleProp(element,'position');if(pos&&(pos=='static'||pos=='fixed'))
{Spry.Effect.setStyleProp(element,'position','relative');Spry.Effect.setStyleProp(element,'top','');Spry.Effect.setStyleProp(element,'left','');}}
if(firstChildElt)
{Spry.Effect.makePositioned(firstChildElt);Spry.Effect.makeClipping(firstChildElt);var childRect=Spry.Effect.getDimensionsRegardlessOfDisplayState(firstChildElt,element);Spry.Effect.setStyleProp(firstChildElt,'width',childRect.width+'px');}
var elementRect=Spry.Effect.getDimensionsRegardlessOfDisplayState(element);var startOffsetPosition=new Spry.Effect.Utils.Position();startOffsetPosition.x=parseInt(Spry.Effect.getStyleProp(firstChildElt,"left"));startOffsetPosition.y=parseInt(Spry.Effect.getStyleProp(firstChildElt,"top"));if(!startOffsetPosition.x)startOffsetPosition.x=0;if(!startOffsetPosition.y)startOffsetPosition.y=0;if(options&&options.horizontal!==null&&options.horizontal===true)
slideHorizontally=true;var movePx=slideHorizontally?elementRect.width:elementRect.height;var fromPos=new Spry.Effect.Utils.Position;fromPos.x=startOffsetPosition.x;fromPos.y=startOffsetPosition.y;var toPos=new Spry.Effect.Utils.Position;toPos.x=slideHorizontally?startOffsetPosition.x-movePx:startOffsetPosition.x;toPos.y=slideHorizontally?startOffsetPosition.y:startOffsetPosition.y-movePx;var optionFrom=options?options.from:elementRect.height;var optionTo=options?options.to:0;if(options)
{if(options.duration!=null)durationInMilliseconds=options.duration;if(options.from!=null)
{if(slideHorizontally)
{if(Spry.Effect.Utils.isPercentValue(options.from))
fromPos.x=movePx*Spry.Effect.Utils.getPercentValue(options.from)/100;else
fromPos.x=Spry.Effect.Utils.getPixelValue(options.from);}
else
{if(Spry.Effect.Utils.isPercentValue(options.from))
fromPos.y=movePx*Spry.Effect.Utils.getPercentValue(options.from)/100;else
fromPos.y=Spry.Effect.Utils.getPixelValue(options.from);}}
if(options.to!=null)
{if(slideHorizontally)
{if(Spry.Effect.Utils.isPercentValue(options.to))
toPos.x=movePx*Spry.Effect.Utils.getPercentValue(options.to)/100;else
toPos.x=Spry.Effect.Utils.getPixelValue(options.to);}
else
{if(Spry.Effect.Utils.isPercentValue(options.to))
toPos.y=movePx*Spry.Effect.Utils.getPercentValue(options.to)/100;else
toPos.y=Spry.Effect.Utils.getPixelValue(options.to);}}
if(options.toggle!=null)doToggle=options.toggle;if(options.transition!=null)kindOfTransition=options.transition;if(options.setup!=null)setupCallback=options.setup;if(options.finish!=null)finishCallback=options.finish;}
options={duration:durationInMilliseconds,toggle:doToggle,transition:kindOfTransition,setup:setupCallback,finish:finishCallback,from:optionFrom,to:optionTo};var slideEffect=new Spry.Effect.MoveSlide(element,fromPos,toPos,slideHorizontally,options);slideEffect.name='Slide';var registeredEffect=SpryRegistry.getRegisteredEffect(element,slideEffect);registeredEffect.start();return registeredEffect;};Spry.Effect.GrowShrink=function(element,options)
{var element=Spry.Effect.getElement(element);Spry.Effect.makePositioned(element);Spry.Effect.makeClipping(element);var startOffsetPosition=new Spry.Effect.Utils.Position();startOffsetPosition.x=parseInt(Spry.Effect.getStylePropRegardlessOfDisplayState(element,"left"));startOffsetPosition.y=parseInt(Spry.Effect.getStylePropRegardlessOfDisplayState(element,"top"));if(!startOffsetPosition.x)startOffsetPosition.x=0;if(!startOffsetPosition.y)startOffsetPosition.y=0;var dimRect=Spry.Effect.getDimensionsRegardlessOfDisplayState(element);var originalWidth=dimRect.width;var originalHeight=dimRect.height;var propFactor=(originalWidth==0)?1:originalHeight/originalWidth;var durationInMilliseconds=500;var doToggle=false;var kindOfTransition=Spry.sinusoidalTransition;var fromRect=new Spry.Effect.Utils.Rectangle;fromRect.width=0;fromRect.height=0;var toRect=new Spry.Effect.Utils.Rectangle;toRect.width=originalWidth;toRect.height=originalHeight;var setupCallback=null;var finishCallback=null;var doScaleContent=true;var optionFrom=options?options.from:dimRect.width;var optionTo=options?options.to:0;var calcHeight=false;var growFromCenter=true;if(options)
{if(options.referHeight!=null)calcHeight=options.referHeight;if(options.growCenter!=null)growFromCenter=options.growCenter;if(options.duration!=null)durationInMilliseconds=options.duration;if(options.from!=null)
{if(Spry.Effect.Utils.isPercentValue(options.from))
{fromRect.width=originalWidth*(Spry.Effect.Utils.getPercentValue(options.from)/100);fromRect.height=originalHeight*(Spry.Effect.Utils.getPercentValue(options.from)/100);}
else
{if(calcHeight)
{fromRect.height=Spry.Effect.Utils.getPixelValue(options.from);fromRect.width=Spry.Effect.Utils.getPixelValue(options.from)/propFactor;}
else
{fromRect.width=Spry.Effect.Utils.getPixelValue(options.from);fromRect.height=propFactor*Spry.Effect.Utils.getPixelValue(options.from);}}}
if(options.to!=null)
{if(Spry.Effect.Utils.isPercentValue(options.to))
{toRect.width=originalWidth*(Spry.Effect.Utils.getPercentValue(options.to)/100);toRect.height=originalHeight*(Spry.Effect.Utils.getPercentValue(options.to)/100);}
else
{if(calcHeight)
{toRect.height=Spry.Effect.Utils.getPixelValue(options.to);toRect.width=Spry.Effect.Utils.getPixelValue(options.to)/propFactor;}
else
{toRect.width=Spry.Effect.Utils.getPixelValue(options.to);toRect.height=propFactor*Spry.Effect.Utils.getPixelValue(options.to);}}}
if(options.toggle!=null)doToggle=options.toggle;if(options.transition!=null)kindOfTransition=options.transition;if(options.setup!=null)setupCallback=options.setup;if(options.finish!=null)finishCallback=options.finish;}
options={duration:durationInMilliseconds,toggle:doToggle,transition:kindOfTransition,scaleContent:doScaleContent,from:optionFrom,to:optionTo};var effectCluster=new Spry.Effect.Cluster({toggle:doToggle,setup:setupCallback,finish:finishCallback});effectCluster.name='GrowShrink';var sizeEffect=new Spry.Effect.Size(element,fromRect,toRect,options);effectCluster.addParallelEffect(sizeEffect);if(growFromCenter)
{options={duration:durationInMilliseconds,toggle:doToggle,transition:kindOfTransition,from:optionFrom,to:optionTo};var fromPos=new Spry.Effect.Utils.Position;fromPos.x=startOffsetPosition.x+(originalWidth-fromRect.width)/2.0;fromPos.y=startOffsetPosition.y+(originalHeight-fromRect.height)/2.0;var toPos=new Spry.Effect.Utils.Position;toPos.x=startOffsetPosition.x+(originalWidth-toRect.width)/2.0;toPos.y=startOffsetPosition.y+(originalHeight-toRect.height)/2.0;var initialProps2={top:fromPos.y,left:fromPos.x};var moveEffect=new Spry.Effect.Move(element,fromPos,toPos,options,initialProps2);effectCluster.addParallelEffect(moveEffect);}
var registeredEffect=SpryRegistry.getRegisteredEffect(element,effectCluster);registeredEffect.start();return registeredEffect;};Spry.Effect.Shake=function(element,options)
{var element=Spry.Effect.getElement(element);Spry.Effect.makePositioned(element);var setupCallback=null;var finishCallback=null;if(options)
{if(options.setup!=null)setupCallback=options.setup;if(options.finish!=null)finishCallback=options.finish;}
var startOffsetPosition=new Spry.Effect.Utils.Position();startOffsetPosition.x=parseInt(Spry.Effect.getStyleProp(element,"left"));startOffsetPosition.y=parseInt(Spry.Effect.getStyleProp(element,"top"));if(!startOffsetPosition.x)startOffsetPosition.x=0;if(!startOffsetPosition.y)startOffsetPosition.y=0;var shakeEffectCluster=new Spry.Effect.Cluster({setup:setupCallback,finish:finishCallback});shakeEffectCluster.name='Shake';var fromPos=new Spry.Effect.Utils.Position;fromPos.x=startOffsetPosition.x+0;fromPos.y=startOffsetPosition.y+0;var toPos=new Spry.Effect.Utils.Position;toPos.x=startOffsetPosition.x+20;toPos.y=startOffsetPosition.y+0;options={duration:50,toggle:false};var effect=new Spry.Effect.Move(element,fromPos,toPos,options);shakeEffectCluster.addNextEffect(effect);var fromPos=new Spry.Effect.Utils.Position;fromPos.x=startOffsetPosition.x+20;fromPos.y=startOffsetPosition.y+0;var toPos=new Spry.Effect.Utils.Position;toPos.x=startOffsetPosition.x+-20;toPos.y=startOffsetPosition.y+0;options={duration:100,toggle:false};var effect=new Spry.Effect.Move(element,fromPos,toPos,options);shakeEffectCluster.addNextEffect(effect);var fromPos=new Spry.Effect.Utils.Position;fromPos.x=startOffsetPosition.x+-20;fromPos.y=startOffsetPosition.y+0;var toPos=new Spry.Effect.Utils.Position;toPos.x=startOffsetPosition.x+20;toPos.y=startOffsetPosition.y+0;options={duration:100,toggle:false};var effect=new Spry.Effect.Move(element,fromPos,toPos,options);shakeEffectCluster.addNextEffect(effect);var fromPos=new Spry.Effect.Utils.Position;fromPos.x=startOffsetPosition.x+20;fromPos.y=startOffsetPosition.y+0;var toPos=new Spry.Effect.Utils.Position;toPos.x=startOffsetPosition.x+-20;toPos.y=startOffsetPosition.y+0;options={duration:100,toggle:false};var effect=new Spry.Effect.Move(element,fromPos,toPos,options);shakeEffectCluster.addNextEffect(effect);var fromPos=new Spry.Effect.Utils.Position;fromPos.x=startOffsetPosition.x+-20;fromPos.y=startOffsetPosition.y+0;var toPos=new Spry.Effect.Utils.Position;toPos.x=startOffsetPosition.x+20;toPos.y=startOffsetPosition.y+0;options={duration:100,toggle:false};var effect=new Spry.Effect.Move(element,fromPos,toPos,options);shakeEffectCluster.addNextEffect(effect);var fromPos=new Spry.Effect.Utils.Position;fromPos.x=startOffsetPosition.x+20;fromPos.y=startOffsetPosition.y+0;var toPos=new Spry.Effect.Utils.Position;toPos.x=startOffsetPosition.x+0;toPos.y=startOffsetPosition.y+0;options={duration:50,toggle:false};var effect=new Spry.Effect.Move(element,fromPos,toPos,options);shakeEffectCluster.addNextEffect(effect);var registeredEffect=SpryRegistry.getRegisteredEffect(element,shakeEffectCluster);registeredEffect.start();return registeredEffect;}
Spry.Effect.Squish=function(element,options)
{var element=Spry.Effect.getElement(element);var durationInMilliseconds=500;var doToggle=true;var setupCallback=null;var finishCallback=null;if(options)
{if(options.duration!=null)durationInMilliseconds=options.duration;if(options.toggle!=null)doToggle=options.toggle;if(options.setup!=null)setupCallback=options.setup;if(options.finish!=null)finishCallback=options.finish;}
Spry.Effect.makePositioned(element);Spry.Effect.makeClipping(element);var originalRect=Spry.Effect.getDimensionsRegardlessOfDisplayState(element);var startWidth=originalRect.width;var startHeight=originalRect.height;var stopWidth=0;var stopHeight=0;var fromRect=new Spry.Effect.Utils.Rectangle;fromRect.width=startWidth;fromRect.height=startHeight;var toRect=new Spry.Effect.Utils.Rectangle;toRect.width=stopWidth;toRect.height=stopHeight;var doScaleContent=true;options={duration:durationInMilliseconds,toggle:doToggle,scaleContent:doScaleContent,setup:setupCallback,finish:finishCallback};var squishEffect=new Spry.Effect.Size(element,fromRect,toRect,options);squishEffect.name='Squish';var registeredEffect=SpryRegistry.getRegisteredEffect(element,squishEffect);registeredEffect.start();return registeredEffect;};Spry.Effect.Pulsate=function(element,options)
{var element=Spry.Effect.getElement(element);var durationInMilliseconds=400;var fromOpacity=100.0;var toOpacity=0.0;var doToggle=false;var kindOfTransition=Spry.linearTransition;var setupCallback=null;var finishCallback=null;if(options)
{if(options.duration!=null)durationInMilliseconds=options.duration;if(options.from!=null)fromOpacity=options.from;if(options.to!=null)toOpacity=options.to;if(options.toggle!=null)doToggle=options.toggle;if(options.transition!=null)kindOfTransition=options.transition;if(options.setup!=null)setupCallback=options.setup;if(options.finish!=null)finishCallback=options.finish;}
options={duration:durationInMilliseconds,toggle:doToggle,transition:kindOfTransition,setup:setupCallback,finish:finishCallback};fromOpacity=fromOpacity/100.0;toOpacity=toOpacity/100.0;var pulsateEffectCluster=new Spry.Effect.Cluster();var fadeEffect=new Spry.Effect.Opacity(element,fromOpacity,toOpacity,options);var appearEffect=new Spry.Effect.Opacity(element,toOpacity,fromOpacity,options);pulsateEffectCluster.addNextEffect(fadeEffect);pulsateEffectCluster.addNextEffect(appearEffect);pulsateEffectCluster.addNextEffect(fadeEffect);pulsateEffectCluster.addNextEffect(appearEffect);pulsateEffectCluster.addNextEffect(fadeEffect);pulsateEffectCluster.addNextEffect(appearEffect);pulsateEffectCluster.name='Pulsate';var registeredEffect=SpryRegistry.getRegisteredEffect(element,pulsateEffectCluster);registeredEffect.start();return registeredEffect;};Spry.Effect.Puff=function(element,options)
{var element=Spry.Effect.getElement(element);Spry.Effect.makePositioned(element);var setupCallback=null;var finishCallback=null;if(options)
{if(options.setup!=null)setupCallback=options.setup;if(options.finish!=null)finishCallback=options.finish;}
var puffEffectCluster=new Spry.Effect.Cluster;var durationInMilliseconds=500;var originalRect=Spry.Effect.getDimensions(element);var startWidth=originalRect.width;var startHeight=originalRect.height;var stopWidth=startWidth*2;var stopHeight=startHeight*2;var fromRect=new Spry.Effect.Utils.Rectangle;fromRect.width=startWidth;fromRect.height=startHeight;var toRect=new Spry.Effect.Utils.Rectangle;toRect.width=stopWidth;toRect.height=stopHeight;var doScaleContent=false;options={duration:durationInMilliseconds,toggle:false,scaleContent:doScaleContent};var sizeEffect=new Spry.Effect.Size(element,fromRect,toRect,options);puffEffectCluster.addParallelEffect(sizeEffect);options={duration:durationInMilliseconds,toggle:false};var fromOpacity=1.0;var toOpacity=0.0;var opacityEffect=new Spry.Effect.Opacity(element,fromOpacity,toOpacity,options);puffEffectCluster.addParallelEffect(opacityEffect);options={duration:durationInMilliseconds,toggle:false};var fromPos=new Spry.Effect.Utils.Position;fromPos.x=0;fromPos.y=0;var toPos=new Spry.Effect.Utils.Position;toPos.x=startWidth/2.0*-1.0;toPos.y=startHeight/2.0*-1.0;var moveEffect=new Spry.Effect.Move(element,fromPos,toPos,options);puffEffectCluster.addParallelEffect(moveEffect);puffEffectCluster.setup=setupCallback;puffEffectCluster.finish=finishCallback;puffEffectCluster.name='Puff';var registeredEffect=SpryRegistry.getRegisteredEffect(element,puffEffectCluster);registeredEffect.start();return registeredEffect;};Spry.Effect.DropOut=function(element,options)
{var element=Spry.Effect.getElement(element);var dropoutEffectCluster=new Spry.Effect.Cluster;var durationInMilliseconds=500;Spry.Effect.makePositioned(element);var setupCallback=null;var finishCallback=null;if(options)
{if(options.setup!=null)setupCallback=options.setup;if(options.finish!=null)finishCallback=options.finish;}
var startOffsetPosition=new Spry.Effect.Utils.Position();startOffsetPosition.x=parseInt(Spry.Effect.getStyleProp(element,"left"));startOffsetPosition.y=parseInt(Spry.Effect.getStyleProp(element,"top"));if(!startOffsetPosition.x)startOffsetPosition.x=0;if(!startOffsetPosition.y)startOffsetPosition.y=0;var fromPos=new Spry.Effect.Utils.Position;fromPos.x=startOffsetPosition.x+0;fromPos.y=startOffsetPosition.y+0;var toPos=new Spry.Effect.Utils.Position;toPos.x=startOffsetPosition.x+0;toPos.y=startOffsetPosition.y+160;options={from:fromPos,to:toPos,duration:durationInMilliseconds,toggle:true};var moveEffect=new Spry.Effect.Move(element,options.from,options.to,options);dropoutEffectCluster.addParallelEffect(moveEffect);options={duration:durationInMilliseconds,toggle:true};var fromOpacity=1.0;var toOpacity=0.0;var opacityEffect=new Spry.Effect.Opacity(element,fromOpacity,toOpacity,options);dropoutEffectCluster.addParallelEffect(opacityEffect);dropoutEffectCluster.setup=setupCallback;dropoutEffectCluster.finish=finishCallback;dropoutEffectCluster.name='DropOut';var registeredEffect=SpryRegistry.getRegisteredEffect(element,dropoutEffectCluster);registeredEffect.start();return registeredEffect;};Spry.Effect.Fold=function(element,options)
{var element=Spry.Effect.getElement(element);var durationInMilliseconds=1000;var doToggle=false;var doScaleContent=true;var foldEffectCluster=new Spry.Effect.Cluster();var originalRect=Spry.Effect.getDimensions(element);var startWidth=originalRect.width;var startHeight=originalRect.height;var stopWidth=startWidth;var stopHeight=startHeight/5;var fromRect=new Spry.Effect.Utils.Rectangle;fromRect.width=startWidth;fromRect.height=startHeight;var toRect=new Spry.Effect.Utils.Rectangle;toRect.width=stopWidth;toRect.height=stopHeight;options={duration:durationInMilliseconds,toggle:doToggle,scaleContent:doScaleContent};var sizeEffect=new Spry.Effect.Size(element,fromRect,toRect,options);foldEffectCluster.addNextEffect(sizeEffect);durationInMilliseconds=500;options={duration:durationInMilliseconds,toggle:doToggle,scaleContent:doScaleContent};fromRect.width="100%";fromRect.height="20%";toRect.width="10%";toRect.height="20%";var sizeEffect=new Spry.Effect.Size(element,fromRect,toRect,options);foldEffectCluster.addNextEffect(sizeEffect);foldEffectCluster.name='Fold';var registeredEffect=SpryRegistry.getRegisteredEffect(element,foldEffectCluster);registeredEffect.start();return registeredEffect;};var gThumbWidth;if(gThumbWidth==undefined)
gThumbWidth=50;var gThumbHeight;if(gThumbHeight==undefined)
gThumbHeight=50;var gSlideShowInterval;if(gSlideShowInterval==undefined)
gSlideShowInterval=3000;var gAutoStartSlideShow;if(gAutoStartSlideShow==undefined)
gAutoStartSlideShow=true;var gBehaviorsArray=[];var gSlideShowOn=false;var gSlideShowTimer=null;var gImageLoader=null;Spry.Data.Region.addObserver("thumbnails",function(nType,notifier,data){if(nType=="onPostUpdate")
{ShowCurrentImage();if(gAutoStartSlideShow)
StartSlideShow(true);}});function SetMainImage(imgPath,width,height,tnID)
{var img=document.getElementById("mainImage");if(!img)
return;CancelBehavior("mainImage");Spry.Utils.SelectionManager.clearSelection("thumbnailSelection");if(tnID)
Spry.Utils.SelectionManager.select("thumbnailSelection",document.getElementById(tnID),"selectedThumbnail");if(gImageLoader)
{gImageLoader.onload=function(){};gImageLoader=null;}
gBehaviorsArray["mainImage"]=new Spry.Effect.Opacity(img,Spry.Effect.getOpacity(img),0,{duration:400,finish:function()
{gBehaviorsArray["mainImage"]=new Spry.Effect.Size(img.parentNode,Spry.Effect.getDimensions(img.parentNode),{width:width,height:height,units:"px"},{duration:400,finish:function()
{gImageLoader=new Image();gImageLoader.onload=function()
{img.src=gImageLoader.src;gImageLoader=null;gBehaviorsArray["mainImage"]=new Spry.Effect.Opacity(img,0,1,{duration:400,finish:function()
{gBehaviorsArray["mainImage"]=null;if(gSlideShowOn)
SetSlideShowTimer();}});gBehaviorsArray["mainImage"].start();};gImageLoader.src=imgPath;}});gBehaviorsArray["mainImage"].start();}});gBehaviorsArray["mainImage"].start();}
function CancelBehavior(id)
{if(gBehaviorsArray[id])
{gBehaviorsArray[id].cancel();gBehaviorsArray[id]=null;}}
function SizeAndPosition(id,toX,toY,toWidth,toHeight,callback)
{CancelBehavior(id);var effectCluster=new Spry.Effect.Cluster({finish:callback});var ele=Spry.Effect.getElement(id);var moveEffect=new Spry.Effect.Move(ele,Spry.Effect.getPosition(ele),{x:toX,y:toY,units:"px"},{duration:400});var sizeEffect=new Spry.Effect.Size(ele,Spry.Effect.getDimensions(ele),{width:toWidth,height:toHeight,units:"px"},{duration:400});effectCluster.addParallelEffect(moveEffect);effectCluster.addParallelEffect(sizeEffect);gBehaviorsArray[id]=effectCluster;gBehaviorsArray[id].start();}
function GrowThumbnail(img,width,height)
{Spry.Utils.addClassName(img,"inFocus");img.style.zIndex=150;img.style.borderColor='#FF3C4A';img.visible=false;var id=img.getAttribute("id");var twidth=Math.floor(width*.75);var theight=Math.floor(height*.75);var tx=(gThumbWidth-twidth)/2;var ty=(gThumbHeight-theight)/2;SizeAndPosition(id,tx,ty,twidth,theight,function(b){gBehaviorsArray[id]=null;});}
function ShrinkThumbnail(img)
{Spry.Utils.addClassName(img,"inFocus");img.style.zIndex=1;img.style.borderColor='#000000';var id=img.getAttribute("id");SizeAndPosition(id,0,0,gThumbWidth,gThumbHeight,function(b){gBehaviorsArray[id]=null;Spry.Utils.removeClassName(img,"inFocus");});}
function ShowCurrentImage()
{var curRow=dsPhotos.getCurrentRow();SetMainImage("galleries/"+dsGalleries.getCurrentRow()["@base"]+"images/"+curRow["@path"],curRow["@width"],curRow["@height"],"tn"+curRow["ds_RowID"]);}
function AdvanceToNextImage(moveBackwards)
{var rows=dsPhotos.getData();var curRow=dsPhotos.getCurrentRow();if(rows.length<1)
return;for(var i=0;i<rows.length;i++)
{if(rows[i]==curRow)
{if(moveBackwards)
--i;else
++i;break;}}
if(!moveBackwards&&i>=rows.length)
i=0;else if(moveBackwards&&i<0)
i=rows.length-1;curRow=rows[i];dsPhotos.setCurrentRow(curRow["ds_RowID"]);ShowCurrentImage();}
function SetSlideShowTimer()
{KillSlideShowTimer();gSlideShowTimer=setTimeout(function(){gSlideShowTimer=null;AdvanceToNextImage(false);},gSlideShowInterval);}
function KillSlideShowTimer()
{if(gSlideShowTimer)
clearTimeout(gSlideShowTimer);gSlideShowTimer=null;}
function StartSlideShow(skipTimer)
{gSlideShowOn=true;if(!skipTimer)
SetSlideShowTimer();var playLabel=document.getElementById("playLabel");if(playLabel)
playLabel.firstChild.data="Pause";}
function StopSlideShow()
{gSlideShowOn=false;KillSlideShowTimer();var playLabel=document.getElementById("playLabel");if(playLabel)
playLabel.firstChild.data="Play";}
function HandleThumbnailClick(id)
{StopSlideShow();dsPhotos.setCurrentRow(id);ShowCurrentImage();}