var Spry;if(!Spry)Spry={};if(!Spry.Widget)Spry.Widget={};Spry.Widget.Accordion=function(element,opts)
{this.element=this.getElement(element);this.defaultPanel=0;this.hoverClass="AccordionPanelTabHover";this.openClass="AccordionPanelOpen";this.closedClass="AccordionPanelClosed";this.focusedClass="AccordionFocused";this.enableAnimation=true;this.enableKeyboardNavigation=true;this.currentPanel=null;this.animator=null;this.hasFocus=null;this.previousPanelKeyCode=Spry.Widget.Accordion.KEY_UP;this.nextPanelKeyCode=Spry.Widget.Accordion.KEY_DOWN;this.useFixedPanelHeights=true;this.fixedPanelHeight=0;Spry.Widget.Accordion.setOptions(this,opts,true);this.attachBehaviors();};Spry.Widget.Accordion.prototype.getElement=function(ele)
{if(ele&&typeof ele=="string")
return document.getElementById(ele);return ele;};Spry.Widget.Accordion.prototype.addClassName=function(ele,className)
{if(!ele||!className||(ele.className&&ele.className.search(new RegExp("\\b"+className+"\\b"))!=-1))
return;ele.className+=(ele.className?" ":"")+className;};Spry.Widget.Accordion.prototype.removeClassName=function(ele,className)
{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.Widget.Accordion.setOptions=function(obj,optionsObj,ignoreUndefinedProps)
{if(!optionsObj)
return;for(var optionName in optionsObj)
{if(ignoreUndefinedProps&&optionsObj[optionName]==undefined)
continue;obj[optionName]=optionsObj[optionName];}};Spry.Widget.Accordion.prototype.onPanelTabMouseOver=function(e,panel)
{if(panel)
this.addClassName(this.getPanelTab(panel),this.hoverClass);return false;};Spry.Widget.Accordion.prototype.onPanelTabMouseOut=function(e,panel)
{if(panel)
this.removeClassName(this.getPanelTab(panel),this.hoverClass);return false;};Spry.Widget.Accordion.prototype.openPanel=function(elementOrIndex)
{var panelA=this.currentPanel;var panelB;if(typeof elementOrIndex=="number")
panelB=this.getPanels()[elementOrIndex];else
panelB=this.getElement(elementOrIndex);if(!panelB||panelA==panelB)
return null;var contentA=panelA?this.getPanelContent(panelA):null;var contentB=this.getPanelContent(panelB);if(!contentB)
return null;if(this.useFixedPanelHeights&&!this.fixedPanelHeight)
this.fixedPanelHeight=(contentA.offsetHeight)?contentA.offsetHeight:contentA.scrollHeight;if(this.enableAnimation)
{if(this.animator)
this.animator.stop();this.animator=new Spry.Widget.Accordion.PanelAnimator(this,panelB,{duration:this.duration,fps:this.fps,transition:this.transition});this.animator.start();}
else
{if(contentA)
{contentA.style.display="none";contentA.style.height="0px";}
contentB.style.display="block";contentB.style.height=this.useFixedPanelHeights?this.fixedPanelHeight+"px":"auto";}
if(panelA)
{this.removeClassName(panelA,this.openClass);this.addClassName(panelA,this.closedClass);}
this.removeClassName(panelB,this.closedClass);this.addClassName(panelB,this.openClass);this.currentPanel=panelB;return panelB;};Spry.Widget.Accordion.prototype.closePanel=function()
{if(!this.useFixedPanelHeights&&this.currentPanel)
{var panel=this.currentPanel;var content=this.getPanelContent(panel);if(content)
{if(this.enableAnimation)
{if(this.animator)
this.animator.stop();this.animator=new Spry.Widget.Accordion.PanelAnimator(this,null,{duration:this.duration,fps:this.fps,transition:this.transition});this.animator.start();}
else
{content.style.display="none";content.style.height="0px";}}
this.removeClassName(panel,this.openClass);this.addClassName(panel,this.closedClass);this.currentPanel=null;}};Spry.Widget.Accordion.prototype.openNextPanel=function()
{return this.openPanel(this.getCurrentPanelIndex()+1);};Spry.Widget.Accordion.prototype.openPreviousPanel=function()
{return this.openPanel(this.getCurrentPanelIndex()-1);};Spry.Widget.Accordion.prototype.openFirstPanel=function()
{return this.openPanel(0);};Spry.Widget.Accordion.prototype.openLastPanel=function()
{var panels=this.getPanels();return this.openPanel(panels[panels.length-1]);};Spry.Widget.Accordion.prototype.onPanelTabClick=function(e,panel)
{if(panel!=this.currentPanel)
this.openPanel(panel);else
this.closePanel();if(this.enableKeyboardNavigation)
this.focus();if(e.preventDefault)e.preventDefault();else e.returnValue=false;if(e.stopPropagation)e.stopPropagation();else e.cancelBubble=true;return false;};Spry.Widget.Accordion.prototype.onFocus=function(e)
{this.hasFocus=true;this.addClassName(this.element,this.focusedClass);return false;};Spry.Widget.Accordion.prototype.onBlur=function(e)
{this.hasFocus=false;this.removeClassName(this.element,this.focusedClass);return false;};Spry.Widget.Accordion.KEY_UP=38;Spry.Widget.Accordion.KEY_DOWN=40;Spry.Widget.Accordion.prototype.onKeyDown=function(e)
{var key=e.keyCode;if(!this.hasFocus||(key!=this.previousPanelKeyCode&&key!=this.nextPanelKeyCode))
return true;var panels=this.getPanels();if(!panels||panels.length<1)
return false;var currentPanel=this.currentPanel?this.currentPanel:panels[0];var nextPanel=(key==this.nextPanelKeyCode)?currentPanel.nextSibling:currentPanel.previousSibling;while(nextPanel)
{if(nextPanel.nodeType==1)
break;nextPanel=(key==this.nextPanelKeyCode)?nextPanel.nextSibling:nextPanel.previousSibling;}
if(nextPanel&&currentPanel!=nextPanel)
this.openPanel(nextPanel);if(e.preventDefault)e.preventDefault();else e.returnValue=false;if(e.stopPropagation)e.stopPropagation();else e.cancelBubble=true;return false;};Spry.Widget.Accordion.prototype.attachPanelHandlers=function(panel)
{if(!panel)
return;var tab=this.getPanelTab(panel);if(tab)
{var self=this;Spry.Widget.Accordion.addEventListener(tab,"click",function(e){return self.onPanelTabClick(e,panel);},false);Spry.Widget.Accordion.addEventListener(tab,"mouseover",function(e){return self.onPanelTabMouseOver(e,panel);},false);Spry.Widget.Accordion.addEventListener(tab,"mouseout",function(e){return self.onPanelTabMouseOut(e,panel);},false);}};Spry.Widget.Accordion.addEventListener=function(element,eventType,handler,capture)
{try
{if(element.addEventListener)
element.addEventListener(eventType,handler,capture);else if(element.attachEvent)
element.attachEvent("on"+eventType,handler);}
catch(e){}};Spry.Widget.Accordion.prototype.initPanel=function(panel,isDefault)
{var content=this.getPanelContent(panel);if(isDefault)
{this.currentPanel=panel;this.removeClassName(panel,this.closedClass);this.addClassName(panel,this.openClass);if(content)
{if(this.useFixedPanelHeights)
{if(this.fixedPanelHeight)
content.style.height=this.fixedPanelHeight+"px";}
else
{content.style.height="auto";}}}
else
{this.removeClassName(panel,this.openClass);this.addClassName(panel,this.closedClass);if(content)
{content.style.height="0px";content.style.display="none";}}
this.attachPanelHandlers(panel);};Spry.Widget.Accordion.prototype.attachBehaviors=function()
{var panels=this.getPanels();for(var i=0;i<panels.length;i++)
this.initPanel(panels[i],i==this.defaultPanel);this.enableKeyboardNavigation=(this.enableKeyboardNavigation&&this.element.attributes.getNamedItem("tabindex"));if(this.enableKeyboardNavigation)
{var self=this;Spry.Widget.Accordion.addEventListener(this.element,"focus",function(e){return self.onFocus(e);},false);Spry.Widget.Accordion.addEventListener(this.element,"blur",function(e){return self.onBlur(e);},false);Spry.Widget.Accordion.addEventListener(this.element,"keydown",function(e){return self.onKeyDown(e);},false);}};Spry.Widget.Accordion.prototype.getPanels=function()
{return this.getElementChildren(this.element);};Spry.Widget.Accordion.prototype.getCurrentPanel=function()
{return this.currentPanel;};Spry.Widget.Accordion.prototype.getPanelIndex=function(panel)
{var panels=this.getPanels();for(var i=0;i<panels.length;i++)
{if(panel==panels[i])
return i;}
return-1;};Spry.Widget.Accordion.prototype.getCurrentPanelIndex=function()
{return this.getPanelIndex(this.currentPanel);};Spry.Widget.Accordion.prototype.getPanelTab=function(panel)
{if(!panel)
return null;return this.getElementChildren(panel)[0];};Spry.Widget.Accordion.prototype.getPanelContent=function(panel)
{if(!panel)
return null;return this.getElementChildren(panel)[1];};Spry.Widget.Accordion.prototype.getElementChildren=function(element)
{var children=[];var child=element.firstChild;while(child)
{if(child.nodeType==1)
children.push(child);child=child.nextSibling;}
return children;};Spry.Widget.Accordion.prototype.focus=function()
{if(this.element&&this.element.focus)
this.element.focus();};Spry.Widget.Accordion.prototype.blur=function()
{if(this.element&&this.element.blur)
this.element.blur();};Spry.Widget.Accordion.PanelAnimator=function(accordion,panel,opts)
{this.timer=null;this.interval=0;this.fps=60;this.duration=500;this.startTime=0;this.transition=Spry.Widget.Accordion.PanelAnimator.defaultTransition;this.onComplete=null;this.panel=panel;this.panelToOpen=accordion.getElement(panel);this.panelData=[];this.useFixedPanelHeights=accordion.useFixedPanelHeights;Spry.Widget.Accordion.setOptions(this,opts,true);this.interval=Math.floor(1000/this.fps);var panels=accordion.getPanels();for(var i=0;i<panels.length;i++)
{var p=panels[i];var c=accordion.getPanelContent(p);if(c)
{var h=c.offsetHeight;if(h==undefined)
h=0;if(p==panel&&h==0)
c.style.display="block";if(p==panel||h>0)
{var obj=new Object;obj.panel=p;obj.content=c;obj.fromHeight=h;obj.toHeight=(p==panel)?(accordion.useFixedPanelHeights?accordion.fixedPanelHeight:c.scrollHeight):0;obj.distance=obj.toHeight-obj.fromHeight;obj.overflow=c.style.overflow;this.panelData.push(obj);c.style.overflow="hidden";c.style.height=h+"px";}}}};Spry.Widget.Accordion.PanelAnimator.defaultTransition=function(time,begin,finish,duration){time/=duration;return begin+((2-time)*time*finish);};Spry.Widget.Accordion.PanelAnimator.prototype.start=function()
{var self=this;this.startTime=(new Date).getTime();this.timer=setTimeout(function(){self.stepAnimation();},this.interval);};Spry.Widget.Accordion.PanelAnimator.prototype.stop=function()
{if(this.timer)
{clearTimeout(this.timer);for(i=0;i<this.panelData.length;i++)
{obj=this.panelData[i];obj.content.style.overflow=obj.overflow;}}
this.timer=null;};Spry.Widget.Accordion.PanelAnimator.prototype.stepAnimation=function()
{var curTime=(new Date).getTime();var elapsedTime=curTime-this.startTime;var i,obj;if(elapsedTime>=this.duration)
{for(i=0;i<this.panelData.length;i++)
{obj=this.panelData[i];if(obj.panel!=this.panel)
{obj.content.style.display="none";obj.content.style.height="0px";}
obj.content.style.overflow=obj.overflow;obj.content.style.height=(this.useFixedPanelHeights||obj.toHeight==0)?obj.toHeight+"px":"auto";}
if(this.onComplete)
this.onComplete();return;}
for(i=0;i<this.panelData.length;i++)
{obj=this.panelData[i];var ht=this.transition(elapsedTime,obj.fromHeight,obj.distance,this.duration);obj.content.style.height=((ht<0)?0:ht)+"px";}
var self=this;this.timer=setTimeout(function(){self.stepAnimation();},this.interval);};;var Spry;if(!Spry)Spry={};if(!Spry.Utils)Spry.Utils={};Spry.Utils.msProgIDs=["MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.3.0"];Spry.Utils.createXMLHttpRequest=function()
{var req=null;try
{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);}}
if(!req&&window.XMLHttpRequest)
req=new XMLHttpRequest();}
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)
{if(req.errorCallback)
req.errorCallback(req);else
Spry.Debug.reportError("Exception caught while loading "+url+": "+e);req=null;}
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=Spry.$(ele);var scriptExpr="<script[^>]*>(.|\s|\n|\r)*?</script>";ele.innerHTML=str.replace(new RegExp(scriptExpr,"img"),"");if(preventScripts)
return;var matches=str.match(new RegExp(scriptExpr,"img"));if(matches)
{var numMatches=matches.length;for(var i=0;i<numMatches;i++)
{var s=matches[i].replace(/<script[^>]*>[\s\r\n]*(<\!--)?|(-->)?[\s\r\n]*<\/script>/img,"");Spry.Utils.eval(s);}}};Spry.Utils.updateContent=function(ele,url,finishFunc,opts)
{Spry.Utils.loadURL("GET",url,true,function(req)
{Spry.Utils.setInnerHTML(ele,req.xhRequest.responseText);if(finishFunc)
finishFunc(ele,url);},opts);};if(!Spry.$$)
{Spry.Utils.addEventListener=function(element,eventType,handler,capture)
{try
{element=Spry.$(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=Spry.$(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.addClassName=function(ele,className)
{ele=Spry.$(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=Spry.$(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.getObjectByName=function(name)
{var result=null;if(name)
{var lu=window;var objPath=name.split(".");for(var i=0;lu&&i<objPath.length;i++)
{result=lu[objPath[i]];lu=result;}}
return result;};Spry.$=function(element)
{if(arguments.length>1)
{for(var i=0,elements=[],length=arguments.length;i<length;i++)
elements.push(Spry.$(arguments[i]));return elements;}
if(typeof element=='string')
element=document.getElementById(element);return element;};}
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;/gi,"<");str=str.replace(/&gt;/gi,">");str=str.replace(/&quot;/gi,"\"");str=str.replace(/&amp;/gi,"&");}
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.getFirstChildWithNodeName=function(node,nodeName)
{var child=node.firstChild;while(child)
{if(child.nodeName==nodeName)
return child;child=child.nextSibling;}
return null;};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();};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.onloadDidFire=false;Spry.Utils.addLoadListener(function(){Spry.Debug.onloadDidFire=true;Spry.Debug.flushQueuedMessages();});Spry.Debug.flushQueuedMessages=function()
{if(Spry.Debug.flushQueuedMessages.msgs)
{var msgs=Spry.Debug.flushQueuedMessages.msgs;for(var i=0;i<msgs.length;i++)
Spry.Debug.debugOut(msgs[i].msg,msgs[i].color);Spry.Debug.flushQueuedMessages.msgs=null;}};Spry.Debug.createDebugWindow=function()
{if(!Spry.Debug.enableTrace||Spry.Debug.debugWindow||!Spry.Debug.onloadDidFire)
return;try
{Spry.Debug.debugWindow=document.createElement("div");var 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)
{if(!Spry.Debug.flushQueuedMessages.msgs)
Spry.Debug.flushQueuedMessages.msgs=new Array;Spry.Debug.flushQueuedMessages.msgs.push({msg:str,color:bgColor});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.initRegionsOnLoad=true;Spry.Data.initRegions=function(rootNode)
{rootNode=rootNode?Spry.$(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;var newRegions=[];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;attr=rgn.attributes.getNamedItem("spry:expiredstate");if(attr&&attr.value)
regionStateMap["expired"]=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;newRegions.push(region);}
for(var i=0;i<newRegions.length;i++)
newRegions[i].updateContent();};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.getDataSetByName=function(dataSetName)
{var ds=window[dataSetName];if(typeof ds!="object"||!ds.getData||!ds.filter)
return null;return ds;};Spry.Data.DataSet=function(options)
{Spry.Utils.Notifier.call(this);this.name="";this.internalID=Spry.Data.DataSet.nextDataSetID++;this.curRowID=0;this.data=[];this.unfilteredData=null;this.dataHash={};this.columnTypes={};this.filterFunc=null;this.filterDataFunc=null;this.distinctOnLoad=false;this.distinctFieldsOnLoad=null;this.sortOnLoad=null;this.sortOrderOnLoad="ascending";this.keepSorted=false;this.dataWasLoaded=false;this.pendingRequest=null;this.lastSortColumns=[];this.lastSortOrder="";this.loadIntervalID=0;Spry.Utils.setOptions(this,options);};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.getValue=function(valueName,rowContext)
{var result=undefined;if(!rowContext)
rowContext=this.getCurrentRow();switch(valueName)
{case"ds_RowNumber":result=this.getRowNumber(rowContext);break;case"ds_RowNumberPlus1":result=this.getRowNumber(rowContext)+1;break;case"ds_RowCount":result=this.getRowCount();break;case"ds_UnfilteredRowCount":result=this.getRowCount(true);break;case"ds_CurrentRowNumber":result=this.getCurrentRowNumber();break;case"ds_CurrentRowID":result=this.getCurrentRowID();break;case"ds_EvenOddRow":result=(this.getRowNumber(rowContext)%2)?Spry.Data.Region.evenRowClassName:Spry.Data.Region.oddRowClassName;break;case"ds_SortOrder":result=this.getSortOrder();break;case"ds_SortColumn":result=this.getSortColumn();break;default:if(rowContext)
result=rowContext[valueName];break;}
return result;};Spry.Data.DataSet.prototype.setDataFromArray=function(arr,fireSyncLoad)
{this.notifyObservers("onPreLoad");this.unfilteredData=null;this.filteredData=null;this.data=[];this.dataHash={};var arrLen=arr.length;for(var i=0;i<arrLen;i++)
{var row=arr[i];if(row.ds_RowID==undefined)
row.ds_RowID=i;this.dataHash[row.ds_RowID]=row;this.data.push(row);}
this.loadData(fireSyncLoad);};Spry.Data.DataSet.prototype.loadData=function(syncLoad)
{var self=this;this.pendingRequest=new Object;this.dataWasLoaded=false;var loadCallbackFunc=function()
{self.pendingRequest=null;self.dataWasLoaded=true;self.applyColumnTypes();self.disableNotifications();self.filterAndSortData();self.enableNotifications();self.notifyObservers("onPostLoad");self.notifyObservers("onDataChanged");};if(syncLoad)
loadCallbackFunc();else
this.pendingRequest.timer=setTimeout(loadCallbackFunc,0);};Spry.Data.DataSet.prototype.filterAndSortData=function()
{if(this.filterDataFunc)
this.filterData(this.filterDataFunc,true);if(this.distinctOnLoad)
this.distinct(this.distinctFieldsOnLoad);if(this.keepSorted&&this.getSortColumn())
this.sort(this.lastSortColumns,this.lastSortOrder);else if(this.sortOnLoad)
this.sort(this.sortOnLoad,this.sortOrderOnLoad);if(this.filterFunc)
this.filter(this.filterFunc,true);if(this.data&&this.data.length>0)
this.curRowID=this.data[0]['ds_RowID'];else
this.curRowID=0;};Spry.Data.DataSet.prototype.cancelLoadData=function()
{if(this.pendingRequest&&this.pendingRequest.timer)
clearTimeout(this.pendingRequest.timer);this.pendingRequest=null;};Spry.Data.DataSet.prototype.getRowCount=function(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,unfiltered)
{if(row)
{var rows=this.getData(unfiltered);if(rows&&rows.length)
{var numRows=rows.length;for(var i=0;i<numRows;i++)
{if(rows[i]==row)
return i;}}}
return-1;};Spry.Data.DataSet.prototype.getCurrentRowNumber=function()
{return this.getRowNumber(this.getCurrentRow());};Spry.Data.DataSet.prototype.getCurrentRowID=function()
{return this.curRowID;};Spry.Data.DataSet.prototype.setCurrentRowNumber=function(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 firstMatchOnly?null:results;};Spry.Data.DataSet.prototype.setColumnType=function(columnNames,columnType)
{if(columnNames)
{if(typeof columnNames=="string")
columnNames=[columnNames];for(var i=0;i<columnNames.length;i++)
this.columnTypes[columnNames[i]]=columnType;}};Spry.Data.DataSet.prototype.getColumnType=function(columnName)
{if(this.columnTypes[columnName])
return this.columnTypes[columnName];return"string";};Spry.Data.DataSet.prototype.applyColumnTypes=function()
{var rows=this.getData(true);var numRows=rows.length;var colNames=[];if(numRows<1)
return;for(var cname in this.columnTypes)
{var ctype=this.columnTypes[cname];if(ctype!="string")
{for(var i=0;i<numRows;i++)
{var row=rows[i];var val=row[cname];if(val!=undefined)
{if(ctype=="number")
row[cname]=new Number(val);else if(ctype=="html")
row[cname]=Spry.Utils.decodeEntities(val);}}}}};Spry.Data.DataSet.prototype.distinct=function(columnNames)
{if(this.data)
{var oldData=this.data;this.data=[];this.dataHash={};var dataChanged=false;var alreadySeenHash={};var i=0;var keys=[];if(typeof columnNames=="string")
keys=[columnNames];else if(columnNames)
keys=columnNames;else
for(var recField in oldData[0])
keys[i++]=recField;for(var i=0;i<oldData.length;i++)
{var rec=oldData[i];var hashStr="";for(var j=0;j<keys.length;j++)
{recField=keys[j];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;}
else
dataChanged=true;}
if(dataChanged)
this.notifyObservers('onDataChanged');}};Spry.Data.DataSet.prototype.getSortColumn=function(){return(this.lastSortColumns&&this.lastSortColumns.length>0)?this.lastSortColumns[0]:"";};Spry.Data.DataSet.prototype.getSortOrder=function(){return this.lastSortOrder?this.lastSortOrder:"";};Spry.Data.DataSet.prototype.sort=function(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)
{a=a[prop];b=b[prop];if(a==undefined||b==undefined)
return(a==b)?0:(a?1:-1);return a-b;};else
sortfunc=function(a,b)
{a=a[prop];b=b[prop];if(a==undefined||b==undefined)
return(a==b)?0:(a?-1:1);return b-a;};}
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){a=a[prop];b=b[prop];if(a==undefined||b==undefined)
return(a==b)?0:(a?1:-1);var tA=a.toString();var tB=b.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;return-1;};else
sortfunc=function(a,b){a=a[prop];b=b[prop];if(a==undefined||b==undefined)
return(a==b)?0:(a?-1:1);var tA=a.toString();var tB=b.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;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.HTTPSourceDataSet=function(dataSetURL,dataSetOptions)
{Spry.Data.DataSet.call(this);this.url=dataSetURL;this.dataSetsForDataRefStrings=new Array;this.hasDataRefStrings=false;this.useCache=true;this.setRequestInfo(dataSetOptions,true);Spry.Utils.setOptions(this,dataSetOptions,true);this.recalculateDataSetDependencies();if(this.loadInterval>0)
this.startLoadInterval(this.loadInterval);};Spry.Data.HTTPSourceDataSet.prototype=new Spry.Data.DataSet();Spry.Data.HTTPSourceDataSet.prototype.constructor=Spry.Data.HTTPSourceDataSet;Spry.Data.HTTPSourceDataSet.prototype.setRequestInfo=function(requestInfo,undefineRequestProps)
{this.requestInfo=new Spry.Utils.loadURL.Request();this.requestInfo.extractRequestOptions(requestInfo,undefineRequestProps);if(this.requestInfo.method=="POST")
{if(!this.requestInfo.headers)
this.requestInfo.headers={};if(!this.requestInfo.headers['Content-Type'])
this.requestInfo.headers['Content-Type']="application/x-www-form-urlencoded; charset=UTF-8";}};Spry.Data.HTTPSourceDataSet.prototype.recalculateDataSetDependencies=function()
{this.hasDataRefStrings=false;var 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.getDataRefStrings();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])
{ds=Spry.Data.getDataSetByName(dsName);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.HTTPSourceDataSet.prototype.getDataRefStrings=function()
{var strArr=[];if(this.url)strArr.push(this.url);if(this.requestInfo&&this.requestInfo.postData)strArr.push(this.requestInfo.postData);return strArr;};Spry.Data.HTTPSourceDataSet.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.HTTPSourceDataSet.prototype.onCurrentRowChanged=function(ds,data)
{this.attemptLoadData();};Spry.Data.HTTPSourceDataSet.prototype.onPostSort=function(ds,data)
{this.attemptLoadData();};Spry.Data.HTTPSourceDataSet.prototype.onDataChanged=function(ds,data)
{this.attemptLoadData();};Spry.Data.HTTPSourceDataSet.prototype.loadData=function()
{if(!this.url)
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.HTTPSourceDataSet.LoadManager.loadData(req,this,this.useCache);};Spry.Data.HTTPSourceDataSet.prototype.cancelLoadData=function()
{if(this.pendingRequest)
{Spry.Data.HTTPSourceDataSet.LoadManager.cancelLoadData(this.pendingRequest.data,this);this.pendingRequest=null;}};Spry.Data.HTTPSourceDataSet.prototype.getURL=function(){return this.url;};Spry.Data.HTTPSourceDataSet.prototype.setURL=function(url,requestOptions)
{if(this.url==url)
{if(!requestOptions||(this.requestInfo.method==requestOptions.method&&(requestOptions.method!="POST"||this.requestInfo.postData==requestOptions.postData)))
return;}
this.url=url;this.setRequestInfo(requestOptions);this.cancelLoadData();this.recalculateDataSetDependencies();this.dataWasLoaded=false;};Spry.Data.HTTPSourceDataSet.prototype.setDataFromDoc=function(rawDataDoc)
{this.pendingRequest=null;this.loadDataIntoDataSet(rawDataDoc);this.applyColumnTypes();this.disableNotifications();this.filterAndSortData();this.enableNotifications();this.notifyObservers("onPostLoad");this.notifyObservers("onDataChanged");};Spry.Data.HTTPSourceDataSet.prototype.loadDataIntoDataSet=function(rawDataDoc)
{this.dataHash=new Object;this.data=new Array;this.dataWasLoaded=true;};Spry.Data.HTTPSourceDataSet.prototype.xhRequestProcessor=function(xhRequest)
{var resp=xhRequest.responseText;if(xhRequest.status==200||xhRequest.status==0)
return resp;return null;};Spry.Data.HTTPSourceDataSet.prototype.sessionExpiredChecker=function(req)
{if(req.xhRequest.responseText=='session expired')
return true;return false;};Spry.Data.HTTPSourceDataSet.prototype.setSessionExpiredChecker=function(checker)
{this.sessionExpiredChecker=checker;};Spry.Data.HTTPSourceDataSet.prototype.onRequestResponse=function(cachedRequest,req)
{this.setDataFromDoc(cachedRequest.rawData);};Spry.Data.HTTPSourceDataSet.prototype.onRequestError=function(cachedRequest,req)
{this.notifyObservers("onLoadError",req);};Spry.Data.HTTPSourceDataSet.prototype.onRequestSessionExpired=function(cachedRequest,req)
{this.notifyObservers("onSessionExpired",req);};Spry.Data.HTTPSourceDataSet.LoadManager={};Spry.Data.HTTPSourceDataSet.LoadManager.cache=[];Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest=function(reqInfo,xhRequestProcessor,sessionExpiredChecker)
{Spry.Utils.Notifier.call(this);this.reqInfo=reqInfo;this.rawData=null;this.timer=null;this.state=Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.NOT_LOADED;this.xhRequestProcessor=xhRequestProcessor;this.sessionExpiredChecker=sessionExpiredChecker;};Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.prototype=new Spry.Utils.Notifier();Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.prototype.constructor=Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest;Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.NOT_LOADED=1;Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.LOAD_REQUESTED=2;Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.LOAD_FAILED=3;Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.LOAD_SUCCESSFUL=4;Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.prototype.loadDataCallback=function(req)
{if(req.xhRequest.readyState!=4)
return;var rawData=null;if(this.xhRequestProcessor)rawData=this.xhRequestProcessor(req.xhRequest);if(this.sessionExpiredChecker)
{Spry.Utils.setOptions(req,{'rawData':rawData},false);if(this.sessionExpiredChecker(req))
{this.state=Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.LOAD_FAILED;this.notifyObservers("onRequestSessionExpired",req);this.observers.length=0;return;}}
if(!rawData)
{this.state=Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.LOAD_FAILED;this.notifyObservers("onRequestError",req);this.observers.length=0;return;}
this.rawData=rawData;this.state=Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.LOAD_SUCCESSFUL;this.notifyObservers("onRequestResponse",req);this.observers.length=0;};Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.prototype.loadData=function()
{var self=this;this.cancelLoadData();this.rawData=null;this.state=Spry.Data.HTTPSourceDataSet.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.HTTPSourceDataSet.LoadManager.CachedRequest.prototype.cancelLoadData=function()
{if(this.state==Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.LOAD_REQUESTED)
{if(this.timer)
{this.timer.clearTimeout();this.timer=null;}
this.rawData=null;this.state=Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.NOT_LOADED;}};Spry.Data.HTTPSourceDataSet.LoadManager.getCacheKey=function(reqInfo)
{return reqInfo.method+"::"+reqInfo.url+"::"+reqInfo.postData+"::"+reqInfo.username;};Spry.Data.HTTPSourceDataSet.LoadManager.loadData=function(reqInfo,ds,useCache)
{if(!reqInfo)
return null;var cacheObj=null;var cacheKey=null;if(useCache)
{cacheKey=Spry.Data.HTTPSourceDataSet.LoadManager.getCacheKey(reqInfo);cacheObj=Spry.Data.HTTPSourceDataSet.LoadManager.cache[cacheKey];}
if(cacheObj)
{if(cacheObj.state==Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.LOAD_REQUESTED)
{if(ds)
cacheObj.addObserver(ds);return cacheObj;}
else if(cacheObj.state==Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest.LOAD_SUCCESSFUL)
{if(ds)
setTimeout(function(){ds.setDataFromDoc(cacheObj.rawData);},0);return cacheObj;}}
if(!cacheObj)
{cacheObj=new Spry.Data.HTTPSourceDataSet.LoadManager.CachedRequest(reqInfo,(ds?ds.xhRequestProcessor:null),(ds?ds.sessionExpiredChecker:null));if(useCache)
{Spry.Data.HTTPSourceDataSet.LoadManager.cache[cacheKey]=cacheObj;cacheObj.addObserver({onRequestError:function(){Spry.Data.HTTPSourceDataSet.LoadManager.cache[cacheKey]=undefined;}});}}
if(ds)
cacheObj.addObserver(ds);cacheObj.loadData();return cacheObj;};Spry.Data.HTTPSourceDataSet.LoadManager.cancelLoadData=function(cacheObj,ds)
{if(cacheObj)
{if(ds)
cacheObj.removeObserver(ds);else
cacheObj.cancelLoadData();}};Spry.Data.XMLDataSet=function(dataSetURL,dataSetPath,dataSetOptions)
{this.xpath=dataSetPath;this.doc=null;this.subPaths=[];this.entityEncodeStrings=true;Spry.Data.HTTPSourceDataSet.call(this,dataSetURL,dataSetOptions);var jwType=typeof this.subPaths;if(jwType=="string"||(jwType=="object"&&this.subPaths.constructor!=Array))
this.subPaths=[this.subPaths];};Spry.Data.XMLDataSet.prototype=new Spry.Data.HTTPSourceDataSet();Spry.Data.XMLDataSet.prototype.constructor=Spry.Data.XMLDataSet;Spry.Data.XMLDataSet.prototype.getDataRefStrings=function()
{var strArr=[];if(this.url)strArr.push(this.url);if(this.xpath)strArr.push(this.xpath);if(this.requestInfo&&this.requestInfo.postData)strArr.push(this.requestInfo.postData);return strArr;};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.notifyObservers("onPreLoad");this.setDataFromDoc(this.doc);}}};Spry.Data.XMLDataSet.nodeContainsElementNode=function(node)
{if(node)
{node=node.firstChild;while(node)
{if(node.nodeType==1)
return true;node=node.nextSibling;}}
return false;};Spry.Data.XMLDataSet.getNodeText=function(node,encodeText,encodeCData)
{var txt="";if(!node)
return;try
{var child=node.firstChild;while(child)
{try
{if(child.nodeType==3)
txt+=encodeText?Spry.Utils.encodeEntities(child.data):child.data;else if(child.nodeType==4)
txt+=encodeCData?Spry.Utils.encodeEntities(child.data):child.data;}catch(e){Spry.Debug.reportError("Spry.Data.XMLDataSet.getNodeText() exception caught: "+e+"\n");}
child=child.nextSibling;}}
catch(e){Spry.Debug.reportError("Spry.Data.XMLDataSet.getNodeText() exception caught: "+e+"\n");}
return txt;};Spry.Data.XMLDataSet.createObjectForNode=function(node,encodeText,encodeCData)
{if(!node)
return null;var obj=new Object();var i=0;var attr=null;try
{for(i=0;i<node.attributes.length;i++)
{attr=node.attributes[i];if(attr&&attr.nodeType==2)
obj["@"+attr.name]=attr.value;}}
catch(e)
{Spry.Debug.reportError("Spry.Data.XMLDataSet.createObjectForNode() caught exception while accessing attributes: "+e+"\n");}
var child=node.firstChild;if(child&&!child.nextSibling&&child.nodeType!=1)
{obj[node.nodeName]=Spry.Data.XMLDataSet.getNodeText(node,encodeText,encodeCData);}
while(child)
{if(child.nodeType==1)
{if(!Spry.Data.XMLDataSet.nodeContainsElementNode(child))
{obj[child.nodeName]=Spry.Data.XMLDataSet.getNodeText(child,encodeText,encodeCData);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.Data.XMLDataSet.createObjectForNode() caught exception while accessing attributes: "+e+"\n");}}}
child=child.nextSibling;}
return obj;};Spry.Data.XMLDataSet.getRecordSetFromXMLDoc=function(xmlDoc,path,suppressColumns,entityEncodeStrings)
{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;var encodeText=true;var encodeCData=false;if(typeof entityEncodeStrings=="boolean")
encodeText=encodeCData=entityEncodeStrings;for(var i=0;i<nodeArray.length;i++)
{var rowObj=null;if(suppressColumns)
rowObj=new Object;else
{if(isDOMNodeArray)
rowObj=Spry.Data.XMLDataSet.createObjectForNode(nodeArray[i],encodeText,encodeCData);else
{rowObj=new Object;rowObj["@"+nodeArray[i].name]=nodeArray[i].value;}}
if(rowObj)
{rowObj['ds_RowID']=nextID++;rowObj['ds_XMLNode']=nodeArray[i];recordSet.dataHash[rowObj['ds_RowID']]=rowObj;recordSet.data.push(rowObj);}}
return recordSet;};Spry.Data.XMLDataSet.PathNode=function(path)
{this.path=path;this.subPaths=[];this.xpath="";};Spry.Data.XMLDataSet.PathNode.prototype.addSubPath=function(path)
{var node=this.findSubPath(path);if(!node)
{node=new Spry.Data.XMLDataSet.PathNode(path);this.subPaths.push(node);}
return node;};Spry.Data.XMLDataSet.PathNode.prototype.findSubPath=function(path)
{var numSubPaths=this.subPaths.length;for(var i=0;i<numSubPaths;i++)
{var subPath=this.subPaths[i];if(path==subPath.path)
return subPath;}
return null;};Spry.Data.XMLDataSet.PathNode.prototype.consolidate=function()
{var numSubPaths=this.subPaths.length;if(!this.xpath&&numSubPaths==1)
{var subPath=this.subPaths[0];this.path+=((subPath[0]!="/")?"/":"")+subPath.path;this.xpath=subPath.xpath;this.subPaths=subPath.subPaths;this.consolidate();return;}
for(var i=0;i<numSubPaths;i++)
this.subPaths[i].consolidate();};Spry.Data.XMLDataSet.prototype.convertXPathsToPathTree=function(xpathArray)
{var xpaLen=xpathArray.length;var root=new Spry.Data.XMLDataSet.PathNode("");for(var i=0;i<xpaLen;i++)
{var xpath=xpathArray[i];var cleanXPath=xpath.replace(/\/\//g,"/__SPRYDS__");cleanXPath=cleanXPath.replace(/^\//,"");var pathItems=cleanXPath.split(/\//);var pathItemsLen=pathItems.length;var node=root;for(var j=0;j<pathItemsLen;j++)
{var path=pathItems[j].replace(/__SPRYDS__/,"//");node=node.addSubPath(path);}
node.xpath=xpath;}
root.consolidate();return root;};Spry.Data.XMLDataSet.prototype.flattenSubPaths=function(rs,subPaths)
{if(!rs||!subPaths)
return;var numSubPaths=subPaths.length;if(numSubPaths<1)
return;var data=rs.data;var dataHash={};var xpathArray=[];var cleanedXPathArray=[];for(var i=0;i<numSubPaths;i++)
{var subPath=subPaths[i];if(typeof subPath=="object")
subPath=subPath.path;if(!subPath)
subPath="";xpathArray[i]=Spry.Data.Region.processDataRefString(null,subPath,this.dataSetsForDataRefStrings);cleanedXPathArray[i]=xpathArray[i].replace(/\[.*\]/g,"");}
var row;var numRows=data.length;var newData=[];for(var i=0;i<numRows;i++)
{row=data[i];var newRows=[row];for(var j=0;j<numSubPaths;j++)
{var newRS=Spry.Data.XMLDataSet.getRecordSetFromXMLDoc(row.ds_XMLNode,xpathArray[j],(subPaths[j].xpath?false:true),this.entityEncodeStrings);if(newRS&&newRS.data&&newRS.data.length)
{if(typeof subPaths[j]=="object"&&subPaths[j].subPaths)
{var sp=subPaths[j].subPaths;spType=typeof sp;if(spType=="string")
sp=[sp];else if(spType=="object"&&spType.constructor==Object)
sp=[sp];this.flattenSubPaths(newRS,sp);}
var newRSData=newRS.data;var numRSRows=newRSData.length;var cleanedXPath=cleanedXPathArray[j]+"/";var numNewRows=newRows.length;var joinedRows=[];for(var k=0;k<numNewRows;k++)
{var newRow=newRows[k];for(var l=0;l<numRSRows;l++)
{var newRowObj=new Object;var newRSRow=newRSData[l];for(prop in newRow)
newRowObj[prop]=newRow[prop];for(var prop in newRSRow)
{var newPropName=cleanedXPath+prop;if(cleanedXPath==(prop+"/")||cleanedXPath.search(new RegExp("\\/"+prop+"\\/$"))!=-1)
newPropName=cleanedXPathArray[j];newRowObj[newPropName]=newRSRow[prop];}
joinedRows.push(newRowObj);}}
newRows=joinedRows;}}
newData=newData.concat(newRows);}
data=newData;numRows=data.length;for(i=0;i<numRows;i++)
{row=data[i];row.ds_RowID=i;dataHash[row.ds_RowID]=row;}
rs.data=data;rs.dataHash=dataHash;};Spry.Data.XMLDataSet.prototype.loadDataIntoDataSet=function(rawDataDoc)
{var rs=null;var mainXPath=Spry.Data.Region.processDataRefString(null,this.xpath,this.dataSetsForDataRefStrings);var subPaths=this.subPaths;var suppressColumns=false;if(this.subPaths&&this.subPaths.length>0)
{var processedSubPaths=[];var numSubPaths=subPaths.length;for(var i=0;i<numSubPaths;i++)
{var subPathStr=Spry.Data.Region.processDataRefString(null,subPaths[i],this.dataSetsForDataRefStrings);if(subPathStr.charAt(0)!='/')
subPathStr=mainXPath+"/"+subPathStr;processedSubPaths.push(subPathStr);}
processedSubPaths.unshift(mainXPath);var commonParent=this.convertXPathsToPathTree(processedSubPaths);mainXPath=commonParent.path;subPaths=commonParent.subPaths;suppressColumns=commonParent.xpath?false:true;}
rs=Spry.Data.XMLDataSet.getRecordSetFromXMLDoc(rawDataDoc,mainXPath,suppressColumns,this.entityEncodeStrings);if(!rs)
{Spry.Debug.reportError("Spry.Data.XMLDataSet.loadDataIntoDataSet() failed to create dataSet '"+this.name+"'for '"+this.xpath+"' - "+this.url+"\n");return;}
this.flattenSubPaths(rs,subPaths);this.doc=rs.xmlDoc;this.data=rs.data;this.dataHash=rs.dataHash;this.dataWasLoaded=(this.doc!=null);};Spry.Data.XMLDataSet.prototype.xhRequestProcessor=function(xhRequest)
{var resp=xhRequest.responseXML;var manualParseRequired=false;if(xhRequest.status!=200)
{if(xhRequest.status==0)
{if(xhRequest.responseText&&(!resp||!resp.firstChild))
manualParseRequired=true;}}
else if(!resp)
{manualParseRequired=true;}
if(manualParseRequired)
resp=Spry.Utils.stringToXMLDoc(xhRequest.responseText);if(!resp||!resp.firstChild||resp.firstChild.nodeName=="parsererror")
return null;return resp;};Spry.Data.XMLDataSet.prototype.sessionExpiredChecker=function(req)
{if(req.xhRequest.responseText=='session expired')
return true;else
{if(req.rawData)
{var firstChild=req.rawData.documentElement.firstChild;if(firstChild&&firstChild.nodeValue=="session expired")
return true;}}
return false;};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])
{var notificationData={state:this.currentState};if(!suppressNotfications)
Spry.Data.Region.notifyObservers("onPreUpdate",this,notificationData);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,notificationData);}
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.onSessionExpired=function(dataSet)
{if(this.currentState!="expired")
this.setState("expired");Spry.Data.Region.notifyObservers("onExpired",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=Spry.Data.getDataSetByName(dsName);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)
{var specifiedDS=Spry.Data.getDataSetByName(colArray[0]);if(specifiedDS)
{ds=specifiedDS;colArray.shift();}
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)
{dataSet=Spry.Data.getDataSetByName(selectedDataSetName);if(!dataSet)
{Spry.Debug.reportError("Failed to retrieve data set ("+selectedDataSetName+") for "+piName+"\n");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.callScriptFunction=function(funcName,processContext)
{var result=undefined;funcName=funcName.replace(/^\s*\{?\s*function::\s*|\s*\}?\s*$/g,"");var func=Spry.Utils.getObjectByName(funcName);if(func)
result=func(this.name,function(){return processContext.getValueFromDataSet.apply(processContext,arguments);});return result;};Spry.Data.Region.prototype.evaluateExpression=function(exprStr,processContext)
{var result=undefined;try
{if(exprStr.search(/^\s*function::/)!=-1)
result=this.callScriptFunction(exprStr,processContext);else
result=Spry.Utils.eval(Spry.Data.Region.processDataRefString(processContext,exprStr,null,true));}
catch(e)
{Spry.Debug.trace("Caught exception in Spry.Data.Region.prototype.evaluateExpression() while evaluating: "+Spry.Utils.encodeEntities(exprStr)+"\n    Exception:"+e+"\n");}
return result;};Spry.Data.Region.prototype.processTokenChildren=function(outputArr,token,processContext)
{var children=token.children;var len=children.length;for(var i=0;i<len;i++)
this.processTokens(outputArr,children[i],processContext);};Spry.Data.Region.prototype.processTokens=function(outputArr,token,processContext)
{var i=0;switch(token.tokenType)
{case Spry.Data.Region.Token.LIST_TOKEN:this.processTokenChildren(outputArr,token,processContext);break;case Spry.Data.Region.Token.STRING_TOKEN:outputArr.push(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;}
dsContext.pushState();var dataSetRows=dsContext.getData();var numRows=dataSetRows.length;for(i=0;i<numRows;i++)
{dsContext.setRowIndex(i);var testVal=true;if(token.data.jsExpr)
testVal=this.evaluateExpression(token.data.jsExpr,processContext);if(testVal)
this.processTokenChildren(outputArr,token,processContext);}
dsContext.popState();}}
else if(token.data.name=="spry:if")
{var testVal=true;if(token.data.jsExpr)
testVal=this.evaluateExpression(token.data.jsExpr,processContext);if(testVal)
this.processTokenChildren(outputArr,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)
{testVal=this.evaluateExpression(child.data.jsExpr,processContext);if(testVal)
{childToProcess=child;break;}}}
else if(child.data.name=="spry:default")
defaultChild=child;}}
if(!childToProcess&&defaultChild)
childToProcess=defaultChild;if(childToProcess)
this.processTokenChildren(outputArr,childToProcess,processContext);}
else if(token.data.name=="spry:state")
{var testVal=true;if(!token.data.regionState||token.data.regionState==this.currentState)
this.processTokenChildren(outputArr,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;var val=undefined;if(dataSet&&dataSet=="function")
{val=this.callScriptFunction(token.data,processContext);}
else
{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"";}
val=processContext.getValueFromDataSet(dataSet,token.data);}
if(typeof val!="undefined")
outputArr.push(val+"");break;default:Spry.Debug.reportError("processTokens(): Invalid token type: "+token.regionStr+"\n");break;}};Spry.Data.Region.prototype.transform=function()
{if(this.data&&!this.tokens)
this.tokens=this.tokenizeData(this.data);if(!this.tokens)
return"";processContext=new Spry.Data.Region.ProcessingContext(this);if(!processContext)
return"";var outputArr=[""];this.processTokens(outputArr,this.tokens,processContext);return outputArr.join("");};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;var val="";if(processingContext)
val=processingContext.getValueFromDataSet(dsName,fieldName);else
{var ds=dsName?dataSetsToUse[dsName]:dataSetsToUse[0];if(ds)
val=ds.getValue(fieldName);}
if(typeof val!="undefined")
{val+="";resultStr+=isJSExpr?Spry.Utils.escapeQuotesAndLineBreaks(val):val;}
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=Spry.Data.getDataSetByName(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,processingContext)
{var m_dataSet=dataSet;var m_processingContext=processingContext;var m_curRowIndexArray=[{rowIndex:-1}];var m_parent=null;var m_children=[];var getInternalRowIndex=function(){return m_curRowIndexArray[m_curRowIndexArray.length-1].rowIndex;};this.resetAll=function(){m_curRowIndexArray=[{rowIndex:m_dataSet.getCurrentRow()}]};this.getDataSet=function(){return m_dataSet;};this.getNumRows=function(unfiltered)
{var data=this.getCurrentState().data;return data?data.length:m_dataSet.getRowCount(unfiltered);};this.getData=function()
{var data=this.getCurrentState().data;return data?data:m_dataSet.getData();};this.setData=function(data)
{this.getCurrentState().data=data;};this.getValue=function(valueName,rowContext)
{var result="";var curState=this.getCurrentState();var ds=curState.nestedDS?curState.nestedDS:this.getDataSet();if(ds)
result=ds.getValue(valueName,rowContext);return result;};this.getCurrentRow=function()
{if(m_curRowIndexArray.length<2||getInternalRowIndex()<0)
return m_dataSet.getCurrentRow();var data=this.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)
{this.getCurrentState().rowIndex=rowIndex;var data=this.getData();var numChildren=m_children.length;for(var i=0;i<numChildren;i++)
m_children[i].syncDataWithParentRow(this,rowIndex,data);};this.syncDataWithParentRow=function(parentDSContext,rowIndex,parentData)
{var row=parentData[rowIndex];if(row)
{nestedDS=m_dataSet.getNestedDataSetForParentRow(row);if(nestedDS)
{var currentState=this.getCurrentState();currentState.nestedDS=nestedDS;currentState.data=nestedDS.getData();currentState.rowIndex=nestedDS.getCurrentRowNumber();currentState.rowIndex=currentState.rowIndex<0?0:currentState.rowIndex;var numChildren=m_children.length;for(var i=0;i<numChildren;i++)
m_children[i].syncDataWithParentRow(this,currentState.rowIndex,currentState.data);}}};this.pushState=function()
{var curState=this.getCurrentState();var newState=new Object;newState.rowIndex=curState.rowIndex;newState.data=curState.data;newState.nestedDS=curState.nestedDS;m_curRowIndexArray.push(newState);var numChildren=m_children.length;for(var i=0;i<numChildren;i++)
m_children[i].pushState();};this.popState=function()
{if(m_curRowIndexArray.length<2)
{Spry.Debug.reportError("Stack underflow in Spry.Data.Region.DSContext.popState()!\n");return;}
var numChildren=m_children.length;for(var i=0;i<numChildren;i++)
m_children[i].popState();m_curRowIndexArray.pop();};this.getCurrentState=function()
{return m_curRowIndexArray[m_curRowIndexArray.length-1];};this.addChild=function(childDSContext)
{var numChildren=m_children.length;for(var i=0;i<numChildren;i++)
{if(m_children[i]==childDSContext)
return;}
m_children.push(childDSContext);};};Spry.Data.Region.ProcessingContext=function(region)
{this.region=region;this.dataSetContexts=[];if(region&&region.dataSets)
{var dsArray=region.dataSets.slice(0);var dsArrayLen=dsArray.length;for(var i=0;i<dsArrayLen;i++)
{var ds=region.dataSets[i];while(ds&&ds.getParentDataSet)
{var doesExist=false;ds=ds.getParentDataSet();if(ds&&this.indexOf(dsArray,ds)==-1)
dsArray.push(ds);}}
for(i=0;i<dsArray.length;i++)
this.dataSetContexts.push(new Spry.Data.Region.DSContext(dsArray[i],this));var dsContexts=this.dataSetContexts;var numDSContexts=dsContexts.length;for(i=0;i<numDSContexts;i++)
{var dsc=dsContexts[i];var ds=dsc.getDataSet();if(ds.getParentDataSet)
{var parentDS=ds.getParentDataSet();if(parentDS)
{var pdsc=this.getDataSetContext(parentDS);if(pdsc)pdsc.addChild(dsc);}}}}};Spry.Data.Region.ProcessingContext.prototype.indexOf=function(arr,item)
{if(arr)
{var arrLen=arr.length;for(var i=0;i<arrLen;i++)
if(arr[i]==item)
return i;}
return-1;};Spry.Data.Region.ProcessingContext.prototype.getDataSetContext=function(dataSet)
{if(!dataSet)
{if(this.dataSetContexts.length>0)
return this.dataSetContexts[0];return null;}
if(typeof dataSet=='string')
{dataSet=Spry.Data.getDataSetByName(dataSet);if(!dataSet)
return null;}
for(var i=0;i<this.dataSetContexts.length;i++)
{var dsc=this.dataSetContexts[i];if(dsc.getDataSet()==dataSet)
return dsc;}
return null;};Spry.Data.Region.ProcessingContext.prototype.getValueFromDataSet=function()
{var dsName="";var columnName="";if(arguments.length>1)
{dsName=arguments[0];columnName=arguments[1];}
else
{var dataRef=arguments[0].replace(/\s*{\s*|\s*}\s*/g,"");if(dataRef.search("::")!=-1)
{dsName=dataRef.replace(/::.*/,"");columnName=dataRef.replace(/.*::/,"");}
else
columnName=dataRef;}
var result="";var dsContext=this.getDataSetContext(dsName);if(dsContext)
result=dsContext.getValue(columnName,dsContext.getCurrentRow());else
Spry.Debug.reportError("getValueFromDataSet: Failed to get "+dsName+" context for the "+this.region.regionNode.id+" region.\n");return result;};Spry.Data.Region.ProcessingContext.prototype.$v=Spry.Data.Region.ProcessingContext.prototype.getValueFromDataSet;Spry.Data.Region.ProcessingContext.prototype.getCurrentRowForDataSet=function(dataSet)
{var dsc=this.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(){if(Spry.Data.initRegionsOnLoad)Spry.Data.initRegions();},0);});;var Spry;if(!Spry)Spry={};if(!Spry.Utils)Spry.Utils={};Spry.$=function(element)
{if(arguments.length>1)
{for(var i=0,elements=[],length=arguments.length;i<length;i++)
elements.push(Spry.$(arguments[i]));return elements;}
if(typeof element=='string')
element=document.getElementById(element);return element;};Spry.Utils.setAttribute=function(ele,name,value)
{ele=Spry.$(ele);if(!ele||!name)
return;if(name=="class")
ele.className=value;else
ele.setAttribute(name,value);};Spry.Utils.removeAttribute=function(ele,name)
{ele=Spry.$(ele);if(!ele||!name)
return;try
{ele.removeAttribute(name);if(name=="class")
ele.removeAttribute("className");}catch(e){}};Spry.Utils.addClassName=function(ele,className)
{ele=Spry.$(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=Spry.$(ele);if(Spry.Utils.hasClassName(ele,className))
ele.className=ele.className.replace(new RegExp("\\s*\\b"+className+"\\b","g"),"");};Spry.Utils.toggleClassName=function(ele,className)
{if(Spry.Utils.hasClassName(ele,className))
Spry.Utils.removeClassName(ele,className);else
Spry.Utils.addClassName(ele,className);};Spry.Utils.hasClassName=function(ele,className)
{ele=Spry.$(ele);if(!ele||!className||!ele.className||ele.className.search(new RegExp("\\b"+className+"\\b"))==-1)
return false;return true;};Spry.Utils.camelizeString=function(str)
{var cStr="";var a=str.split("-");for(var i=0;i<a.length;i++)
{var s=a[i];if(s)
cStr=cStr?(cStr+s.charAt(0).toUpperCase()+s.substring(1)):s;}
return cStr;};Spry.Utils.styleStringToObject=function(styleStr)
{var o={};if(styleStr)
{pvA=styleStr.split(";");for(var i=0;i<pvA.length;i++)
{var pv=pvA[i];if(pv&&pv.indexOf(":")!=-1)
{var nvA=pv.split(":");var n=nvA[0].replace(/^\s*|\s*$/g,"");var v=nvA[1].replace(/^\s*|\s*$/g,"");if(n&&v)
o[Spry.Utils.camelizeString(n)]=v;}}}
return o;};Spry.Utils.addEventListener=function(element,eventType,handler,capture)
{try
{if(!Spry.Utils.eventListenerIsBoundToElement(element,eventType,handler,capture))
{element=Spry.$(element);handler=Spry.Utils.bindEventListenerToElement(element,eventType,handler,capture);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=Spry.$(element);handler=Spry.Utils.unbindEventListenerFromElement(element,eventType,handler,capture);if(element.removeEventListener)
element.removeEventListener(eventType,handler,capture);else if(element.detachEvent)
element.detachEvent("on"+eventType,handler);}
catch(e){}};Spry.Utils.eventListenerHash={};Spry.Utils.nextEventListenerID=1;Spry.Utils.getHashForElementAndHandler=function(element,eventType,handler,capture)
{var hash=null;element=Spry.$(element);if(element)
{if(typeof element.spryEventListenerID=="undefined")
element.spryEventListenerID="e"+(Spry.Utils.nextEventListenerID++);if(typeof handler.spryEventHandlerID=="undefined")
handler.spryEventHandlerID="h"+(Spry.Utils.nextEventListenerID++);hash=element.spryEventListenerID+"-"+handler.spryEventHandlerID+"-"+eventType+(capture?"-capture":"");}
return hash;};Spry.Utils.eventListenerIsBoundToElement=function(element,eventType,handler,capture)
{element=Spry.$(element);var hash=Spry.Utils.getHashForElementAndHandler(element,eventType,handler,capture);return Spry.Utils.eventListenerHash[hash]!=undefined;};Spry.Utils.bindEventListenerToElement=function(element,eventType,handler,capture)
{element=Spry.$(element);var hash=Spry.Utils.getHashForElementAndHandler(element,eventType,handler,capture);if(Spry.Utils.eventListenerHash[hash])
return Spry.Utils.eventListenerHash[hash];return Spry.Utils.eventListenerHash[hash]=function(e)
{e=e||window.event;if(!e.preventDefault)e.preventDefault=function(){this.returnValue=false;};if(!e.stopPropagation)e.stopPropagation=function(){this.cancelBubble=true;};var result=handler.call(element,e);if(result==false)
{e.preventDefault();e.stopPropagation();}
return result;};};Spry.Utils.unbindEventListenerFromElement=function(element,eventType,handler,capture)
{element=Spry.$(element);var hash=Spry.Utils.getHashForElementAndHandler(element,eventType,handler,capture);if(Spry.Utils.eventListenerHash[hash])
{handler=Spry.Utils.eventListenerHash[hash];Spry.Utils.eventListenerHash[hash]=undefined;}
return handler;};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.getAncestor=function(ele,selector)
{ele=Spry.$(ele);if(ele)
{var s=Spry.$$.tokenizeSequence(selector?selector:"*")[0];var t=s?s[0]:null;if(t)
{var p=ele.parentNode;while(p)
{if(t.match(p))
return p;p=p.parentNode;}}}
return null;};Spry.$$=function(selectorSequence,rootNode)
{if(!rootNode)
rootNode=document;else
rootNode=Spry.$(rootNode);var sequences=Spry.$$.tokenizeSequence(selectorSequence);var matches=[];Spry.$$.addExtensions(matches);++Spry.$$.queryID;var nid=0;var ns=sequences.length;for(var i=0;i<ns;i++)
{var m=Spry.$$.processTokens(sequences[i],rootNode);var nm=m.length;for(var j=0;j<nm;j++)
{var n=m[j];if(!n.spry$$ID)
{n.spry$$ID=++nid;matches.push(n);}}}
var nm=matches.length;for(i=0;i<nm;i++)
matches[i].spry$$ID=undefined;return matches;};Spry.$$.cache={};Spry.$$.queryID=0;Spry.$$.Token=function()
{this.type=Spry.$$.Token.SELECTOR;this.name="*";this.id="";this.classes=[];this.attrs=[];this.pseudos=[];};Spry.$$.Token.Attr=function(n,v)
{this.name=n;this.value=v?new RegExp(v):undefined;};Spry.$$.Token.PseudoClass=function(pstr)
{this.name=pstr.replace(/\(.*/,"");this.arg=pstr.replace(/^[^\(\)]*\(?\s*|\)\s*$/g,"");this.func=Spry.$$.pseudoFuncs[this.name];};Spry.$$.Token.SELECTOR=0;Spry.$$.Token.COMBINATOR=1;Spry.$$.Token.prototype.match=function(ele,nameAlreadyMatches)
{if(this.type==Spry.$$.Token.COMBINATOR)
return false;if(!nameAlreadyMatches&&this.name!='*'&&this.name!=ele.nodeName.toLowerCase())
return false;if(this.id&&this.id!=ele.id)
return false;var classes=this.classes;var len=classes.length;for(var i=0;i<len;i++)
{if(!ele.className||!classes[i].value.test(ele.className))
return false;}
var attrs=this.attrs;len=attrs.length;for(var i=0;i<len;i++)
{var a=attrs[i];var an=ele.attributes.getNamedItem(a.name);if(!an||(!a.value&&an.nodeValue==undefined)||(a.value&&!a.value.test(an.nodeValue)))
return false;}
var ps=this.pseudos;var len=ps.length;for(var i=0;i<len;i++)
{var p=ps[i];if(p&&p.func&&!p.func(p.arg,ele,this))
return false;}
return true;};Spry.$$.Token.prototype.getNodeNameIfTypeMatches=function(ele)
{var nodeName=ele.nodeName.toLowerCase();if(this.name!='*')
{if(this.name!=nodeName)
return null;return this.name;}
return nodeName;};Spry.$$.escapeRegExpCharsRE=/\/|\.|\*|\+|\(|\)|\[|\]|\{|\}|\\|\|/g;Spry.$$.tokenizeSequence=function(s)
{var cc=Spry.$$.cache[s];if(cc)return cc;var tokenExpr=/(\[[^\"'~\^\$\*\|\]=]+([~\^\$\*\|]?=\s*('[^']*'|"[^"]*"|[^"'\]]+))?\s*\])|((:[^\.#:\s,>~\+\[\]]+\(([^\(\)]+|\([^\(\)]*\))*\))|[\.#:]?[^\.#:\s,>~\+\[\]]+)|(\s*[\s,>~\+]\s*)/g;var tkn=new Spry.$$.Token;var sequence=[];sequence.push(tkn);var tokenSequences=[];tokenSequences.push(sequence);s=s.replace(/^\s*|\s*$/,"");var expMatch=tokenExpr.exec(s);while(expMatch)
{var tstr=expMatch[0];var c=tstr.charAt(0);switch(c)
{case'.':tkn.classes.push(new Spry.$$.Token.Attr("class","\\b"+tstr.substr(1)+"\\b"));break;case'#':tkn.id=tstr.substr(1);break;case':':tkn.pseudos.push(new Spry.$$.Token.PseudoClass(tstr));break;case'[':var attrComps=tstr.match(/\[([^\"'~\^\$\*\|\]=]+)(([~\^\$\*\|]?=)\s*('[^']*'|"[^"]*"|[^"'\]]+))?\s*\]/);var name=attrComps[1];var matchType=attrComps[3];var val=attrComps[4];if(val)
{val=val.replace(/^['"]|['"]$/g,"");val=val.replace(Spry.$$.escapeRegExpCharsRE,'\\$&');}
var matchStr=undefined;switch(matchType)
{case"=":matchStr="^"+val+"$";break;case"^=":matchStr="^"+val;break;case"$=":matchStr=val+"$";break;case"~=":case"|=":matchStr="\\b"+val+"\\b";break;case"*=":matchStr=val;break;}
tkn.attrs.push(new Spry.$$.Token.Attr(name,matchStr));break;default:var combiMatch=tstr.match(/^\s*([\s,~>\+])\s*$/);if(combiMatch)
{if(combiMatch[1]==',')
{sequence=new Array;tokenSequences.push(sequence);tkn=new Spry.$$.Token;sequence.push(tkn);}
else
{tkn=new Spry.$$.Token;tkn.type=Spry.$$.Token.COMBINATOR;tkn.name=combiMatch[1];sequence.push(tkn);tkn=new Spry.$$.Token();sequence.push(tkn);}}
else
tkn.name=tstr.toLowerCase();break;}
expMatch=tokenExpr.exec(s);}
Spry.$$.cache[s]=tokenSequences;return tokenSequences;};Spry.$$.combinatorFuncs={" ":function(nodes,token)
{var uid=++Spry.$$.uniqueID;var results=[];var nn=nodes.length;for(var i=0;i<nn;i++)
{var n=nodes[i];if(uid!=n.spry$$uid)
{var ea=nodes[i].getElementsByTagName(token.name);var ne=ea.length;for(var j=0;j<ne;j++)
{var e=ea[j];if(token.match(e,true))
results.push(e);e.spry$$uid=uid;}}}
return results;},">":function(nodes,token)
{var results=[];var nn=nodes.length;for(var i=0;i<nn;i++)
{var n=nodes[i].firstChild;while(n)
{if(n.nodeType==1&&token.match(n))
results.push(n);n=n.nextSibling;}}
return results;},"+":function(nodes,token)
{var results=[];var nn=nodes.length;for(var i=0;i<nn;i++)
{var n=nodes[i].nextSibling;while(n&&n.nodeType!=1)
n=n.nextSibling;if(n&&token.match(n))
results.push(n);}
return results;},"~":function(nodes,token)
{var uid=++Spry.$$.uniqueID;var results=[];var nn=nodes.length;for(var i=0;i<nn;i++)
{var n=nodes[i].nextSibling;while(n)
{if(n.nodeType==1)
{if(uid==n.spry$$uid)
break;if(token.match(n))
{results.push(n);n.spry$$uid=uid;}}
n=n.nextSibling;}}
return results;}};Spry.$$.uniqueID=0;Spry.$$.pseudoFuncs={":first-child":function(arg,node,token)
{var n=node.previousSibling;while(n)
{if(n.nodeType==1)return false;n=n.previousSibling;}
return true;},":last-child":function(arg,node,token)
{var n=node.nextSibling;while(n)
{if(n.nodeType==1)
return false;n=n.nextSibling;}
return true;},":empty":function(arg,node,token)
{var n=node.firstChild;while(n)
{switch(n.nodeType)
{case 1:case 3:case 4:case 5:return false;}
n=n.nextSibling;}
return true;},":nth-child":function(arg,node,token)
{return Spry.$$.nthChild(arg,node,token);},":nth-last-child":function(arg,node,token)
{return Spry.$$.nthChild(arg,node,token,true);},":nth-of-type":function(arg,node,token)
{return Spry.$$.nthChild(arg,node,token,false,true);},":nth-last-of-type":function(arg,node,token)
{return Spry.$$.nthChild(arg,node,token,true,true);},":first-of-type":function(arg,node,token)
{var nodeName=token.getNodeNameIfTypeMatches(node);if(!nodeName)return false;var n=node.previousSibling;while(n)
{if(n.nodeType==1&&nodeName==n.nodeName.toLowerCase())return false;n=n.previousSibling;}
return true;},":last-of-type":function(arg,node,token)
{var nodeName=token.getNodeNameIfTypeMatches(node);if(!nodeName)return false;var n=node.nextSibling;while(n)
{if(n.nodeType==1&&nodeName==n.nodeName.toLowerCase())
return false;n=n.nextSibling;}
return true;},":only-child":function(arg,node,token)
{var f=Spry.$$.pseudoFuncs;return f[":first-child"](arg,node,token)&&f[":last-child"](arg,node,token);},":only-of-type":function(arg,node,token)
{var f=Spry.$$.pseudoFuncs;return f[":first-of-type"](arg,node,token)&&f[":last-of-type"](arg,node,token);},":not":function(arg,node,token)
{var s=Spry.$$.tokenizeSequence(arg)[0];var t=s?s[0]:null;return!t||!t.match(node);},":enabled":function(arg,node,token)
{return!node.disabled;},":disabled":function(arg,node,token)
{return node.disabled;},":checked":function(arg,node,token)
{return node.checked;},":root":function(arg,node,token)
{return node.parentNode&&node.ownerDocument&&node.parentNode==node.ownerDocument;}};Spry.$$.nthRegExp=/((-|[0-9]+)?n)?([+-]?[0-9]*)/;Spry.$$.nthCache={"even":{a:2,b:0,mode:1,invalid:false},"odd":{a:2,b:1,mode:1,invalid:false},"2n":{a:2,b:0,mode:1,invalid:false},"2n+1":{a:2,b:1,mode:1,invalid:false}};Spry.$$.parseNthChildString=function(str)
{var o=Spry.$$.nthCache[str];if(!o)
{var m=str.match(Spry.$$.nthRegExp);var n=m[1];var a=m[2];var b=m[3];if(!a)
{a=n?1:0;}
else if(a=="-")
{a=-1;}
else
{a=parseInt(a,10);}
b=b?parseInt(b,10):0;var mode=(a==0)?0:((a>0)?1:-1);var invalid=false;if(a>0&&b<0)
{b=b%a;b=((b=(b%a))<0)?a+b:b;}
else if(a<0)
{if(b<0)
invalid=true;else
a=Math.abs(a);}
o=new Object;o.a=a;o.b=b;o.mode=mode;o.invalid=invalid;Spry.$$.nthCache[str]=o;}
return o;};Spry.$$.nthChild=function(arg,node,token,fromLastSib,matchNodeName)
{if(matchNodeName)
{var nodeName=token.getNodeNameIfTypeMatches(node);if(!nodeName)return false;}
var o=Spry.$$.parseNthChildString(arg);if(o.invalid)
return false;var qidProp="spry$$ncQueryID";var posProp="spry$$ncPos";var countProp="spry$$ncCount";if(matchNodeName)
{qidProp+=nodeName;posProp+=nodeName;countProp+=nodeName;}
var parent=node.parentNode;if(parent[qidProp]!=Spry.$$.queryID)
{var pos=0;parent[qidProp]=Spry.$$.queryID;var c=parent.firstChild;while(c)
{if(c.nodeType==1&&(!matchNodeName||nodeName==c.nodeName.toLowerCase()))
c[posProp]=++pos;c=c.nextSibling;}
parent[countProp]=pos;}
pos=node[posProp];if(fromLastSib)
pos=parent[countProp]-pos+1;if(o.mode==0)
return pos==o.b;if(o.mode>0)
return(pos<o.b)?false:(!((pos-o.b)%o.a));return(pos>o.b)?false:(!((o.b-pos)%o.a));};Spry.$$.processTokens=function(tokens,root)
{var numTokens=tokens.length;var nodeSet=[root];var combiFunc=null;for(var i=0;i<numTokens&&nodeSet.length>0;i++)
{var t=tokens[i];if(t.type==Spry.$$.Token.SELECTOR)
{if(combiFunc)
{nodeSet=combiFunc(nodeSet,t);combiFunc=null;}
else
nodeSet=Spry.$$.getMatchingElements(nodeSet,t);}
else
combiFunc=Spry.$$.combinatorFuncs[t.name];}
return nodeSet;};Spry.$$.getMatchingElements=function(nodes,token)
{var results=[];if(token.id)
{n=nodes[0];if(n&&n.ownerDocument)
{var e=n.ownerDocument.getElementById(token.id);if(e)
{if(token.match(e))
results.push(e);}
return results;}}
var nn=nodes.length;for(var i=0;i<nn;i++)
{var n=nodes[i];var ea=n.getElementsByTagName(token.name);var ne=ea.length;for(var j=0;j<ne;j++)
{var e=ea[j];if(token.match(e,true))
results.push(e);}}
return results;};Spry.$$.addExtensions=function(a)
{for(var f in Spry.$$.Results)
a[f]=Spry.$$.Results[f];};Spry.$$.Results={};Spry.$$.Results.forEach=function(func)
{var n=this.length;for(var i=0;i<n;i++)
{func(this[i]);}
return this;};Spry.$$.Results.setAttribute=function(name,value)
{return this.forEach(function(n){Spry.Utils.setAttribute(n,name,value);});};Spry.$$.Results.removeAttribute=function(name)
{return this.forEach(function(n){Spry.Utils.removeAttribute(n,name);});};Spry.$$.Results.addClassName=function(className)
{return this.forEach(function(n){Spry.Utils.addClassName(n,className);});};Spry.$$.Results.removeClassName=function(className)
{return this.forEach(function(n){Spry.Utils.removeClassName(n,className);});};Spry.$$.Results.toggleClassName=function(className)
{return this.forEach(function(n){Spry.Utils.toggleClassName(n,className);});};Spry.$$.Results.addEventListener=function(eventType,handler,capture,bindHandler)
{return this.forEach(function(n){Spry.Utils.addEventListener(n,eventType,handler,capture,bindHandler);});};Spry.$$.Results.removeEventListener=function(eventType,handler,capture)
{return this.forEach(function(n){Spry.Utils.removeEventListener(n,eventType,handler,capture);});};Spry.$$.Results.setStyle=function(style)
{if(style)
{style=Spry.Utils.styleStringToObject(style);this.forEach(function(n)
{for(var p in style)
try{n.style[p]=style[p];}catch(e){}});}
return this;};Spry.$$.Results.setProperty=function(prop,value)
{if(prop)
{if(typeof prop=="string")
{var p={};p[prop]=value;prop=p;}
this.forEach(function(n)
{for(var p in prop)
try{n[p]=prop[p];}catch(e){}});}
return this;};;var Spry;if(!Spry)Spry={};if(!Spry.Utils)Spry.Utils={};Spry.Utils.submitForm=function(form,callback,opts)
{if(!form)
return true;if(typeof form=='string')
form=document.getElementById(form)||document.forms[form];if(adjustFormAction)adjustFormAction(form);var frmOpts={};frmOpts.method=form.method;frmOpts.url=form.action||document.location.href;frmOpts.enctype=form.enctype;Spry.Utils.setOptions(frmOpts,opts);var submitData=Spry.Utils.extractParamsFromForm(form,frmOpts.elements);if(frmOpts.additionalData)
submitData+="&"+frmOpts.additionalData;if(frmOpts.enctype.toLowerCase()!='multipart/form-data')
{frmOpts.method=(frmOpts.method.toLowerCase()=="post")?'POST':'GET';if(frmOpts.method=="GET")
{if(frmOpts.url.indexOf('?')==-1)
frmOpts.url+='?';else
frmOpts.url+='&';frmOpts.url+=submitData;}
else
{if(!frmOpts.headers)frmOpts.headers={};if(!frmOpts.headers['Content-Type']||frmOpts.headers['Content-Type'].indexOf("application/x-www-form-urlencoded")==-1)
frmOpts.headers['Content-Type']='application/x-www-form-urlencoded';frmOpts.postData=submitData;}
Spry.Utils.loadURL(frmOpts.method,frmOpts.url,true,callback,frmOpts);if(adjustFormAction)adjustFormAction(form,0);return false;}
if(adjustFormAction)adjustFormAction(form,"0");return true;};Spry.Utils.extractParamsFromForm=function(form,elements)
{if(!form)
return'';if(typeof form=='string')
form=document.getElementById(form)||document.forms[form];var formElements;if(elements)
formElements=','+elements.join(',')+',';var compStack=new Array();var el;for(var i=0;i<form.elements.length;i++)
{el=form.elements[i];if(el.disabled||!el.name)
{continue;}
if(!el.type)
{continue;}
if(formElements&&formElements.indexOf(','+el.name+',')==-1)
continue;switch(el.type.toLowerCase())
{case'text':case'password':case'textarea':case'hidden':case'submit':compStack.push(encodeURIComponent(el.name)+'='+encodeURIComponent(el.value));break;case'select-one':var value='';var opt;if(el.selectedIndex>=0){opt=el.options[el.selectedIndex];value=opt.value||opt.text;}
compStack.push(encodeURIComponent(el.name)+'='+encodeURIComponent(value));break;case'select-multiple':for(var j=0;j<el.length;j++)
{if(el.options[j].selected)
{value=el.options[j].value||el.options[j].text;compStack.push(encodeURIComponent(el.name)+'='+encodeURIComponent(value));}}
break;case'checkbox':case'radio':if(el.checked)
compStack.push(encodeURIComponent(el.name)+'='+encodeURIComponent(el.value));break;default:break;}}
return compStack.join('&');};;var Spry;if(!Spry)Spry={};if(!Spry.Widget)Spry.Widget={};Spry.Widget.BrowserSniff=function()
{var b=navigator.appName.toString();var up=navigator.platform.toString();var ua=navigator.userAgent.toString();this.mozilla=this.ie=this.opera=this.safari=false;var re_opera=/Opera.([0-9\.]*)/i;var re_msie=/MSIE.([0-9\.]*)/i;var re_gecko=/gecko/i;var re_safari=/(applewebkit|safari)\/([\d\.]*)/i;var r=false;if((r=ua.match(re_opera))){this.opera=true;this.version=parseFloat(r[1]);}else if((r=ua.match(re_msie))){this.ie=true;this.version=parseFloat(r[1]);}else if((r=ua.match(re_safari))){this.safari=true;this.version=parseFloat(r[2]);}else if(ua.match(re_gecko)){var re_gecko_version=/rv:\s*([0-9\.]+)/i;r=ua.match(re_gecko_version);this.mozilla=true;this.version=parseFloat(r[1]);}
this.windows=this.mac=this.linux=false;this.Platform=ua.match(/windows/i)?"windows":(ua.match(/linux/i)?"linux":(ua.match(/mac/i)?"mac":ua.match(/unix/i)?"unix":"unknown"));this[this.Platform]=true;this.v=this.version;if(this.safari&&this.mac&&this.mozilla){this.mozilla=false;}};Spry.is=new Spry.Widget.BrowserSniff();Spry.Widget.ValidationConfirm=function(element,firstInput,options)
{options=Spry.Widget.Utils.firstValid(options,{});if(!this.isBrowserSupported())
return;if(this.init(element,firstInput,options)===false)
return false;var validateOn=['submit'].concat(Spry.Widget.Utils.firstValid(this.options.validateOn,[]));validateOn=validateOn.join(",");this.validateOn=0;this.validateOn=this.validateOn|(validateOn.indexOf('submit')!=-1?Spry.Widget.ValidationConfirm.ONSUBMIT:0);this.validateOn=this.validateOn|(validateOn.indexOf('blur')!=-1?Spry.Widget.ValidationConfirm.ONBLUR:0);this.validateOn=this.validateOn|(validateOn.indexOf('change')!=-1?Spry.Widget.ValidationConfirm.ONCHANGE:0);if(Spry.Widget.ValidationConfirm.onloadDidFire)
this.attachBehaviors();else
Spry.Widget.ValidationConfirm.loadQueue.push(this);};Spry.Widget.ValidationConfirm.ONCHANGE=1;Spry.Widget.ValidationConfirm.ONBLUR=2;Spry.Widget.ValidationConfirm.ONSUBMIT=4;Spry.Widget.ValidationConfirm.prototype.init=function(element,firstInput,options)
{options=Spry.Widget.Utils.firstValid(options,[]);this.options=[];this.element=this.getElement(element);if(!this.element)
{this.showError('The element '+(!element||element==''?'to be validated is not defined!':(element+' doesn\'t exists!')));return false;}
else
{if(this.element.nodeName.toUpperCase()=='INPUT'&&(typeof this.element.type=='undefined'||',RADIO,CHECKBOX,BUTTON,SUBMIT,IMAGE,'.indexOf(','+this.element.type.toUpperCase+',')==-1))
{this.input=this.element;}
else
{this.input=Spry.Widget.Utils.getFirstChildWithNodeNameAtAnyLevel(this.element,'INPUT');}}
if(!this.input)
{this.showError('Element '+element+' doesn\'t contain any form input!');return false;}
var elm=this.getElement(firstInput);this.firstInput=false;if(!elm)
{this.showError('The element '+(!firstInput||firstInput==''?'that contains the value to be validated is not defined!':(firstInput+' doesn\'t exists!')));return false;}
if(elm.nodeName.toUpperCase()!='INPUT')
{this.firstInput=Spry.Widget.Utils.getFirstChildWithNodeNameAtAnyLevel(elm,'INPUT');}
else if(typeof elm.type=='undefined'||',RADIO,CHECKBOX,BUTTON,SUBMIT,IMAGE,'.indexOf(','+elm.type.toUpperCase()+',')==-1)
{this.firstInput=elm;}
if(!this.firstInput)
{this.showError('Element '+firstInput+' doesn\'t contain any form input!');return false;}
this.event_handlers=[];this.validClass="confirmValidState";this.focusClass="confirmFocusState";this.requiredClass="confirmRequiredState";this.invalidClass="confirmInvalidState";options.isRequired=Spry.Widget.Utils.firstValid(options.isRequired,true);options.additionalError=Spry.Widget.Utils.firstValid(options.additionalError,false);if(options.additionalError)
options.additionalError=this.getElement(options.additionalError);Spry.Widget.Utils.setOptions(this,options);Spry.Widget.Utils.setOptions(this.options,options);};Spry.Widget.ValidationConfirm.loadQueue=[];Spry.Widget.ValidationConfirm.onloadDidFire=false;Spry.Widget.ValidationConfirm.prototype.getElement=function(ele)
{if(ele&&typeof ele=="string")
ele=document.getElementById(ele);return ele;};Spry.Widget.ValidationConfirm.processLoadQueue=function(handler)
{Spry.Widget.ValidationConfirm.onloadDidFire=true;var q=Spry.Widget.ValidationConfirm.loadQueue;var qlen=q.length;for(var i=0;i<qlen;i++)
q[i].attachBehaviors();};Spry.Widget.ValidationConfirm.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.Widget.ValidationConfirm.addLoadListener(Spry.Widget.ValidationConfirm.processLoadQueue);Spry.Widget.ValidationConfirm.prototype.destroy=function()
{if(this.event_handlers){for(var i=0;i<this.event_handlers.length;i++)
Spry.Widget.Utils.removeEventListener(this.event_handlers[i][0],this.event_handlers[i][1],this.event_handlers[i][2],false);}
try{delete this.element;}catch(err){};try{delete this.input;}catch(err){};try{delete this.event_handlers;}catch(err){};try{delete this.options;}catch(err){};var q=Spry.Widget.Form.onSubmitWidgetQueue;var qlen=q.length;for(var i=0;i<qlen;i++)
if(q[i]==this)
{q.splice(i,1);break;}};Spry.Widget.ValidationConfirm.prototype.attachBehaviors=function()
{if(this.event_handlers&&this.event_handlers.length>0)
return;var handlers=this.event_handlers;if(this.input)
{var self=this;this.input.setAttribute("AutoComplete","off");if(this.validateOn&Spry.Widget.ValidationConfirm.ONCHANGE)
{var changeEvent=Spry.is.mozilla||Spry.is.opera||Spry.is.safari?"input":Spry.is.ie?"propertychange":"change";handlers.push([this.input,changeEvent,function(e){if(self.isDisabled())return true;return self.validate(e||event);}]);if(Spry.is.mozilla||Spry.is.safari)
handlers.push([this.input,"dragdrop",function(e){if(self.isDisabled())return true;return self.validate(e);}]);else if(Spry.is.ie)
handlers.push([this.input,"drop",function(e){if(self.isDisabled())return true;return self.validate(event);}]);}
handlers.push([this.input,"blur",function(e){if(self.isDisabled())return true;return self.onBlur(e||event);}]);handlers.push([this.input,"focus",function(e){if(self.isDisabled())return true;return self.onFocus(e||event);}]);for(var i=0;i<this.event_handlers.length;i++)
Spry.Widget.Utils.addEventListener(this.event_handlers[i][0],this.event_handlers[i][1],this.event_handlers[i][2],false);this.form=Spry.Widget.Utils.getFirstParentWithNodeName(this.input,"FORM");if(this.form)
{if(!this.form.attachedSubmitHandler&&!this.form.onsubmit)
{this.form.onsubmit=function(e){e=e||event;return Spry.Widget.Form.onSubmit(e,e.srcElement||e.currentTarget)};this.form.attachedSubmitHandler=true;}
if(!this.form.attachedResetHandler)
{Spry.Widget.Utils.addEventListener(this.form,"reset",function(e){var e=e||event;return Spry.Widget.Form.onReset(e,e.srcElement||e.currentTarget)},false);this.form.attachedResetHandler=true;}
Spry.Widget.Form.onSubmitWidgetQueue.push(this);}}};Spry.Widget.ValidationConfirm.prototype.reset=function()
{this.switchClassName(this.element,'');this.switchClassName(this.additionalError,'');this.removeClassName(this.element,this.focusClass);this.removeClassName(this.additionalError,this.focusClass);if(Spry.is.ie)
{this.input.forceFireFirstOnPropertyChange=true;this.input.removeAttribute("forceFireFirstOnPropertyChange");}};Spry.Widget.ValidationConfirm.prototype.validate=function(e)
{if(this.isRequired&&this.input.value=='')
{this.switchClassName(this.element,this.requiredClass);this.switchClassName(this.additionalError,this.requiredClass);return false;}
if(this.input.value.length>0&&this.input.value!=this.firstInput.value)
{this.switchClassName(this.element,this.invalidClass);this.switchClassName(this.additionalError,this.invalidClass);return false;}
this.switchClassName(this.element,this.validClass);this.switchClassName(this.additionalError,this.validClass);return true;};Spry.Widget.ValidationConfirm.prototype.onBlur=function(e)
{this.removeClassName(this.element,this.focusClass);this.removeClassName(this.additionalError,this.focusClass);if(this.validateOn&Spry.Widget.ValidationConfirm.ONBLUR)
this.validate(e);};Spry.Widget.ValidationConfirm.prototype.onFocus=function()
{this.addClassName(this.element,this.focusClass);this.addClassName(this.additionalError,this.focusClass);};Spry.Widget.ValidationConfirm.prototype.switchClassName=function(ele,className)
{var classes=[this.validClass,this.requiredClass,this.invalidClass];for(var i=0;i<classes.length;i++)
this.removeClassName(ele,classes[i]);this.addClassName(ele,className);};Spry.Widget.ValidationConfirm.prototype.addClassName=function(ele,className)
{if(!ele||!className||(ele.className&&ele.className.indexOf(className)!=-1&&ele.className.search(new RegExp("\\b"+className+"\\b"))!=-1))
return;ele.className+=(ele.className?" ":"")+className;};Spry.Widget.ValidationConfirm.prototype.removeClassName=function(ele,className)
{if(!ele||!className||(ele.className&&ele.className.indexOf(className)!=-1&&ele.className.search(new RegExp("\\b"+className+"\\b"))==-1))
return;ele.className=ele.className.replace(new RegExp("\\s*\\b"+className+"\\b","g"),"");};Spry.Widget.ValidationConfirm.prototype.isBrowserSupported=function()
{return Spry.is.ie&&Spry.is.v>=5&&Spry.is.windows||Spry.is.mozilla&&Spry.is.v>=1.4||Spry.is.safari||Spry.is.opera&&Spry.is.v>=9;};Spry.Widget.ValidationConfirm.prototype.isDisabled=function()
{return this.input&&(this.input.disabled||this.input.readOnly)||!this.input;};Spry.Widget.ValidationConfirm.prototype.showError=function(msg)
{alert('Spry.ValidationConfirm ERR: '+msg);};if(!Spry.Widget.Form)Spry.Widget.Form={};if(!Spry.Widget.Form.onSubmitWidgetQueue)Spry.Widget.Form.onSubmitWidgetQueue=[];if(!Spry.Widget.Form.validate)
{Spry.Widget.Form.validate=function(vform)
{var isValid=true;var isElementValid=true;var q=Spry.Widget.Form.onSubmitWidgetQueue;var qlen=q.length;for(var i=0;i<qlen;i++)
if(!q[i].isDisabled()&&q[i].form==vform)
{isElementValid=q[i].validate();isValid=isElementValid&&isValid;}
return isValid;};};if(!Spry.Widget.Form.onSubmit)
{Spry.Widget.Form.onSubmit=function(e,form)
{if(Spry.Widget.Form.validate(form)==false)
return false;return true;};};if(!Spry.Widget.Form.onReset)
{Spry.Widget.Form.onReset=function(e,vform)
{var q=Spry.Widget.Form.onSubmitWidgetQueue;var qlen=q.length;for(var i=0;i<qlen;i++)
if(!q[i].isDisabled()&&q[i].form==vform&&typeof(q[i].reset)=='function')
q[i].reset();return true;};};if(!Spry.Widget.Form.destroy)
{Spry.Widget.Form.destroy=function(form)
{var q=Spry.Widget.Form.onSubmitWidgetQueue;for(var i=0;i<Spry.Widget.Form.onSubmitWidgetQueue.length;i++)
if(q[i].form==form&&typeof(q[i].destroy)=='function')
{q[i].destroy();i--;}}};if(!Spry.Widget.Form.destroyAll)
{Spry.Widget.Form.destroyAll=function()
{var q=Spry.Widget.Form.onSubmitWidgetQueue;for(var i=0;i<Spry.Widget.Form.onSubmitWidgetQueue.length;i++)
if(typeof(q[i].destroy)=='function')
{q[i].destroy();i--;}}};if(!Spry.Widget.Utils)Spry.Widget.Utils={};Spry.Widget.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.Widget.Utils.firstValid=function()
{var ret=null;for(var i=0;i<Spry.Widget.Utils.firstValid.arguments.length;i++)
if(typeof Spry.Widget.Utils.firstValid.arguments[i]!='undefined')
{ret=Spry.Widget.Utils.firstValid.arguments[i];break;}
return ret;};Spry.Widget.Utils.getFirstChildWithNodeNameAtAnyLevel=function(node,nodeName)
{var elements=node.getElementsByTagName(nodeName);if(elements){return elements[0];}
return null;};Spry.Widget.Utils.getFirstParentWithNodeName=function(node,nodeName)
{while(node.parentNode&&node.parentNode.nodeName.toLowerCase()!=nodeName.toLowerCase()&&node.parentNode.nodeName!='BODY')
node=node.parentNode;if(node.parentNode&&node.parentNode.nodeName.toLowerCase()==nodeName.toLowerCase())
return node.parentNode;else
return null;};Spry.Widget.Utils.addEventListener=function(element,eventType,handler,capture)
{try
{if(element.addEventListener)
element.addEventListener(eventType,handler,capture);else if(element.attachEvent)
element.attachEvent("on"+eventType,handler,capture);}
catch(e){}};Spry.Widget.Utils.removeEventListener=function(element,eventType,handler,capture)
{try
{if(element.removeEventListener)
element.removeEventListener(eventType,handler,capture);else if(element.detachEvent)
element.detachEvent("on"+eventType,handler,capture);}
catch(e){}};;var Spry;if(!Spry)Spry={};if(!Spry.Widget)Spry.Widget={};Spry.Widget.BrowserSniff=function()
{var b=navigator.appName.toString();var up=navigator.platform.toString();var ua=navigator.userAgent.toString();this.mozilla=this.ie=this.opera=this.safari=false;var re_opera=/Opera.([0-9\.]*)/i;var re_msie=/MSIE.([0-9\.]*)/i;var re_gecko=/gecko/i;var re_safari=/(applewebkit|safari)\/([\d\.]*)/i;var r=false;if((r=ua.match(re_opera))){this.opera=true;this.version=parseFloat(r[1]);}else if((r=ua.match(re_msie))){this.ie=true;this.version=parseFloat(r[1]);}else if((r=ua.match(re_safari))){this.safari=true;this.version=parseFloat(r[2]);}else if(ua.match(re_gecko)){var re_gecko_version=/rv:\s*([0-9\.]+)/i;r=ua.match(re_gecko_version);this.mozilla=true;this.version=parseFloat(r[1]);}
this.windows=this.mac=this.linux=false;this.Platform=ua.match(/windows/i)?"windows":(ua.match(/linux/i)?"linux":(ua.match(/mac/i)?"mac":ua.match(/unix/i)?"unix":"unknown"));this[this.Platform]=true;this.v=this.version;if(this.safari&&this.mac&&this.mozilla){this.mozilla=false;}};Spry.is=new Spry.Widget.BrowserSniff();Spry.Widget.ValidationPassword=function(element,options)
{options=Spry.Widget.Utils.firstValid(options,{});if(!this.isBrowserSupported())
return;if(this.init(element,options)===false)
return false;var validateOn=['submit'].concat(Spry.Widget.Utils.firstValid(this.options.validateOn,[]));validateOn=validateOn.join(",");this.validateOn=0;this.validateOn=this.validateOn|(validateOn.indexOf('submit')!=-1?Spry.Widget.ValidationPassword.ONSUBMIT:0);this.validateOn=this.validateOn|(validateOn.indexOf('blur')!=-1?Spry.Widget.ValidationPassword.ONBLUR:0);this.validateOn=this.validateOn|(validateOn.indexOf('change')!=-1?Spry.Widget.ValidationPassword.ONCHANGE:0);if(Spry.Widget.ValidationPassword.onloadDidFire)
this.attachBehaviors();else
Spry.Widget.ValidationPassword.loadQueue.push(this);};Spry.Widget.ValidationPassword.ONCHANGE=1;Spry.Widget.ValidationPassword.ONBLUR=2;Spry.Widget.ValidationPassword.ONSUBMIT=4;Spry.Widget.ValidationPassword.prototype.init=function(element,options)
{options=Spry.Widget.Utils.firstValid(options,[]);this.options=[];this.element=this.getElement(element);if(!this.element)
{return false;}
else
{if(this.element.nodeName.toUpperCase()=='INPUT'&&typeof this.element.type!='undefined'&&this.element.type.toUpperCase()=='PASSWORD')
{this.input=this.element;}
else
{var inputs=Spry.Widget.Utils.getValidChildrenWithNodeNameAtAnyLevel(this.element,'INPUT','PASSWORD');if(inputs&&inputs.length>0)
this.input=inputs[0];else
this.input=false;}}
if(!this.input)
return false;this.event_handlers=[];this.validClass="passwordValidState";this.focusClass="passwordFocusState";this.requiredClass="passwordRequiredState";this.invalidStrengthClass="passwordInvalidStrengthState";this.invalidCharsMinClass="passwordMinCharsState";this.invalidCharsMaxClass="passwordMaxCharsState";this.invalidCustomClass="passwordCustomState";options.isRequired=Spry.Widget.Utils.firstValid(options.isRequired,true);options.additionalError=Spry.Widget.Utils.firstValid(options.additionalError,false);if(options.additionalError)
options.additionalError=this.getElement(options.additionalError);var getRealValue=Spry.Widget.Utils.getOptionRealValue;options.minChars=getRealValue(options.minChars,false);options.maxChars=getRealValue(options.maxChars,false);if(options.maxChars)
this.input.removeAttribute("maxLength");options.minAlphaChars=getRealValue(options.minAlphaChars,false);options.maxAlphaChars=getRealValue(options.maxAlphaChars,false);options.minUpperAlphaChars=getRealValue(options.minUpperAlphaChars,false);options.maxUpperAlphaChars=getRealValue(options.maxUpperAlphaChars,false);options.minSpecialChars=getRealValue(options.minSpecialChars,false);options.maxSpecialChars=getRealValue(options.maxSpecialChars,false);options.minNumbers=getRealValue(options.minNumbers,false);options.maxNumbers=getRealValue(options.maxNumbers,false);if((options.minAlphaChars!==false&&options.maxAlphaChars!==false&&options.minAlphaChars>options.maxAlphaChars)||(options.minUpperAlphaChars!==false&&options.maxUpperAlphaChars!==false&&options.minUpperAlphaChars>options.maxUpperAlphaChars)||(options.minSpecialChars!==false&&options.maxSpecialChars!==false&&options.minSpecialChars>options.maxSpecialChars)||(options.minNumbers!==false&&options.maxNumbers!==false&&options.minNumbers>options.maxNumbers)||(options.maxUpperAlphaChars!==false&&options.maxAlphaChars!==false&&options.maxUpperAlphaChars>options.maxAlphaChars)||(options.maxChars!==false&&options.minAlphaChars+options.minUpperAlphaChars+options.minSpecialChars+options.minNumbers>options.maxChars))
{this.showError('Invalid Strength Options!');return false;}
Spry.Widget.Utils.setOptions(this,options);Spry.Widget.Utils.setOptions(this.options,options);};Spry.Widget.ValidationPassword.loadQueue=[];Spry.Widget.ValidationPassword.onloadDidFire=false;Spry.Widget.ValidationPassword.prototype.getElement=function(ele)
{if(ele&&typeof ele=="string")
ele=document.getElementById(ele);return ele;};Spry.Widget.ValidationPassword.processLoadQueue=function(handler)
{Spry.Widget.ValidationPassword.onloadDidFire=true;var q=Spry.Widget.ValidationPassword.loadQueue;var qlen=q.length;for(var i=0;i<qlen;i++)
q[i].attachBehaviors();};Spry.Widget.ValidationPassword.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.Widget.ValidationPassword.addLoadListener(Spry.Widget.ValidationPassword.processLoadQueue);Spry.Widget.ValidationPassword.prototype.destroy=function()
{if(this.event_handlers)
for(var i=0;i<this.event_handlers.length;i++)
Spry.Widget.Utils.removeEventListener(this.event_handlers[i][0],this.event_handlers[i][1],this.event_handlers[i][2],false);try{delete this.element;}catch(err){};try{delete this.input;}catch(err){};try{delete this.event_handlers;}catch(err){};try{delete this.options;}catch(err){};var q=Spry.Widget.Form.onSubmitWidgetQueue;var qlen=q.length;for(var i=0;i<qlen;i++)
if(q[i]==this)
{q.splice(i,1);break;}};Spry.Widget.ValidationPassword.prototype.attachBehaviors=function()
{if(this.event_handlers&&this.event_handlers.length>0)
return;var handlers=this.event_handlers;if(this.input)
{var self=this;this.input.setAttribute("AutoComplete","off");if(this.validateOn&Spry.Widget.ValidationPassword.ONCHANGE)
{var changeEvent=Spry.is.mozilla||Spry.is.opera||Spry.is.safari?"input":Spry.is.ie?"propertychange":"change";handlers.push([this.input,changeEvent,function(e){if(self.isDisabled())return true;return self.validate(e||event);}]);if(Spry.is.mozilla||Spry.is.safari)
handlers.push([this.input,"dragdrop",function(e){if(self.isDisabled())return true;return self.validate(e);}]);else if(Spry.is.ie)
handlers.push([this.input,"drop",function(e){if(self.isDisabled())return true;return self.validate(event);}]);}
handlers.push([this.input,"blur",function(e){if(self.isDisabled())return true;return self.onBlur(e||event);}]);handlers.push([this.input,"focus",function(e){if(self.isDisabled())return true;return self.onFocus(e||event);}]);for(var i=0;i<this.event_handlers.length;i++)
Spry.Widget.Utils.addEventListener(this.event_handlers[i][0],this.event_handlers[i][1],this.event_handlers[i][2],false);this.form=Spry.Widget.Utils.getFirstParentWithNodeName(this.input,"FORM");if(this.form)
{if(!this.form.attachedSubmitHandler&&!this.form.onsubmit)
{this.form.onsubmit=function(e){e=e||event;return Spry.Widget.Form.onSubmit(e,e.srcElement||e.currentTarget)};this.form.attachedSubmitHandler=true;}
if(!this.form.attachedResetHandler)
{Spry.Widget.Utils.addEventListener(this.form,"reset",function(e){var e=e||event;return Spry.Widget.Form.onReset(e,e.srcElement||e.currentTarget)},false);this.form.attachedResetHandler=true;}
Spry.Widget.Form.onSubmitWidgetQueue.push(this);}}};Spry.Widget.ValidationPassword.prototype.reset=function()
{this.switchClassName(this.element,'');this.switchClassName(this.additionalError,'');this.removeClassName(this.element,this.focusClass);this.removeClassName(this.additionalError,this.focusClass);if(Spry.is.ie)
{this.input.forceFireFirstOnPropertyChange=true;this.input.removeAttribute("forceFireFirstOnPropertyChange");}};Spry.Widget.ValidationPassword.prototype.validateLength=function(e)
{var opt=this.options;if(this.isRequired&&this.input.value=='')
return this.requiredClass;if(opt.minChars>0&&this.input.value.length<opt.minChars)
return this.invalidCharsMinClass;if(opt.maxChars!==false&&this.input.value.length>opt.maxChars)
return this.invalidCharsMaxClass;return true;};Spry.Widget.ValidationPassword.prototype.validateStrength=function(e)
{var opt=this.options;var value=this.input.value;if(opt.minAlphaChars!==false||opt.maxAlphaChars!==false)
{var alphaChars=value.replace(/[^a-z]/ig,'').length;if((opt.maxAlphaChars!==false&&alphaChars>opt.maxAlphaChars)||(opt.minAlphaChars!==false&&alphaChars<opt.minAlphaChars))
return false;}
if(opt.minUpperAlphaChars!==false||opt.maxUpperAlphaChars!==false)
{var upperAlphaChars=value.replace(/[^A-Z]/g,'').length;if((opt.maxUpperAlphaChars!==false&&upperAlphaChars>opt.maxUpperAlphaChars)||(opt.minUpperAlphaChars!==false&&upperAlphaChars<opt.minUpperAlphaChars))
return false;}
if(opt.minNumbers!==false||opt.maxNumbers!==false)
{var numbers=value.replace(/[^0-9]/g,'').length;if((opt.maxNumbers!==false&&numbers>opt.maxNumbers)||(opt.minNumbers!==false&&numbers<opt.minNumbers))
return false;}
if(opt.minSpecialChars!==false||opt.maxSpecialChars!==false)
{var specials=value.replace(/[a-z0-9]/ig,'').length;if((opt.maxSpecialChars!==false&&specials>opt.maxSpecialChars)||(opt.minSpecialChars!==false&&specials<opt.minSpecialChars))
return false;}
return true;};Spry.Widget.ValidationPassword.prototype.validate=function(e)
{var vLength=this.validateLength(e);if(vLength!==true)
{this.switchClassName(this.element,vLength);this.switchClassName(this.additionalError,vLength);return false;}
var vStrength=this.validateStrength(e);if(vStrength!==true)
{this.switchClassName(this.element,this.invalidStrengthClass);this.switchClassName(this.additionalError,this.invalidStrengthClass);return false;}
if(typeof this.options.validation=='function')
{var customValidation=this.options.validation(this.input.value,this.options);if(customValidation!==true)
{this.switchClassName(this.element,this.invalidCustomClass);return false;}}
this.switchClassName(this.element,this.validClass);this.switchClassName(this.additionalError,this.validClass);return true;};Spry.Widget.ValidationPassword.prototype.onBlur=function(e)
{this.removeClassName(this.element,this.focusClass);this.removeClassName(this.additionalError,this.focusClass);if(this.validateOn&Spry.Widget.ValidationPassword.ONBLUR)
this.validate(e);};Spry.Widget.ValidationPassword.prototype.onFocus=function()
{this.addClassName(this.element,this.focusClass);this.addClassName(this.additionalError,this.focusClass);};Spry.Widget.ValidationPassword.prototype.switchClassName=function(ele,className)
{var classes=[this.validClass,this.requiredClass,this.invalidCharsMaxClass,this.invalidCharsMinClass,this.invalidStrengthClass,this.invalidCustomClass];for(var i=0;i<classes.length;i++)
this.removeClassName(ele,classes[i]);this.addClassName(ele,className);};Spry.Widget.ValidationPassword.prototype.addClassName=function(ele,className)
{if(!ele||!className||(ele.className&&ele.className.indexOf(className)!=-1&&ele.className.search(new RegExp("\\b"+className+"\\b"))!=-1))
return;ele.className+=(ele.className?" ":"")+className;};Spry.Widget.ValidationPassword.prototype.removeClassName=function(ele,className)
{if(!ele||!className||(ele.className&&ele.className.indexOf(className)!=-1&&ele.className.search(new RegExp("\\b"+className+"\\b"))==-1))
return;ele.className=ele.className.replace(new RegExp("\\s*\\b"+className+"\\b","g"),"");};Spry.Widget.ValidationPassword.prototype.isBrowserSupported=function()
{return Spry.is.ie&&Spry.is.v>=5&&Spry.is.windows||Spry.is.mozilla&&Spry.is.v>=1.4||Spry.is.safari||Spry.is.opera&&Spry.is.v>=9;};Spry.Widget.ValidationPassword.prototype.isDisabled=function()
{return this.input&&(this.input.disabled||this.input.readOnly)||!this.input;};Spry.Widget.ValidationPassword.prototype.showError=function(msg)
{alert('Spry.ValidationPassword ERR: '+msg);};if(!Spry.Widget.Form)Spry.Widget.Form={};if(!Spry.Widget.Form.onSubmitWidgetQueue)Spry.Widget.Form.onSubmitWidgetQueue=[];if(!Spry.Widget.Form.validate)
{Spry.Widget.Form.validate=function(vform)
{var isValid=true;var isElementValid=true;var q=Spry.Widget.Form.onSubmitWidgetQueue;var qlen=q.length;for(var i=0;i<qlen;i++)
if(!q[i].isDisabled()&&q[i].form==vform)
{isElementValid=q[i].validate();isValid=isElementValid&&isValid;}
return isValid;};};if(!Spry.Widget.Form.onSubmit)
{Spry.Widget.Form.onSubmit=function(e,form)
{if(Spry.Widget.Form.validate(form)==false)
return false;return true;};};if(!Spry.Widget.Form.onReset)
{Spry.Widget.Form.onReset=function(e,vform)
{var q=Spry.Widget.Form.onSubmitWidgetQueue;var qlen=q.length;for(var i=0;i<qlen;i++)
if(!q[i].isDisabled()&&q[i].form==vform&&typeof(q[i].reset)=='function')
q[i].reset();return true;};};if(!Spry.Widget.Form.destroy)
{Spry.Widget.Form.destroy=function(form)
{var q=Spry.Widget.Form.onSubmitWidgetQueue;for(var i=0;i<Spry.Widget.Form.onSubmitWidgetQueue.length;i++)
if(q[i].form==form&&typeof(q[i].destroy)=='function')
{q[i].destroy();i--;}}};if(!Spry.Widget.Form.destroyAll)
{Spry.Widget.Form.destroyAll=function()
{var q=Spry.Widget.Form.onSubmitWidgetQueue;for(var i=0;i<Spry.Widget.Form.onSubmitWidgetQueue.length;i++)
if(typeof(q[i].destroy)=='function')
{q[i].destroy();i--;}}};if(!Spry.Widget.Utils)Spry.Widget.Utils={};Spry.Widget.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.Widget.Utils.firstValid=function()
{var ret=null;for(var i=0;i<Spry.Widget.Utils.firstValid.arguments.length;i++)
if(typeof Spry.Widget.Utils.firstValid.arguments[i]!='undefined')
{ret=Spry.Widget.Utils.firstValid.arguments[i];break;}
return ret;};Spry.Widget.Utils.getOptionRealValue=function(option,alternate)
{var value=Spry.Widget.Utils.firstValid(option,alternate);if(value!==false)
value=parseInt(value,10);if(isNaN(value)||value<0)
value=false;return value;};Spry.Widget.Utils.getValidChildrenWithNodeNameAtAnyLevel=function(node,nodeName,type)
{var elements=node.getElementsByTagName(nodeName);var to_return=[];var j=0;if(elements)
{for(var i=0;i<elements.length;i++)
if(typeof elements[i].type!='undefined'&&elements[i].type.toUpperCase()==type.toUpperCase())
{to_return[j]=elements[i];j++;}}
return to_return;};Spry.Widget.Utils.getFirstParentWithNodeName=function(node,nodeName)
{while(node.parentNode&&node.parentNode.nodeName.toLowerCase()!=nodeName.toLowerCase()&&node.parentNode.nodeName!='BODY')
node=node.parentNode;if(node.parentNode&&node.parentNode.nodeName.toLowerCase()==nodeName.toLowerCase())
return node.parentNode;else
return null;};Spry.Widget.Utils.addEventListener=function(element,eventType,handler,capture)
{try
{if(element.addEventListener)
element.addEventListener(eventType,handler,capture);else if(element.attachEvent)
element.attachEvent("on"+eventType,handler,capture);}
catch(e){}};Spry.Widget.Utils.removeEventListener=function(element,eventType,handler,capture)
{try
{if(element.removeEventListener)
element.removeEventListener(eventType,handler,capture);else if(element.detachEvent)
element.detachEvent("on"+eventType,handler,capture);}
catch(e){}};;var Spry;if(!Spry)Spry={};if(!Spry.Widget)Spry.Widget={};Spry.Widget.BrowserSniff=function()
{var b=navigator.appName.toString();var up=navigator.platform.toString();var ua=navigator.userAgent.toString();this.mozilla=this.ie=this.opera=this.safari=false;var re_opera=/Opera.([0-9\.]*)/i;var re_msie=/MSIE.([0-9\.]*)/i;var re_gecko=/gecko/i;var re_safari=/(applewebkit|safari)\/([\d\.]*)/i;var r=false;if((r=ua.match(re_opera))){this.opera=true;this.version=parseFloat(r[1]);}else if((r=ua.match(re_msie))){this.ie=true;this.version=parseFloat(r[1]);}else if((r=ua.match(re_safari))){this.safari=true;this.version=parseFloat(r[2]);}else if(ua.match(re_gecko)){var re_gecko_version=/rv:\s*([0-9\.]+)/i;r=ua.match(re_gecko_version);this.mozilla=true;this.version=parseFloat(r[1]);}
this.windows=this.mac=this.linux=false;this.Platform=ua.match(/windows/i)?"windows":(ua.match(/linux/i)?"linux":(ua.match(/mac/i)?"mac":ua.match(/unix/i)?"unix":"unknown"));this[this.Platform]=true;this.v=this.version;if(this.safari&&this.mac&&this.mozilla){this.mozilla=false;}};Spry.is=new Spry.Widget.BrowserSniff();Spry.Widget.ValidationTextField=function(element,type,options)
{type=Spry.Widget.Utils.firstValid(type,"none");if(typeof type!='string'){this.showError('The second parameter in the constructor should be the validation type, the options are the third parameter.');return;}
if(typeof Spry.Widget.ValidationTextField.ValidationDescriptors[type]=='undefined'){this.showError('Unknown validation type received as the second parameter.');return;}
options=Spry.Widget.Utils.firstValid(options,{});this.type=type;if(!this.isBrowserSupported()){options.useCharacterMasking=false;}
this.init(element,options);var validateOn=['submit'].concat(Spry.Widget.Utils.firstValid(this.options.validateOn,[]));validateOn=validateOn.join(",");this.validateOn=0;this.validateOn=this.validateOn|(validateOn.indexOf('submit')!=-1?Spry.Widget.ValidationTextField.ONSUBMIT:0);this.validateOn=this.validateOn|(validateOn.indexOf('blur')!=-1?Spry.Widget.ValidationTextField.ONBLUR:0);this.validateOn=this.validateOn|(validateOn.indexOf('change')!=-1?Spry.Widget.ValidationTextField.ONCHANGE:0);if(Spry.Widget.ValidationTextField.onloadDidFire)
this.attachBehaviors();else
Spry.Widget.ValidationTextField.loadQueue.push(this);};Spry.Widget.ValidationTextField.ONCHANGE=1;Spry.Widget.ValidationTextField.ONBLUR=2;Spry.Widget.ValidationTextField.ONSUBMIT=4;Spry.Widget.ValidationTextField.ERROR_REQUIRED=1;Spry.Widget.ValidationTextField.ERROR_FORMAT=2;Spry.Widget.ValidationTextField.ERROR_RANGE_MIN=4;Spry.Widget.ValidationTextField.ERROR_RANGE_MAX=8;Spry.Widget.ValidationTextField.ERROR_CHARS_MIN=16;Spry.Widget.ValidationTextField.ERROR_CHARS_MAX=32;Spry.Widget.ValidationTextField.ValidationDescriptors={'none':{},'custom':{},'integer':{characterMasking:/[\-\+\d]/,regExpFilter:/^[\-\+]?\d*$/,validation:function(value,options){if(value==''||value=='-'||value=='+'){return false;}
var regExp=/^[\-\+]?\d*$/;if(!regExp.test(value)){return false;}
options=options||{allowNegative:false};var ret=parseInt(value,10);if(!isNaN(ret)){var allowNegative=true;if(typeof options.allowNegative!='undefined'&&options.allowNegative==false){allowNegative=false;}
if(!allowNegative&&value<0){ret=false;}}else{ret=false;}
return ret;}},'real':{characterMasking:/[\d\.,\-\+e]/i,regExpFilter:/^[\-\+]?\d(?:|\.,\d{0,2})|(?:|e{0,1}[\-\+]?\d{0,})$/i,validation:function(value,options){var regExp=/^[\+\-]?[0-9]+([\.,][0-9]+)?([eE]{0,1}[\-\+]?[0-9]+)?$/;if(!regExp.test(value)){return false;}
var ret=parseFloat(value);if(isNaN(ret)){ret=false;}
return ret;}},'currency':{formats:{'dot_comma':{characterMasking:/[\d\.\,\-\+\$]/,regExpFilter:/^[\-\+]?(?:[\d\.]*)+(|\,\d{0,2})$/,validation:function(value,options){var ret=false;if(/^(\-|\+)?\d{1,3}(?:\.\d{3})*(?:\,\d{2}|)$/.test(value)||/^(\-|\+)?\d+(?:\,\d{2}|)$/.test(value)){value=value.toString().replace(/\./gi,'').replace(/\,/,'.');ret=parseFloat(value);}
return ret;}},'comma_dot':{characterMasking:/[\d\.\,\-\+\$]/,regExpFilter:/^[\-\+]?(?:[\d\,]*)+(|\.\d{0,2})$/,validation:function(value,options){var ret=false;if(/^(\-|\+)?\d{1,3}(?:\,\d{3})*(?:\.\d{2}|)$/.test(value)||/^(\-|\+)?\d+(?:\.\d{2}|)$/.test(value)){value=value.toString().replace(/\,/gi,'');ret=parseFloat(value);}
return ret;}}}},'email':{characterMasking:/[^\s]/,validation:function(value,options){var rx=/^[a-z0-9!#$%&'*+\/=?\^_`{|}~\-]+(?:\.[a-z0-9!#$%&'*+\/=?\^_`{|}~\-]+)*@(?:[a-z0-9](?:[a-z0-9\-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9\-]*[a-z0-9])?$/i;return rx.test(value);}},'emails':{validation:function(value,options){var rx=/^([a-z0-9!#$%&'*+\/=?\^_`{|}~\-]+(?:\.[a-z0-9!#$%&'*+\/=?\^_`{|}~\-]+)*@(?:[a-z0-9](?:[a-z0-9\-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9\-]*[a-z0-9])?)(,\s*([a-z0-9!#$%&'*+\/=?\^_`{|}~\-]+(?:\.[a-z0-9!#$%&'*+\/=?\^_`{|}~\-]+)*@(?:[a-z0-9](?:[a-z0-9\-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9\-]*[a-z0-9])?))*$/i;return rx.test(value);}},'date':{validation:function(value,options){var formatRegExp=/^([mdy]+)[\.\-\/\\\s]+([mdy]+)[\.\-\/\\\s]+([mdy]+)$/i;var valueRegExp=this.dateValidationPattern;var formatGroups=options.format.match(formatRegExp);var valueGroups=value.match(valueRegExp);if(formatGroups!==null&&valueGroups!==null){var dayIndex=-1;var monthIndex=-1;var yearIndex=-1;for(var i=1;i<formatGroups.length;i++){switch(formatGroups[i].toLowerCase()){case"dd":dayIndex=i;break;case"mm":monthIndex=i;break;case"yy":case"yyyy":yearIndex=i;break;}}
if(dayIndex!=-1&&monthIndex!=-1&&yearIndex!=-1){var maxDay=-1;var theDay=parseInt(valueGroups[dayIndex],10);var theMonth=parseInt(valueGroups[monthIndex],10);var theYear=parseInt(valueGroups[yearIndex],10);if(theMonth<1||theMonth>12){return false;}
switch(theMonth){case 1:case 3:case 5:case 7:case 8:case 10:case 12:maxDay=31;break;case 4:case 6:case 9:case 11:maxDay=30;break;case 2:if((parseInt(theYear/4,10)*4==theYear)&&(theYear%100!=0||theYear%400==0)){maxDay=29;}else{maxDay=28;}
break;}
if(theDay<1||theDay>maxDay){return false;}
return(new Date(theYear,theMonth-1,theDay));}}else{return false;}}},'time':{validation:function(value,options){var formatRegExp=/([hmst]+)/gi;var valueRegExp=/(\d+|AM?|PM?)/gi;var formatGroups=options.format.match(formatRegExp);var valueGroups=value.match(valueRegExp);if(formatGroups!==null&&valueGroups!==null){if(formatGroups.length!=valueGroups.length){return false;}
var hourIndex=-1;var minuteIndex=-1;var secondIndex=-1;var tIndex=-1;var theHour=0,theMinute=0,theSecond=0,theT='AM';for(var i=0;i<formatGroups.length;i++){switch(formatGroups[i].toLowerCase()){case"hh":hourIndex=i;break;case"mm":minuteIndex=i;break;case"ss":secondIndex=i;break;case"t":case"tt":tIndex=i;break;}}
if(hourIndex!=-1){var theHour=parseInt(valueGroups[hourIndex],10);if(isNaN(theHour)||theHour>(formatGroups[hourIndex]=='HH'?23:12)){return false;}}
if(minuteIndex!=-1){var theMinute=parseInt(valueGroups[minuteIndex],10);if(isNaN(theMinute)||theMinute>59){return false;}}
if(secondIndex!=-1){var theSecond=parseInt(valueGroups[secondIndex],10);if(isNaN(theSecond)||theSecond>59){return false;}}
if(tIndex!=-1){var theT=valueGroups[tIndex].toUpperCase();if(formatGroups[tIndex].toUpperCase()=='TT'&&!/^a|pm$/i.test(theT)||formatGroups[tIndex].toUpperCase()=='T'&&!/^a|p$/i.test(theT)){return false;}}
var date=new Date(2000,0,1,theHour+(theT.charAt(0)=='P'?12:0),theMinute,theSecond);return date;}else{return false;}}},'credit_card':{characterMasking:/\d/,validation:function(value,options){var regExp=null;options.format=options.format||'ALL';switch(options.format.toUpperCase()){case'ALL':regExp=/^[3-6]{1}[0-9]{12,18}$/;break;case'VISA':regExp=/^4(?:[0-9]{12}|[0-9]{15})$/;break;case'MASTERCARD':regExp=/^5[1-5]{1}[0-9]{14}$/;break;case'AMEX':regExp=/^3(4|7){1}[0-9]{13}$/;break;case'DISCOVER':regExp=/^6011[0-9]{12}$/;break;case'DINERSCLUB':regExp=/^3(?:(0[0-5]{1}[0-9]{11})|(6[0-9]{12})|(8[0-9]{12}))$/;break;}
if(!regExp.test(value)){return false;}
var digits=[];var j=1,digit='';for(var i=value.length-1;i>=0;i--){if((j%2)==0){digit=parseInt(value.charAt(i),10)*2;digits[digits.length]=digit.toString().charAt(0);if(digit.toString().length==2){digits[digits.length]=digit.toString().charAt(1);}}else{digit=value.charAt(i);digits[digits.length]=digit;}
j++;}
var sum=0;for(i=0;i<digits.length;i++){sum+=parseInt(digits[i],10);}
if((sum%10)==0){return true;}
return false;}},'zip_code':{formats:{'zip_us9':{pattern:'00000-0000'},'zip_us5':{pattern:'00000'},'zip_uk':{characterMasking:/[\dA-Z\s]/,validation:function(value,options){var strPattern=/^[A-Z]{1,2}\d[\dA-Z]?\s?\d[A-Z]{2}$/i;return strPattern.test(value);}},'zip_canada':{characterMasking:/[\dA-Z\s]/,pattern:'B0B 0B0'},'zip_custom':{}}},'phone_number':{formats:{'phone_us':{pattern:'(000) 000-0000'},'phone_custom':{}}},'social_security_number':{pattern:'000-00-0000'},'ip':{characterMaskingFormats:{'ipv4':/[\d\.]/i,'ipv6_ipv4':/[\d\.\:A-F\/]/i,'ipv6':/[\d\.\:A-F\/]/i},validation:function(value,options){return Spry.Widget.ValidationTextField.validateIP(value,options.format);}},'url':{characterMasking:/[^\s]/,validation:function(value,options){var URI_spliter=/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;var parts=value.match(URI_spliter);if(parts&&parts[4]){var host=parts[4].split(".");var punyencoded='';for(var i=0;i<host.length;i++){punyencoded=Spry.Widget.Utils.punycode_encode(host[i],64);if(!punyencoded){return false;}else{if(punyencoded!=(host[i]+"-")){host[i]='xn--'+punyencoded;}}}
host=host.join(".");value=value.replace(URI_spliter,"$1//"+host+"$5$6$8");}
var regExp=/^(?:https?|ftp)\:\/\/(?:(?:[a-z0-9\-\._~\!\$\&\'\(\)\*\+\,\;\=:]|%[0-9a-f]{2,2})*\@)?(?:((?:(?:[a-z0-9][a-z0-9\-]*[a-z0-9]|[a-z0-9])\.)*(?:[a-z][a-z0-9\-]*[a-z0-9]|[a-z])|(?:\[[^\]]*\]))(?:\:[0-9]*)?)(?:\/(?:[a-z0-9\-\._~\!\$\&\'\(\)\*\+\,\;\=\:\@]|%[0-9a-f]{2,2})*)*(?:\?(?:[a-z0-9\-\._~\!\$\&\'\(\)\*\+\,\;\=\:\@\/\?]|%[0-9a-f]{2,2})*)?(?:\#(?:[a-z0-9\-\._~\!\$\&\'\(\)\*\+\,\;\=\:\@\/\?]|%[0-9a-f]{2,2})*)?$/i;var valid=value.match(regExp);if(valid){var address=valid[1];if(address){if(address=='[]'){return false;}
if(address.charAt(0)=='['){address=address.replace(/^\[|\]$/gi,'');return Spry.Widget.ValidationTextField.validateIP(address,'ipv6_ipv4');}else{if(/[^0-9\.]/.test(address)){return true;}else{return Spry.Widget.ValidationTextField.validateIP(address,'ipv4');}}}else{return true;}}else{return false;}}},'weakurl':{characterMasking:/[^\s]/,validation:function(value,options){var URI_spliter=/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;var parts=value.match(URI_spliter);if(parts&&parts[4]){var host=parts[4].split(".");var punyencoded='';for(var i=0;i<host.length;i++){punyencoded=Spry.Widget.Utils.punycode_encode(host[i],64);if(!punyencoded){return false;}else{if(punyencoded!=(host[i]+"-")){host[i]='xn--'+punyencoded;}}}
host=host.join(".");value=value.replace(URI_spliter,"$1//"+host+"$5$6$8");}
var regExp=/^((?:https?|ftp)\:\/\/)?(?:(?:[a-z0-9\-\._~\!\$\&\'\(\)\*\+\,\;\=:]|%[0-9a-f]{2,2})*\@)?(?:((?:(?:[a-z0-9][a-z0-9\-]*[a-z0-9]|[a-z0-9])\.)*(?:[a-z][a-z0-9\-]*[a-z0-9]|[a-z])|(?:\[[^\]]*\]))(?:\:[0-9]*)?)(?:\/(?:[a-z0-9\-\._~\!\$\&\'\(\)\*\+\,\;\=\:\@]|%[0-9a-f]{2,2})*)*(?:\?(?:[a-z0-9\-\._~\!\$\&\'\(\)\*\+\,\;\=\:\@\/\?]|%[0-9a-f]{2,2})*)?(?:\#(?:[a-z0-9\-\._~\!\$\&\'\(\)\*\+\,\;\=\:\@\/\?]|%[0-9a-f]{2,2})*)?$/i;var valid=value.match(regExp);if(valid){var address=valid[1];if(address){if(address=='[]'){return false;}
if(address.charAt(0)=='['){address=address.replace(/^\[|\]$/gi,'');return Spry.Widget.ValidationTextField.validateIP(address,'ipv6_ipv4');}else{if(/[^0-9\.]/.test(address)){return true;}else{return Spry.Widget.ValidationTextField.validateIP(address,'ipv4');}}}else{return true;}}else{return false;}}}};Spry.Widget.ValidationTextField.validateIP=function(value,format)
{var validIPv6Addresses=[/^(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}(?:\/\d{1,3})?$/i,/^[a-f0-9]{0,4}::(?:\/\d{1,3})?$/i,/^:(?::[a-f0-9]{1,4}){1,6}(?:\/\d{1,3})?$/i,/^(?:[a-f0-9]{1,4}:){1,6}:(?:\/\d{1,3})?$/i,/^(?:[a-f0-9]{1,4}:)(?::[a-f0-9]{1,4}){1,6}(?:\/\d{1,3})?$/i,/^(?:[a-f0-9]{1,4}:){2}(?::[a-f0-9]{1,4}){1,5}(?:\/\d{1,3})?$/i,/^(?:[a-f0-9]{1,4}:){3}(?::[a-f0-9]{1,4}){1,4}(?:\/\d{1,3})?$/i,/^(?:[a-f0-9]{1,4}:){4}(?::[a-f0-9]{1,4}){1,3}(?:\/\d{1,3})?$/i,/^(?:[a-f0-9]{1,4}:){5}(?::[a-f0-9]{1,4}){1,2}(?:\/\d{1,3})?$/i,/^(?:[a-f0-9]{1,4}:){6}(?::[a-f0-9]{1,4})(?:\/\d{1,3})?$/i,/^(?:[a-f0-9]{1,4}:){6}(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{1,3})?$/i,/^:(?::[a-f0-9]{1,4}){0,4}:(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{1,3})?$/i,/^(?:[a-f0-9]{1,4}:){1,5}:(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{1,3})?$/i,/^(?:[a-f0-9]{1,4}:)(?::[a-f0-9]{1,4}){1,4}:(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{1,3})?$/i,/^(?:[a-f0-9]{1,4}:){2}(?::[a-f0-9]{1,4}){1,3}:(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{1,3})?$/i,/^(?:[a-f0-9]{1,4}:){3}(?::[a-f0-9]{1,4}){1,2}:(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{1,3})?$/i,/^(?:[a-f0-9]{1,4}:){4}(?::[a-f0-9]{1,4}):(?:\d{1,3}\.){3}\d{1,3}(?:\/\d{1,3})?$/i];var validIPv4Addresses=[/^(\d{1,3}\.){3}\d{1,3}$/i];var validAddresses=[];if(format=='ipv6'||format=='ipv6_ipv4'){validAddresses=validAddresses.concat(validIPv6Addresses);}
if(format=='ipv4'||format=='ipv6_ipv4'){validAddresses=validAddresses.concat(validIPv4Addresses);}
var ret=false;for(var i=0;i<validAddresses.length;i++){if(validAddresses[i].test(value)){ret=true;break;}}
if(ret&&value.indexOf(".")!=-1){var ipv4=value.match(/:?(?:\d{1,3}\.){3}\d{1,3}/i);if(!ipv4){return false;}
ipv4=ipv4[0].replace(/^:/,'');var pieces=ipv4.split('.');if(pieces.length!=4){return false;}
var regExp=/^[\-\+]?\d*$/;for(var i=0;i<pieces.length;i++){if(pieces[i]==''){return false;}
var piece=parseInt(pieces[i],10);if(isNaN(piece)||piece>255||!regExp.test(pieces[i])||pieces[i].length>3||/^0{2,3}$/.test(pieces[i])){return false;}}}
if(ret&&value.indexOf("/")!=-1){var prefLen=value.match(/\/\d{1,3}$/);if(!prefLen)return false;var prefLenVal=parseInt(prefLen[0].replace(/^\//,''),10);if(isNaN(prefLenVal)||prefLenVal>128||prefLenVal<1){return false;}}
return ret;};Spry.Widget.ValidationTextField.onloadDidFire=false;Spry.Widget.ValidationTextField.loadQueue=[];Spry.Widget.ValidationTextField.prototype.isBrowserSupported=function()
{return Spry.is.ie&&Spry.is.v>=5&&Spry.is.windows||Spry.is.mozilla&&Spry.is.v>=1.4||Spry.is.safari||Spry.is.opera&&Spry.is.v>=9;};Spry.Widget.ValidationTextField.prototype.init=function(element,options)
{this.element=this.getElement(element);this.errors=0;this.flags={locked:false,restoreSelection:true};this.options={};this.event_handlers=[];this.validClass="textfieldValidState";this.focusClass="textfieldFocusState";this.requiredClass="textfieldRequiredState";this.hintClass="textfieldHintState";this.invalidFormatClass="textfieldInvalidFormatState";this.invalidRangeMinClass="textfieldMinValueState";this.invalidRangeMaxClass="textfieldMaxValueState";this.invalidCharsMinClass="textfieldMinCharsState";this.invalidCharsMaxClass="textfieldMaxCharsState";this.textfieldFlashTextClass="textfieldFlashText";if(Spry.is.safari){this.flags.lastKeyPressedTimeStamp=0;}
switch(this.type){case'phone_number':options.format=Spry.Widget.Utils.firstValid(options.format,'phone_us');break;case'currency':options.format=Spry.Widget.Utils.firstValid(options.format,'comma_dot');break;case'zip_code':options.format=Spry.Widget.Utils.firstValid(options.format,'zip_us5');break;case'date':options.format=Spry.Widget.Utils.firstValid(options.format,'mm/dd/yy');break;case'time':options.format=Spry.Widget.Utils.firstValid(options.format,'HH:mm');options.pattern=options.format.replace(/[hms]/gi,"0").replace(/TT/gi,'AM').replace(/T/gi,'A');break;case'ip':options.format=Spry.Widget.Utils.firstValid(options.format,'ipv4');options.characterMasking=Spry.Widget.ValidationTextField.ValidationDescriptors[this.type].characterMaskingFormats[options.format];break;}
var validationDescriptor={};if(options.format&&Spry.Widget.ValidationTextField.ValidationDescriptors[this.type].formats){if(Spry.Widget.ValidationTextField.ValidationDescriptors[this.type].formats[options.format]){Spry.Widget.Utils.setOptions(validationDescriptor,Spry.Widget.ValidationTextField.ValidationDescriptors[this.type].formats[options.format]);}}else{Spry.Widget.Utils.setOptions(validationDescriptor,Spry.Widget.ValidationTextField.ValidationDescriptors[this.type]);}
options.useCharacterMasking=Spry.Widget.Utils.firstValid(options.useCharacterMasking,false);options.hint=Spry.Widget.Utils.firstValid(options.hint,'');options.isRequired=Spry.Widget.Utils.firstValid(options.isRequired,true);options.additionalError=Spry.Widget.Utils.firstValid(options.additionalError,false);if(options.additionalError)
options.additionalError=this.getElement(options.additionalError);options.characterMasking=Spry.Widget.Utils.firstValid(options.characterMasking,validationDescriptor.characterMasking);options.regExpFilter=Spry.Widget.Utils.firstValid(options.regExpFilter,validationDescriptor.regExpFilter);options.pattern=Spry.Widget.Utils.firstValid(options.pattern,validationDescriptor.pattern);options.validation=Spry.Widget.Utils.firstValid(options.validation,validationDescriptor.validation);if(typeof options.validation=='string'){options.validation=eval(options.validation);}
options.minValue=Spry.Widget.Utils.firstValid(options.minValue,validationDescriptor.minValue);options.maxValue=Spry.Widget.Utils.firstValid(options.maxValue,validationDescriptor.maxValue);options.minChars=Spry.Widget.Utils.firstValid(options.minChars,validationDescriptor.minChars);options.maxChars=Spry.Widget.Utils.firstValid(options.maxChars,validationDescriptor.maxChars);Spry.Widget.Utils.setOptions(this,options);Spry.Widget.Utils.setOptions(this.options,options);};Spry.Widget.ValidationTextField.prototype.destroy=function(){if(this.event_handlers)
for(var i=0;i<this.event_handlers.length;i++){Spry.Widget.Utils.removeEventListener(this.event_handlers[i][0],this.event_handlers[i][1],this.event_handlers[i][2],false);}
try{delete this.element;}catch(err){}
try{delete this.input;}catch(err){}
try{delete this.form;}catch(err){}
try{delete this.event_handlers;}catch(err){}
try{this.selection.destroy();}catch(err){}
try{delete this.selection;}catch(err){}
var q=Spry.Widget.Form.onSubmitWidgetQueue;var qlen=q.length;for(var i=0;i<qlen;i++){if(q[i]==this){q.splice(i,1);break;}}};Spry.Widget.ValidationTextField.prototype.attachBehaviors=function()
{if(this.element){if(this.element.nodeName=="INPUT"){this.input=this.element;}else{this.input=Spry.Widget.Utils.getFirstChildWithNodeNameAtAnyLevel(this.element,"INPUT");}}
if(this.input){if(this.maxChars){this.input.removeAttribute("maxLength");}
this.putHint();this.compilePattern();if(this.type=='date'){this.compileDatePattern();}
this.input.setAttribute("AutoComplete","off");this.selection=new Spry.Widget.SelectionDescriptor(this.input);this.oldValue=this.input.value;var self=this;this.event_handlers=[];this.event_handlers.push([this.input,"keydown",function(e){if(self.isDisabled())return true;return self.onKeyDown(e||event);}]);this.event_handlers.push([this.input,"keypress",function(e){if(self.isDisabled())return true;return self.onKeyPress(e||event);}]);if(Spry.is.opera){this.event_handlers.push([this.input,"keyup",function(e){if(self.isDisabled())return true;return self.onKeyUp(e||event);}]);}
this.event_handlers.push([this.input,"focus",function(e){if(self.isDisabled())return true;return self.onFocus(e||event);}]);this.event_handlers.push([this.input,"blur",function(e){if(self.isDisabled())return true;return self.onBlur(e||event);}]);this.event_handlers.push([this.input,"mousedown",function(e){if(self.isDisabled())return true;return self.onMouseDown(e||event);}]);var changeEvent=Spry.is.mozilla||Spry.is.opera||Spry.is.safari?"input":Spry.is.ie?"propertychange":"change";this.event_handlers.push([this.input,changeEvent,function(e){if(self.isDisabled())return true;return self.onChange(e||event);}]);if(Spry.is.mozilla||Spry.is.safari){this.event_handlers.push([this.input,"dragdrop",function(e){if(self.isDisabled())return true;self.removeHint();return self.onChange(e||event);}]);}else if(Spry.is.ie){this.event_handlers.push([this.input,"drop",function(e){if(self.isDisabled())return true;return self.onDrop(e||event);}]);}
for(var i=0;i<this.event_handlers.length;i++){Spry.Widget.Utils.addEventListener(this.event_handlers[i][0],this.event_handlers[i][1],this.event_handlers[i][2],false);}
this.form=Spry.Widget.Utils.getFirstParentWithNodeName(this.input,"FORM");if(this.form){if(!this.form.attachedSubmitHandler&&!this.form.onsubmit){this.form.onsubmit=function(e){e=e||event;return Spry.Widget.Form.onSubmit(e,e.srcElement||e.currentTarget)};this.form.attachedSubmitHandler=true;}
if(!this.form.attachedResetHandler){Spry.Widget.Utils.addEventListener(this.form,"reset",function(e){e=e||event;return Spry.Widget.Form.onReset(e,e.srcElement||e.currentTarget)},false);this.form.attachedResetHandler=true;}
Spry.Widget.Form.onSubmitWidgetQueue.push(this);}}};Spry.Widget.ValidationTextField.prototype.isDisabled=function(){return this.input&&(this.input.disabled||this.input.readOnly)||!this.input;};Spry.Widget.ValidationTextField.prototype.getElement=function(ele)
{if(ele&&typeof ele=="string")
return document.getElementById(ele);return ele;};Spry.Widget.ValidationTextField.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.Widget.ValidationTextField.processLoadQueue=function(handler)
{Spry.Widget.ValidationTextField.onloadDidFire=true;var q=Spry.Widget.ValidationTextField.loadQueue;var qlen=q.length;for(var i=0;i<qlen;i++)
q[i].attachBehaviors();};Spry.Widget.ValidationTextField.addLoadListener(Spry.Widget.ValidationTextField.processLoadQueue);Spry.Widget.ValidationTextField.addLoadListener(function(){Spry.Widget.Utils.addEventListener(window,"unload",Spry.Widget.Form.destroyAll,false);});Spry.Widget.ValidationTextField.prototype.setValue=function(newValue){this.flags.locked=true;this.input.value=newValue;this.flags.locked=false;this.oldValue=newValue;if(!Spry.is.ie){this.onChange();}};Spry.Widget.ValidationTextField.prototype.saveState=function()
{this.oldValue=this.input.value;this.selection.update();};Spry.Widget.ValidationTextField.prototype.revertState=function(revertValue)
{if(revertValue!=this.input.value){this.input.readOnly=true;this.input.value=revertValue;this.input.readOnly=false;if(Spry.is.safari&&this.flags.active){this.input.focus();}}
if(this.flags.restoreSelection){this.selection.moveTo(this.selection.start,this.selection.end);}
this.redTextFlash();};Spry.Widget.ValidationTextField.prototype.removeHint=function()
{if(this.flags.hintOn){this.input.value="";this.flags.hintOn=false;this.removeClassName(this.element,this.hintClass);this.removeClassName(this.additionalError,this.hintClass);}};Spry.Widget.ValidationTextField.prototype.putHint=function()
{if(this.hint&&this.input&&this.input.type=="text"&&this.input.value==""){this.flags.hintOn=true;this.input.value=this.hint;this.addClassName(this.element,this.hintClass);this.addClassName(this.additionalError,this.hintClass);}};Spry.Widget.ValidationTextField.prototype.redTextFlash=function()
{var self=this;this.addClassName(this.element,this.textfieldFlashTextClass);setTimeout(function(){self.removeClassName(self.element,self.textfieldFlashTextClass)},100);};Spry.Widget.ValidationTextField.prototype.doValidations=function(testValue,revertValue)
{if(this.isDisabled())return false;if(this.flags.locked){return false;}
if(testValue.length==0&&!this.isRequired){this.errors=0;return false;}
this.flags.locked=true;var mustRevert=false;var continueValidations=true;if(!this.options.isRequired&&testValue.length==0){continueValidations=false;}
var errors=0;var fixedValue=testValue;if(this.useCharacterMasking&&this.characterMasking){for(var i=0;i<testValue.length;i++){if(!this.characterMasking.test(testValue.charAt(i))){errors=errors|Spry.Widget.ValidationTextField.ERROR_FORMAT;fixedValue=revertValue;mustRevert=true;break;}}}
if(!mustRevert&&this.useCharacterMasking&&this.regExpFilter){if(!this.regExpFilter.test(fixedValue)){errors=errors|Spry.Widget.ValidationTextField.ERROR_FORMAT;mustRevert=true;}}
if(!mustRevert&&this.pattern){var currentRegExp=this.patternToRegExp(testValue.length);if(!currentRegExp.test(testValue)){errors=errors|Spry.Widget.ValidationTextField.ERROR_FORMAT;mustRevert=true;}else if(this.patternLength!=testValue.length){errors=errors|Spry.Widget.ValidationTextField.ERROR_FORMAT;}}
if(fixedValue==''){errors=errors|Spry.Widget.ValidationTextField.ERROR_REQUIRED;}
if(!mustRevert&&this.pattern&&this.useCharacterMasking){var n=this.getAutoComplete(testValue.length);if(n){fixedValue+=n;}}
if(!mustRevert&&this.minChars!==null&&continueValidations){if(testValue.length<this.minChars){errors=errors|Spry.Widget.ValidationTextField.ERROR_CHARS_MIN;continueValidations=false;}}
if(!mustRevert&&this.maxChars!==null&&continueValidations){if(testValue.length>this.maxChars){errors=errors|Spry.Widget.ValidationTextField.ERROR_CHARS_MAX;continueValidations=false;}}
if(!mustRevert&&this.validation&&continueValidations){var value=this.validation(fixedValue,this.options);if(false===value){errors=errors|Spry.Widget.ValidationTextField.ERROR_FORMAT;continueValidations=false;}else{this.typedValue=value;}}
if(!mustRevert&&this.validation&&this.minValue!==null&&continueValidations){var minValue=this.validation(this.minValue.toString(),this.options);if(minValue!==false){if(this.typedValue<minValue){errors=errors|Spry.Widget.ValidationTextField.ERROR_RANGE_MIN;continueValidations=false;}}}
if(!mustRevert&&this.validation&&this.maxValue!==null&&continueValidations){var maxValue=this.validation(this.maxValue.toString(),this.options);if(maxValue!==false){if(this.typedValue>maxValue){errors=errors|Spry.Widget.ValidationTextField.ERROR_RANGE_MAX;continueValidations=false;}}}
if(this.useCharacterMasking&&mustRevert){this.revertState(revertValue);}
this.errors=errors;this.fixedValue=fixedValue;this.flags.locked=false;return mustRevert;};Spry.Widget.ValidationTextField.prototype.onChange=function(e)
{if(Spry.is.opera&&this.flags.operaRevertOnKeyUp){return true;}
if(Spry.is.ie&&e&&e.propertyName!='value'){return true;}
if(this.flags.drop){var self=this;setTimeout(function(){self.flags.drop=false;self.onChange(null);},0);return;}
if(this.flags.hintOn){return true;}
if(this.keyCode==8||this.keyCode==46){var mustRevert=this.doValidations(this.input.value,this.input.value);this.oldValue=this.input.value;if((mustRevert||this.errors)&&this.validateOn&Spry.Widget.ValidationTextField.ONCHANGE){var self=this;setTimeout(function(){self.validate();},0);return true;}}
var mustRevert=this.doValidations(this.input.value,this.oldValue);if((!mustRevert||this.errors)&&this.validateOn&Spry.Widget.ValidationTextField.ONCHANGE){var self=this;setTimeout(function(){self.validate();},0);}
return true;};Spry.Widget.ValidationTextField.prototype.onKeyUp=function(e){if(this.flags.operaRevertOnKeyUp){this.setValue(this.oldValue);Spry.Widget.Utils.stopEvent(e);this.selection.moveTo(this.selection.start,this.selection.start);this.flags.operaRevertOnKeyUp=false;return false;}
if(this.flags.operaPasteOperation){window.clearInterval(this.flags.operaPasteOperation);this.flags.operaPasteOperation=null;}};Spry.Widget.ValidationTextField.prototype.operaPasteMonitor=function(){if(this.input.value!=this.oldValue){var mustRevert=this.doValidations(this.input.value,this.input.value);if(mustRevert){this.setValue(this.oldValue);this.selection.moveTo(this.selection.start,this.selection.start);}else{this.onChange();}}};Spry.Widget.ValidationTextField.prototype.compileDatePattern=function()
{var dateValidationPatternString="";var groupPatterns=[];var fullGroupPatterns=[];var autocompleteCharacters=[];var formatRegExp=/^([mdy]+)([\.\-\/\\\s]+)([mdy]+)([\.\-\/\\\s]+)([mdy]+)$/i;var formatGroups=this.options.format.match(formatRegExp);if(formatGroups!==null){for(var i=1;i<formatGroups.length;i++){switch(formatGroups[i].toLowerCase()){case"dd":groupPatterns[i-1]="\\d{1,2}";fullGroupPatterns[i-1]="\\d\\d";dateValidationPatternString+="("+groupPatterns[i-1]+")";autocompleteCharacters[i-1]=null;break;case"mm":groupPatterns[i-1]="\\d{1,2}";fullGroupPatterns[i-1]="\\d\\d";dateValidationPatternString+="("+groupPatterns[i-1]+")";autocompleteCharacters[i-1]=null;break;case"yy":groupPatterns[i-1]="\\d{1,2}";fullGroupPatterns[i-1]="\\d\\d";dateValidationPatternString+="(\\d\\d)";autocompleteCharacters[i-1]=null;break;case"yyyy":groupPatterns[i-1]="\\d{1,4}";fullGroupPatterns[i-1]="\\d\\d\\d\\d";dateValidationPatternString+="(\\d\\d\\d\\d)";autocompleteCharacters[i-1]=null;break;default:groupPatterns[i-1]=fullGroupPatterns[i-1]=Spry.Widget.ValidationTextField.regExpFromChars(formatGroups[i]);dateValidationPatternString+="["+groupPatterns[i-1]+"]";autocompleteCharacters[i-1]=formatGroups[i];}}}
this.dateValidationPattern=new RegExp("^"+dateValidationPatternString+"$","");this.dateAutocompleteCharacters=autocompleteCharacters;this.dateGroupPatterns=groupPatterns;this.dateFullGroupPatterns=fullGroupPatterns;this.lastDateGroup=formatGroups.length-2;};Spry.Widget.ValidationTextField.prototype.getRegExpForGroup=function(group)
{var ret='^';for(var j=0;j<=group;j++)ret+=this.dateGroupPatterns[j];ret+='$';return new RegExp(ret,"");};Spry.Widget.ValidationTextField.prototype.getRegExpForFullGroup=function(group)
{var ret='^';for(var j=0;j<group;j++)ret+=this.dateGroupPatterns[j];ret+=this.dateFullGroupPatterns[group];return new RegExp(ret,"");};Spry.Widget.ValidationTextField.prototype.getDateGroup=function(value,pos)
{if(pos==0)return 0;var test_value=value.substring(0,pos);for(var i=0;i<=this.lastDateGroup;i++)
if(this.getRegExpForGroup(i).test(test_value))return i;return-1;};Spry.Widget.ValidationTextField.prototype.isDateGroupFull=function(value,group)
{return this.getRegExpForFullGroup(group).test(value);};Spry.Widget.ValidationTextField.prototype.isValueValid=function(value,pos,group)
{var test_value=value.substring(0,pos);return this.getRegExpForGroup(group).test(test_value);};Spry.Widget.ValidationTextField.prototype.isPositionAtEndOfGroup=function(value,pos,group)
{var test_value=value.substring(0,pos);return this.getRegExpForFullGroup(group).test(test_value);};Spry.Widget.ValidationTextField.prototype.nextDateDelimiterExists=function(value,pos,group)
{var autocomplete=this.dateAutocompleteCharacters[group+1];if(value.length<pos+autocomplete.length)
return false;else
{var test_value=value.substring(pos,pos+autocomplete.length);if(test_value==autocomplete)
return true;}
return false;};Spry.Widget.ValidationTextField.prototype.onKeyPress=function(e)
{if(this.flags.skp){this.flags.skp=false;Spry.Widget.Utils.stopEvent(e);return false;}
if(e.ctrlKey||e.metaKey||!this.useCharacterMasking){return true;}
if(Spry.is.opera&&this.flags.operaRevertOnKeyUp){Spry.Widget.Utils.stopEvent(e);return false;}
if(this.keyCode==8||this.keyCode==46){var mr=this.doValidations(this.input.value,this.input.value);if(mr){return true;}}
var pressed=Spry.Widget.Utils.getCharacterFromEvent(e);if(pressed&&this.characterMasking){if(!this.characterMasking.test(pressed)){Spry.Widget.Utils.stopEvent(e);this.redTextFlash();return false;}}
if(pressed&&this.pattern){var currentPatternChar=this.patternCharacters[this.selection.start];if(/[ax]/i.test(currentPatternChar)){if(currentPatternChar.toLowerCase()==currentPatternChar){pressed=pressed.toLowerCase();}else{pressed=pressed.toUpperCase();}}
var autocomplete=this.getAutoComplete(this.selection.start);if(this.selection.start==this.oldValue.length){if(this.oldValue.length<this.patternLength){if(autocomplete){Spry.Widget.Utils.stopEvent(e);var futureValue=this.oldValue.substring(0,this.selection.start)+autocomplete+pressed;var mustRevert=this.doValidations(futureValue,this.oldValue);if(!mustRevert){this.setValue(this.fixedValue);this.selection.moveTo(this.fixedValue.length,this.fixedValue.length);}else{this.setValue(this.oldValue.substring(0,this.selection.start)+autocomplete);this.selection.moveTo(this.selection.start+autocomplete.length,this.selection.start+autocomplete.length);}
return false;}}else{Spry.Widget.Utils.stopEvent(e);this.setValue(this.input.value);return false;}}else if(autocomplete){Spry.Widget.Utils.stopEvent(e);this.selection.moveTo(this.selection.start+autocomplete.length,this.selection.start+autocomplete.length);return false;}
Spry.Widget.Utils.stopEvent(e);var futureValue=this.oldValue.substring(0,this.selection.start)+pressed+this.oldValue.substring(this.selection.start+1);var mustRevert=this.doValidations(futureValue,this.oldValue);if(!mustRevert){autocomplete=this.getAutoComplete(this.selection.start+1);this.setValue(this.fixedValue);this.selection.moveTo(this.selection.start+1+autocomplete.length,this.selection.start+1+autocomplete.length);}else{this.selection.moveTo(this.selection.start,this.selection.start);}
return false;}
if(pressed&&this.type=='date'&&this.useCharacterMasking)
{var group=this.getDateGroup(this.oldValue,this.selection.start);if(group!=-1){Spry.Widget.Utils.stopEvent(e);if((group%2)!=0)
group++;if(this.isDateGroupFull(this.oldValue,group))
{if(this.isPositionAtEndOfGroup(this.oldValue,this.selection.start,group))
{if(group==this.lastDateGroup)
{this.redTextFlash();return false;}
else
{var autocomplete=this.dateAutocompleteCharacters[group+1];if(this.nextDateDelimiterExists(this.oldValue,this.selection.start,group))
{var autocomplete=this.dateAutocompleteCharacters[group+1];this.selection.moveTo(this.selection.start+autocomplete.length,this.selection.start+autocomplete.length);if(pressed==autocomplete)
return false;if(this.isDateGroupFull(this.oldValue,group+2))
futureValue=this.oldValue.substring(0,this.selection.start)+pressed+this.oldValue.substring(this.selection.start+1);else
futureValue=this.oldValue.substring(0,this.selection.start)+pressed+this.oldValue.substring(this.selection.start);if(!this.isValueValid(futureValue,this.selection.start+1,group+2))
{this.redTextFlash();return false;}
else
{this.setValue(futureValue);this.selection.moveTo(this.selection.start+1,this.selection.start+1);}
return false;}
else
{var autocomplete=this.dateAutocompleteCharacters[group+1];var insertedValue=autocomplete+pressed;futureValue=this.oldValue.substring(0,this.selection.start)+insertedValue+this.oldValue.substring(this.selection.start);if(!this.isValueValid(futureValue,this.selection.start+insertedValue.length,group+2))
{insertedValue=autocomplete;futureValue=this.oldValue.substring(0,this.selection.start)+insertedValue+this.oldValue.substring(this.selection.start);this.setValue(futureValue);this.selection.moveTo(this.selection.start+insertedValue.length,this.selection.start+insertedValue.length);this.redTextFlash();return false;}
else
{this.setValue(futureValue);this.selection.moveTo(this.selection.start+insertedValue.length,this.selection.start+insertedValue.length);return false;}}}}
else
{var movePosition=1;futureValue=this.oldValue.substring(0,this.selection.start)+pressed+this.oldValue.substring(this.selection.start+1);if(!this.isValueValid(futureValue,this.selection.start+1,group))
{this.redTextFlash();return false;}
else
{if(this.isPositionAtEndOfGroup(futureValue,this.selection.start+1,group))
{if(group!=this.lastDateGroup)
{if(this.nextDateDelimiterExists(futureValue,this.selection.start+1,group))
{var autocomplete=this.dateAutocompleteCharacters[group+1];movePosition=1+autocomplete.length;}
else
{var autocomplete=this.dateAutocompleteCharacters[group+1];futureValue=this.oldValue.substring(0,this.selection.start)+pressed+autocomplete+this.oldValue.substring(this.selection.start+1);movePosition=1+autocomplete.length;}}}
this.setValue(futureValue);this.selection.moveTo(this.selection.start+movePosition,this.selection.start+movePosition);return false;}}}
else
{futureValue=this.oldValue.substring(0,this.selection.start)+pressed+this.oldValue.substring(this.selection.start);var movePosition=1;if(!this.isValueValid(futureValue,this.selection.start+1,group)&&!this.isValueValid(futureValue,this.selection.start+1,group+1))
{this.redTextFlash();return false;}
else
{var autocomplete=this.dateAutocompleteCharacters[group+1];if(pressed==autocomplete)
{if(this.nextDateDelimiterExists(this.oldValue,this.selection.start,group))
{futureValue=this.oldValue;movePosition=1;}}
else
{if(this.isPositionAtEndOfGroup(futureValue,this.selection.start+1,group))
{if(group!=this.lastDateGroup)
{if(this.nextDateDelimiterExists(futureValue,this.selection.start+1,group))
{var autocomplete=this.dateAutocompleteCharacters[group+1];movePosition=1+autocomplete.length;}
else
{var autocomplete=this.dateAutocompleteCharacters[group+1];futureValue=this.oldValue.substring(0,this.selection.start)+pressed+autocomplete+this.oldValue.substring(this.selection.start+1);movePosition=1+autocomplete.length;}}}}
this.setValue(futureValue);this.selection.moveTo(this.selection.start+movePosition,this.selection.start+movePosition);return false;}}}
return false;}};Spry.Widget.ValidationTextField.prototype.onKeyDown=function(e)
{this.saveState();this.keyCode=e.keyCode;if(Spry.is.opera){if(this.flags.operaPasteOperation){window.clearInterval(this.flags.operaPasteOperation);this.flags.operaPasteOperation=null;}
if(e.ctrlKey){var pressed=Spry.Widget.Utils.getCharacterFromEvent(e);if(pressed&&'vx'.indexOf(pressed.toLowerCase())!=-1){var self=this;this.flags.operaPasteOperation=window.setInterval(function(){self.operaPasteMonitor();},1);return true;}}}
if(this.keyCode!=8&&this.keyCode!=46&&Spry.Widget.Utils.isSpecialKey(e)){return true;}
if(this.keyCode==8||this.keyCode==46){var mr=this.doValidations(this.input.value,this.input.value);if(mr){return true;}}
if(this.useCharacterMasking&&this.pattern&&this.keyCode==46){if(e.ctrlKey){this.setValue(this.input.value.substring(0,this.selection.start));}else if(this.selection.end==this.input.value.length||this.selection.start==this.input.value.length-1){return true;}else{this.flags.operaRevertOnKeyUp=true;}
if(Spry.is.mozilla&&Spry.is.mac){this.flags.skp=true;}
Spry.Widget.Utils.stopEvent(e);return false;}
if(this.useCharacterMasking&&this.pattern&&!e.ctrlKey&&this.keyCode==8){if(this.selection.start==this.input.value.length){var n=this.getAutoComplete(this.selection.start,-1);this.setValue(this.input.value.substring(0,this.input.value.length-(Spry.is.opera?0:1)-n.length));if(Spry.is.opera){this.selection.start=this.selection.start-1-n.length;this.selection.end=this.selection.end-1-n.length;}}else if(this.selection.end==this.input.value.length){return true;}else{this.flags.operaRevertOnKeyUp=true;}
if(Spry.is.mozilla&&Spry.is.mac){this.flags.skp=true;}
Spry.Widget.Utils.stopEvent(e);return false;}
return true;};Spry.Widget.ValidationTextField.prototype.onMouseDown=function(e)
{if(this.flags.active){this.saveState();}};Spry.Widget.ValidationTextField.prototype.onDrop=function(e)
{this.flags.drop=true;this.removeHint();this.saveState();this.flags.active=true;this.addClassName(this.element,this.focusClass);this.addClassName(this.additionalError,this.focusClass);};Spry.Widget.ValidationTextField.prototype.onFocus=function(e)
{if(this.flags.drop){return;}
this.removeHint();if(this.pattern&&this.useCharacterMasking){var autocomplete=this.getAutoComplete(this.selection.start);this.setValue(this.input.value+autocomplete);this.selection.moveTo(this.input.value.length,this.input.value.length);}
this.saveState();this.flags.active=true;this.addClassName(this.element,this.focusClass);this.addClassName(this.additionalError,this.focusClass);};Spry.Widget.ValidationTextField.prototype.onBlur=function(e)
{this.flags.active=false;this.removeClassName(this.element,this.focusClass);this.removeClassName(this.additionalError,this.focusClass);this.flags.restoreSelection=false;var mustRevert=this.doValidations(this.input.value,this.input.value);this.flags.restoreSelection=true;if(this.validateOn&Spry.Widget.ValidationTextField.ONBLUR){this.validate();}
var self=this;setTimeout(function(){self.putHint();},10);return true;};Spry.Widget.ValidationTextField.prototype.compilePattern=function(){if(!this.pattern){return;}
var compiled=[];var regexps=[];var patternCharacters=[];var idx=0;var c='',p='';for(var i=0;i<this.pattern.length;i++){c=this.pattern.charAt(i);if(p=='\\'){if(/[0ABXY\?]/i.test(c)){regexps[idx-1]=c;}else{regexps[idx-1]=Spry.Widget.ValidationTextField.regExpFromChars(c);}
compiled[idx-1]=c;patternCharacters[idx-1]=null;p='';continue;}
regexps[idx]=Spry.Widget.ValidationTextField.regExpFromChars(c);if(/[0ABXY\?]/i.test(c)){compiled[idx]=null;patternCharacters[idx]=c;}else if(c=='\\'){compiled[idx]=c;patternCharacters[idx]='\\';}else{compiled[idx]=c;patternCharacters[idx]=null;}
idx++;p=c;}
this.autoCompleteCharacters=compiled;this.compiledPattern=regexps;this.patternCharacters=patternCharacters;this.patternLength=compiled.length;};Spry.Widget.ValidationTextField.prototype.getAutoComplete=function(from,direction){if(direction==-1){var n='',m='';while(from&&(n=this.getAutoComplete(--from))){m=n;}
return m;}
var ret='',c='';for(var i=from;i<this.autoCompleteCharacters.length;i++){c=this.autoCompleteCharacters[i];if(c){ret+=c;}else{break;}}
return ret;};Spry.Widget.ValidationTextField.regExpFromChars=function(string){var ret='',character='';for(var i=0;i<string.length;i++){character=string.charAt(i);switch(character){case'0':ret+='\\d';break;case'A':ret+='[A-Z]';break;case'a':ret+='[a-z]';break;case'B':case'b':ret+='[a-zA-Z]';break;case'x':ret+='[0-9a-z]';break;case'X':ret+='[0-9A-Z]';break;case'Y':case'y':ret+='[0-9a-zA-Z]';break;case'?':ret+='.';break;case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9':ret+=character;break;case'c':case'C':case'e':case'E':case'f':case'F':case'r':case'd':case'D':case'n':case's':case'S':case'w':case'W':case't':case'v':ret+=character;break;default:ret+='\\'+character;}}
return ret;};Spry.Widget.ValidationTextField.prototype.patternToRegExp=function(len){var ret='^';var end=Math.min(this.compiledPattern.length,len);for(var i=0;i<end;i++){ret+=this.compiledPattern[i];}
ret+='$';ret=new RegExp(ret,"");return ret;};Spry.Widget.ValidationTextField.prototype.resetClasses=function(){var classes=[this.requiredClass,this.invalidFormatClass,this.invalidRangeMinClass,this.invalidRangeMaxClass,this.invalidCharsMinClass,this.invalidCharsMaxClass,this.validClass];for(var i=0;i<classes.length;i++)
{this.removeClassName(this.element,classes[i]);this.removeClassName(this.additionalError,classes[i]);}};Spry.Widget.ValidationTextField.prototype.reset=function(){this.removeHint();this.oldValue=this.input.defaultValue;this.resetClasses();if(Spry.is.ie){this.input.forceFireFirstOnPropertyChange=true;this.input.removeAttribute("forceFireFirstOnPropertyChange");}
var self=this;setTimeout(function(){self.putHint();},10);};Spry.Widget.ValidationTextField.prototype.validate=function(){this.resetClasses();if(this.validateOn&Spry.Widget.ValidationTextField.ONSUBMIT){this.removeHint();this.doValidations(this.input.value,this.input.value);if(!this.flags.active){var self=this;setTimeout(function(){self.putHint();},10);}}
if(this.isRequired&&this.errors&Spry.Widget.ValidationTextField.ERROR_REQUIRED){this.addClassName(this.element,this.requiredClass);this.addClassName(this.additionalError,this.requiredClass);return false;}
if(this.errors&Spry.Widget.ValidationTextField.ERROR_FORMAT){this.addClassName(this.element,this.invalidFormatClass);this.addClassName(this.additionalError,this.invalidFormatClass);return false;}
if(this.errors&Spry.Widget.ValidationTextField.ERROR_RANGE_MIN){this.addClassName(this.element,this.invalidRangeMinClass);this.addClassName(this.additionalError,this.invalidRangeMinClass);return false;}
if(this.errors&Spry.Widget.ValidationTextField.ERROR_RANGE_MAX){this.addClassName(this.element,this.invalidRangeMaxClass);this.addClassName(this.additionalError,this.invalidRangeMaxClass);return false;}
if(this.errors&Spry.Widget.ValidationTextField.ERROR_CHARS_MIN){this.addClassName(this.element,this.invalidCharsMinClass);this.addClassName(this.additionalError,this.invalidCharsMinClass);return false;}
if(this.errors&Spry.Widget.ValidationTextField.ERROR_CHARS_MAX){this.addClassName(this.element,this.invalidCharsMaxClass);this.addClassName(this.additionalError,this.invalidCharsMaxClass);return false;}
this.addClassName(this.element,this.validClass);this.addClassName(this.additionalError,this.validClass);return true;};Spry.Widget.ValidationTextField.prototype.addClassName=function(ele,className)
{if(!ele||!className||(ele.className&&ele.className.search(new RegExp("\\b"+className+"\\b"))!=-1))
return;ele.className+=(ele.className?" ":"")+className;};Spry.Widget.ValidationTextField.prototype.removeClassName=function(ele,className)
{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.Widget.ValidationTextField.prototype.showError=function(msg)
{alert('Spry.Widget.TextField ERR: '+msg);};Spry.Widget.SelectionDescriptor=function(element)
{this.element=element;this.update();};Spry.Widget.SelectionDescriptor.prototype.update=function()
{if(Spry.is.ie&&Spry.is.windows){var sel=this.element.ownerDocument.selection;if(this.element.nodeName=="TEXTAREA"){if(sel.type!='None'){try{var range=sel.createRange();}catch(err){return;}
if(range.parentElement()==this.element){var range_all=this.element.ownerDocument.body.createTextRange();range_all.moveToElementText(this.element);for(var sel_start=0;range_all.compareEndPoints('StartToStart',range)<0;sel_start++){range_all.moveStart('character',1);}
this.start=sel_start;range_all=this.element.ownerDocument.body.createTextRange();range_all.moveToElementText(this.element);for(var sel_end=0;range_all.compareEndPoints('StartToEnd',range)<0;sel_end++){range_all.moveStart('character',1);}
this.end=sel_end;this.length=this.end-this.start;this.text=range.text;}}}else if(this.element.nodeName=="INPUT"){try{this.range=sel.createRange();}catch(err){return;}
this.length=this.range.text.length;var clone=this.range.duplicate();this.start=-clone.moveStart("character",-10000);clone=this.range.duplicate();clone.collapse(false);this.end=-clone.moveStart("character",-10000);this.text=this.range.text;}}else{var tmp=this.element;var selectionStart=0;var selectionEnd=0;try{selectionStart=tmp.selectionStart;}catch(err){}
try{selectionEnd=tmp.selectionEnd;}catch(err){}
if(Spry.is.safari){if(selectionStart==2147483647){selectionStart=0;}
if(selectionEnd==2147483647){selectionEnd=0;}}
this.start=selectionStart;this.end=selectionEnd;this.length=selectionEnd-selectionStart;this.text=this.element.value.substring(selectionStart,selectionEnd);}};Spry.Widget.SelectionDescriptor.prototype.destroy=function(){try{delete this.range}catch(err){}
try{delete this.element}catch(err){}};Spry.Widget.SelectionDescriptor.prototype.move=function(amount)
{if(Spry.is.ie&&Spry.is.windows){this.range.move("character",amount);this.range.select();}else{try{this.element.selectionStart++;}catch(err){}}
this.update();};Spry.Widget.SelectionDescriptor.prototype.moveTo=function(start,end)
{if(Spry.is.ie&&Spry.is.windows){if(this.element.nodeName=="TEXTAREA"){var ta_range=this.element.createTextRange();this.range=this.element.createTextRange();this.range.move("character",start);this.range.moveEnd("character",end-start);var c1=this.range.compareEndPoints("StartToStart",ta_range);if(c1<0){this.range.setEndPoint("StartToStart",ta_range);}
var c2=this.range.compareEndPoints("EndToEnd",ta_range);if(c2>0){this.range.setEndPoint("EndToEnd",ta_range);}}else if(this.element.nodeName=="INPUT"){this.range=this.element.ownerDocument.selection.createRange();this.range.move("character",-10000);this.start=this.range.moveStart("character",start);this.end=this.start+this.range.moveEnd("character",end-start);}
this.range.select();}else{this.start=start;try{this.element.selectionStart=start;}catch(err){}
this.end=end;try{this.element.selectionEnd=end;}catch(err){}}
this.ignore=true;this.update();};Spry.Widget.SelectionDescriptor.prototype.moveEnd=function(amount)
{if(Spry.is.ie&&Spry.is.windows){this.range.moveEnd("character",amount);this.range.select();}else{try{this.element.selectionEnd++;}catch(err){}}
this.update();};Spry.Widget.SelectionDescriptor.prototype.collapse=function(begin)
{if(Spry.is.ie&&Spry.is.windows){this.range=this.element.ownerDocument.selection.createRange();this.range.collapse(begin);this.range.select();}else{if(begin){try{this.element.selectionEnd=this.element.selectionStart;}catch(err){}}else{try{this.element.selectionStart=this.element.selectionEnd;}catch(err){}}}
this.update();};if(!Spry.Widget.Form)Spry.Widget.Form={};if(!Spry.Widget.Form.onSubmitWidgetQueue)Spry.Widget.Form.onSubmitWidgetQueue=[];{Spry.Widget.Form.validate=function(vform){var isValid=true;var isElementValid=true;var q=Spry.Widget.Form.onSubmitWidgetQueue;var qlen=q.length;for(var i=0;i<qlen;i++){if(!q[i].isDisabled()&&q[i].form==vform){isElementValid=q[i].validate();isValid=isElementValid&&isValid;}}
return isValid;}};if(!Spry.Widget.Form.onSubmit){Spry.Widget.Form.onSubmit=function(e,form)
{if(Spry.Widget.Form.validate(form)==false){return false;}
return true;};};if(!Spry.Widget.Form.onReset){Spry.Widget.Form.onReset=function(e,vform)
{var q=Spry.Widget.Form.onSubmitWidgetQueue;var qlen=q.length;for(var i=0;i<qlen;i++){if(!q[i].isDisabled()&&q[i].form==vform&&typeof(q[i].reset)=='function'){q[i].reset();}}
return true;};};if(!Spry.Widget.Form.destroy){Spry.Widget.Form.destroy=function(form)
{var q=Spry.Widget.Form.onSubmitWidgetQueue;for(var i=0;i<Spry.Widget.Form.onSubmitWidgetQueue.length;i++){if(q[i].form==form&&typeof(q[i].destroy)=='function'){q[i].destroy();i--;}}}};if(!Spry.Widget.Form.destroyAll){Spry.Widget.Form.destroyAll=function()
{var q=Spry.Widget.Form.onSubmitWidgetQueue;for(var i=0;i<Spry.Widget.Form.onSubmitWidgetQueue.length;i++){if(typeof(q[i].destroy)=='function'){q[i].destroy();i--;}}}};if(!Spry.Widget.Utils)Spry.Widget.Utils={};Spry.Widget.Utils.punycode_constants={base:36,tmin:1,tmax:26,skew:38,damp:700,initial_bias:72,initial_n:0x80,delimiter:0x2D,maxint:2<<26-1};Spry.Widget.Utils.punycode_encode_digit=function(d){return String.fromCharCode(d+22+75*(d<26));};Spry.Widget.Utils.punycode_adapt=function(delta,numpoints,firsttime){delta=firsttime?delta/this.punycode_constants.damp:delta>>1;delta+=delta/numpoints;for(var k=0;delta>((this.punycode_constants.base-this.punycode_constants.tmin)*this.punycode_constants.tmax)/2;k+=this.punycode_constants.base){delta/=this.punycode_constants.base-this.punycode_constants.tmin;}
return k+(this.punycode_constants.base-this.punycode_constants.tmin+1)*delta/(delta+this.punycode_constants.skew);};Spry.Widget.Utils.punycode_encode=function(input,max_out){var inputc=input.split("");input=[];for(var i=0;i<inputc.length;i++){input.push(inputc[i].charCodeAt(0));}
var output='';var h,b,j,m,q,k,t;var input_len=input.length;var n=this.punycode_constants.initial_n;var delta=0;var bias=this.punycode_constants.initial_bias;var out=0;for(j=0;j<input_len;j++){if(input[j]<128){if(max_out-out<2){return false;}
output+=String.fromCharCode(input[j]);out++;}}
h=b=out;if(b>0){output+=String.fromCharCode(this.punycode_constants.delimiter);out++;}
while(h<input_len){for(m=this.punycode_constants.maxint,j=0;j<input_len;j++){if(input[j]>=n&&input[j]<m){m=input[j];}}
if(m-n>(this.punycode_constants.maxint-delta)/(h+1)){return false;}
delta+=(m-n)*(h+1);n=m;for(j=0;j<input_len;j++){if(input[j]<n){if(++delta==0){return false;}}
if(input[j]==n){for(q=delta,k=this.punycode_constants.base;true;k+=this.punycode_constants.base){if(out>=max_out){return false;}
t=k<=bias?this.punycode_constants.tmin:k>=bias+this.punycode_constants.tmax?this.punycode_constants.tmax:k-bias;if(q<t){break;}
output+=this.punycode_encode_digit(t+(q-t)%(this.punycode_constants.base-t));out++;q=(q-t)/(this.punycode_constants.base-t);}
output+=this.punycode_encode_digit(q);out++;bias=this.punycode_adapt(delta,h+1,h==b);delta=0;h++;}}
delta++,n++;}
return output;};Spry.Widget.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.Widget.Utils.firstValid=function(){var ret=null;for(var i=0;i<Spry.Widget.Utils.firstValid.arguments.length;i++){if(typeof(Spry.Widget.Utils.firstValid.arguments[i])!='undefined'){ret=Spry.Widget.Utils.firstValid.arguments[i];break;}}
return ret;};Spry.Widget.Utils.specialCharacters=",8,9,16,17,18,20,27,33,34,35,36,37,38,40,45,144,192,63232,";Spry.Widget.Utils.specialSafariNavKeys="63232,63233,63234,63235,63272,63273,63275,63276,63277,63289,";Spry.Widget.Utils.specialNotSafariCharacters="39,46,91,92,93,";Spry.Widget.Utils.specialCharacters+=Spry.Widget.Utils.specialSafariNavKeys;if(!Spry.is.safari){Spry.Widget.Utils.specialCharacters+=Spry.Widget.Utils.specialNotSafariCharacters;}
Spry.Widget.Utils.isSpecialKey=function(ev){return Spry.Widget.Utils.specialCharacters.indexOf(","+ev.keyCode+",")!=-1;};Spry.Widget.Utils.getCharacterFromEvent=function(e){var keyDown=e.type=="keydown";var code=null;var character=null;if(Spry.is.mozilla&&!keyDown){if(e.charCode){character=String.fromCharCode(e.charCode);}else{code=e.keyCode;}}else{code=e.keyCode||e.which;if(code!=13){character=String.fromCharCode(code);}}
if(Spry.is.safari){if(keyDown){code=e.keyCode||e.which;character=String.fromCharCode(code);}else{code=e.keyCode||e.which;if(Spry.Widget.Utils.specialCharacters.indexOf(","+code+",")!=-1){character=null;}else{character=String.fromCharCode(code);}}}
if(Spry.is.opera){if(Spry.Widget.Utils.specialCharacters.indexOf(","+code+",")!=-1){character=null;}else{character=String.fromCharCode(code);}}
return character;};Spry.Widget.Utils.getFirstChildWithNodeNameAtAnyLevel=function(node,nodeName)
{var elements=node.getElementsByTagName(nodeName);if(elements){return elements[0];}
return null;};Spry.Widget.Utils.getFirstParentWithNodeName=function(node,nodeName)
{while(node.parentNode&&node.parentNode.nodeName.toLowerCase()!=nodeName.toLowerCase()&&node.parentNode.nodeName!='BODY'){node=node.parentNode;}
if(node.parentNode&&node.parentNode.nodeName.toLowerCase()==nodeName.toLowerCase()){return node.parentNode;}else{return null;}};Spry.Widget.Utils.destroyWidgets=function(container)
{if(typeof container=='string'){container=document.getElementById(container);}
var q=Spry.Widget.Form.onSubmitWidgetQueue;for(var i=0;i<Spry.Widget.Form.onSubmitWidgetQueue.length;i++){if(typeof(q[i].destroy)=='function'&&Spry.Widget.Utils.contains(container,q[i].element)){q[i].destroy();i--;}}};Spry.Widget.Utils.contains=function(who,what)
{if(typeof who.contains=='object'){return what&&who&&(who==what||who.contains(what));}else{var el=what;while(el){if(el==who){return true;}
el=el.parentNode;}
return false;}};Spry.Widget.Utils.addEventListener=function(element,eventType,handler,capture)
{try
{if(element.addEventListener)
element.addEventListener(eventType,handler,capture);else if(element.attachEvent)
element.attachEvent("on"+eventType,handler,capture);}
catch(e){}};Spry.Widget.Utils.removeEventListener=function(element,eventType,handler,capture)
{try
{if(element.removeEventListener)
element.removeEventListener(eventType,handler,capture);else if(element.detachEvent)
element.detachEvent("on"+eventType,handler,capture);}
catch(e){}};Spry.Widget.Utils.stopEvent=function(ev)
{try
{this.stopPropagation(ev);this.preventDefault(ev);}
catch(e){}};Spry.Widget.Utils.stopPropagation=function(ev)
{if(ev.stopPropagation)
{ev.stopPropagation();}
else
{ev.cancelBubble=true;}};Spry.Widget.Utils.preventDefault=function(ev)
{if(ev.preventDefault)
{ev.preventDefault();}
else
{ev.returnValue=false;}};;var REGEXP_UNICODE=function(){var tests=[' ','\u0120',-1,'!','\u0120',-1,'\u0120','\u0120',0,'\u0121','\u0120',-1,'\u0121','\u0120|\u0121',0,'\u0122','\u0120|\u0121',-1,'\u0120','[\u0120]',0,'\u0121','[\u0120]',-1,'\u0121','[\u0120\u0121]',0,'\u0122','[\u0120\u0121]',-1,'\u0121','[\u0120-\u0121]',0,'\u0122','[\u0120-\u0121]',-1];for(var i=0;i<tests.length;i+=3){if(tests[i].search(new RegExp(tests[i+1]))!=tests[i+2]){return false;}}
return true;}();var XML_S='[ \t\r\n]+';var XML_EQ='('+XML_S+')?=('+XML_S+')?';var XML_CHAR_REF='&#[0-9]+;|&#x[0-9a-fA-F]+;';var XML10_VERSION_INFO=XML_S+'version'+XML_EQ+'("1\\.0"|'+"'1\\.0')";var XML10_BASE_CHAR=(REGEXP_UNICODE)?'\u0041-\u005a\u0061-\u007a\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u00ff'+'\u0100-\u0131\u0134-\u013e\u0141-\u0148\u014a-\u017e\u0180-\u01c3'+'\u01cd-\u01f0\u01f4-\u01f5\u01fa-\u0217\u0250-\u02a8\u02bb-\u02c1\u0386'+'\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03ce\u03d0-\u03d6\u03da\u03dc'+'\u03de\u03e0\u03e2-\u03f3\u0401-\u040c\u040e-\u044f\u0451-\u045c'+'\u045e-\u0481\u0490-\u04c4\u04c7-\u04c8\u04cb-\u04cc\u04d0-\u04eb'+'\u04ee-\u04f5\u04f8-\u04f9\u0531-\u0556\u0559\u0561-\u0586\u05d0-\u05ea'+'\u05f0-\u05f2\u0621-\u063a\u0641-\u064a\u0671-\u06b7\u06ba-\u06be'+'\u06c0-\u06ce\u06d0-\u06d3\u06d5\u06e5-\u06e6\u0905-\u0939\u093d'+'\u0958-\u0961\u0985-\u098c\u098f-\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2'+'\u09b6-\u09b9\u09dc-\u09dd\u09df-\u09e1\u09f0-\u09f1\u0a05-\u0a0a'+'\u0a0f-\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32-\u0a33\u0a35-\u0a36'+'\u0a38-\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8b\u0a8d'+'\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2-\u0ab3\u0ab5-\u0ab9'+'\u0abd\u0ae0\u0b05-\u0b0c\u0b0f-\u0b10\u0b13-\u0b28\u0b2a-\u0b30'+'\u0b32-\u0b33\u0b36-\u0b39\u0b3d\u0b5c-\u0b5d\u0b5f-\u0b61\u0b85-\u0b8a'+'\u0b8e-\u0b90\u0b92-\u0b95\u0b99-\u0b9a\u0b9c\u0b9e-\u0b9f\u0ba3-\u0ba4'+'\u0ba8-\u0baa\u0bae-\u0bb5\u0bb7-\u0bb9\u0c05-\u0c0c\u0c0e-\u0c10'+'\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c60-\u0c61\u0c85-\u0c8c'+'\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cde\u0ce0-\u0ce1'+'\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d28\u0d2a-\u0d39\u0d60-\u0d61'+'\u0e01-\u0e2e\u0e30\u0e32-\u0e33\u0e40-\u0e45\u0e81-\u0e82\u0e84'+'\u0e87-\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5'+'\u0ea7\u0eaa-\u0eab\u0ead-\u0eae\u0eb0\u0eb2-\u0eb3\u0ebd\u0ec0-\u0ec4'+'\u0f40-\u0f47\u0f49-\u0f69\u10a0-\u10c5\u10d0-\u10f6\u1100\u1102-\u1103'+'\u1105-\u1107\u1109\u110b-\u110c\u110e-\u1112\u113c\u113e\u1140\u114c'+'\u114e\u1150\u1154-\u1155\u1159\u115f-\u1161\u1163\u1165\u1167\u1169'+'\u116d-\u116e\u1172-\u1173\u1175\u119e\u11a8\u11ab\u11ae-\u11af'+'\u11b7-\u11b8\u11ba\u11bc-\u11c2\u11eb\u11f0\u11f9\u1e00-\u1e9b'+'\u1ea0-\u1ef9\u1f00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d'+'\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc'+'\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec'+'\u1ff2-\u1ff4\u1ff6-\u1ffc\u2126\u212a-\u212b\u212e\u2180-\u2182'+'\u3041-\u3094\u30a1-\u30fa\u3105-\u312c\uac00-\ud7a3':'A-Za-z';var XML10_IDEOGRAPHIC=(REGEXP_UNICODE)?'\u4e00-\u9fa5\u3007\u3021-\u3029':'';var XML10_COMBINING_CHAR=(REGEXP_UNICODE)?'\u0300-\u0345\u0360-\u0361\u0483-\u0486\u0591-\u05a1\u05a3-\u05b9'+'\u05bb-\u05bd\u05bf\u05c1-\u05c2\u05c4\u064b-\u0652\u0670\u06d6-\u06dc'+'\u06dd-\u06df\u06e0-\u06e4\u06e7-\u06e8\u06ea-\u06ed\u0901-\u0903\u093c'+'\u093e-\u094c\u094d\u0951-\u0954\u0962-\u0963\u0981-\u0983\u09bc\u09be'+'\u09bf\u09c0-\u09c4\u09c7-\u09c8\u09cb-\u09cd\u09d7\u09e2-\u09e3\u0a02'+'\u0a3c\u0a3e\u0a3f\u0a40-\u0a42\u0a47-\u0a48\u0a4b-\u0a4d\u0a70-\u0a71'+'\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0b01-\u0b03'+'\u0b3c\u0b3e-\u0b43\u0b47-\u0b48\u0b4b-\u0b4d\u0b56-\u0b57\u0b82-\u0b83'+'\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0c01-\u0c03\u0c3e-\u0c44'+'\u0c46-\u0c48\u0c4a-\u0c4d\u0c55-\u0c56\u0c82-\u0c83\u0cbe-\u0cc4'+'\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5-\u0cd6\u0d02-\u0d03\u0d3e-\u0d43'+'\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1'+'\u0eb4-\u0eb9\u0ebb-\u0ebc\u0ec8-\u0ecd\u0f18-\u0f19\u0f35\u0f37\u0f39'+'\u0f3e\u0f3f\u0f71-\u0f84\u0f86-\u0f8b\u0f90-\u0f95\u0f97\u0f99-\u0fad'+'\u0fb1-\u0fb7\u0fb9\u20d0-\u20dc\u20e1\u302a-\u302f\u3099\u309a':'';var XML10_DIGIT=(REGEXP_UNICODE)?'\u0030-\u0039\u0660-\u0669\u06f0-\u06f9\u0966-\u096f\u09e6-\u09ef'+'\u0a66-\u0a6f\u0ae6-\u0aef\u0b66-\u0b6f\u0be7-\u0bef\u0c66-\u0c6f'+'\u0ce6-\u0cef\u0d66-\u0d6f\u0e50-\u0e59\u0ed0-\u0ed9\u0f20-\u0f29':'0-9';var XML10_EXTENDER=(REGEXP_UNICODE)?'\u00b7\u02d0\u02d1\u0387\u0640\u0e46\u0ec6\u3005\u3031-\u3035'+'\u309d-\u309e\u30fc-\u30fe':'';var XML10_LETTER=XML10_BASE_CHAR+XML10_IDEOGRAPHIC;var XML10_NAME_CHAR=XML10_LETTER+XML10_DIGIT+'\\._:'+
XML10_COMBINING_CHAR+XML10_EXTENDER+'-';var XML10_NAME='['+XML10_LETTER+'_:]['+XML10_NAME_CHAR+']*';var XML10_ENTITY_REF='&'+XML10_NAME+';';var XML10_REFERENCE=XML10_ENTITY_REF+'|'+XML_CHAR_REF;var XML10_ATT_VALUE='"(([^<&"]|'+XML10_REFERENCE+')*)"|'+"'(([^<&']|"+XML10_REFERENCE+")*)'";var XML10_ATTRIBUTE='('+XML10_NAME+')'+XML_EQ+'('+XML10_ATT_VALUE+')';var XML11_VERSION_INFO=XML_S+'version'+XML_EQ+'("1\\.1"|'+"'1\\.1')";var XML11_NAME_START_CHAR=(REGEXP_UNICODE)?':A-Z_a-z\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02ff\u0370-\u037d'+'\u037f-\u1fff\u200c-\u200d\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff'+'\uf900-\ufdcf\ufdf0-\ufffd':':A-Z_a-z';var XML11_NAME_CHAR=XML11_NAME_START_CHAR+
((REGEXP_UNICODE)?'\\.0-9\u00b7\u0300-\u036f\u203f-\u2040-':'\\.0-9-');var XML11_NAME='['+XML11_NAME_START_CHAR+']['+XML11_NAME_CHAR+']*';var XML11_ENTITY_REF='&'+XML11_NAME+';';var XML11_REFERENCE=XML11_ENTITY_REF+'|'+XML_CHAR_REF;var XML11_ATT_VALUE='"(([^<&"]|'+XML11_REFERENCE+')*)"|'+"'(([^<&']|"+XML11_REFERENCE+")*)'";var XML11_ATTRIBUTE='('+XML11_NAME+')'+XML_EQ+'('+XML11_ATT_VALUE+')';var XML_NC_NAME_CHAR=XML10_LETTER+XML10_DIGIT+'\\._'+
XML10_COMBINING_CHAR+XML10_EXTENDER+'-';var XML_NC_NAME='['+XML10_LETTER+'_]['+XML_NC_NAME_CHAR+']*';var DOM_ELEMENT_NODE=1;var DOM_ATTRIBUTE_NODE=2;var DOM_TEXT_NODE=3;var DOM_CDATA_SECTION_NODE=4;var DOM_ENTITY_REFERENCE_NODE=5;var DOM_ENTITY_NODE=6;var DOM_PROCESSING_INSTRUCTION_NODE=7;var DOM_COMMENT_NODE=8;var DOM_DOCUMENT_NODE=9;var DOM_DOCUMENT_TYPE_NODE=10;var DOM_DOCUMENT_FRAGMENT_NODE=11;var DOM_NOTATION_NODE=12;function xpathLog(msg){};function xsltLog(msg){};function xsltLogXml(msg){};function assert(b){if(!b){throw"Assertion failed";}}
function stringSplit(s,c){var a=s.indexOf(c);if(a==-1){return[s];}
var parts=[];parts.push(s.substr(0,a));while(a!=-1){var a1=s.indexOf(c,a+1);if(a1!=-1){parts.push(s.substr(a+1,a1-a-1));}else{parts.push(s.substr(a+1));}
a=a1;}
return parts;}
function mapExec(array,func){for(var i=0;i<array.length;++i){func.call(this,array[i],i);}}
function mapExpr(array,func){var ret=[];for(var i=0;i<array.length;++i){ret.push(func(array[i]));}
return ret;};function reverseInplace(array){for(var i=0;i<array.length/2;++i){var h=array[i];var ii=array.length-i-1;array[i]=array[ii];array[ii]=h;}}
function removeFromArray(array,value,opt_notype){var shift=0;for(var i=0;i<array.length;++i){if(array[i]===value||(opt_notype&&array[i]==value)){array.splice(i--,1);shift++;}}
return shift;}
function copyArray(dst,src){for(var i=0;i<src.length;++i){dst.push(src[i]);}}
function xmlValue(node){if(!node){return'';}
var ret='';if(node.nodeType==DOM_TEXT_NODE||node.nodeType==DOM_CDATA_SECTION_NODE||node.nodeType==DOM_ATTRIBUTE_NODE){ret+=node.nodeValue;}else if(node.nodeType==DOM_ELEMENT_NODE||node.nodeType==DOM_DOCUMENT_NODE||node.nodeType==DOM_DOCUMENT_FRAGMENT_NODE){for(var i=0;i<node.childNodes.length;++i){ret+=arguments.callee(node.childNodes[i]);}}
return ret;}
function xpathParse(expr){xpathLog('parse '+expr);xpathParseInit();var cached=xpathCacheLookup(expr);if(cached){xpathLog(' ... cached');return cached;}
if(expr.match(/^(\$|@)?\w+$/i)){var ret=makeSimpleExpr(expr);xpathParseCache[expr]=ret;xpathLog(' ... simple');return ret;}
if(expr.match(/^\w+(\/\w+)*$/i)){var ret=makeSimpleExpr2(expr);xpathParseCache[expr]=ret;xpathLog(' ... simple 2');return ret;}
var cachekey=expr;var stack=[];var ahead=null;var previous=null;var done=false;var parse_count=0;var lexer_count=0;var reduce_count=0;while(!done){parse_count++;expr=expr.replace(/^\s*/,'');previous=ahead;ahead=null;var rule=null;var match='';for(var i=0;i<xpathTokenRules.length;++i){var result=xpathTokenRules[i].re.exec(expr);lexer_count++;if(result&&result.length>0&&result[0].length>match.length){rule=xpathTokenRules[i];match=result[0];break;}}
if(rule&&(rule==TOK_DIV||rule==TOK_MOD||rule==TOK_AND||rule==TOK_OR)&&(!previous||previous.tag==TOK_AT||previous.tag==TOK_DSLASH||previous.tag==TOK_SLASH||previous.tag==TOK_AXIS||previous.tag==TOK_DOLLAR)){rule=TOK_QNAME;}
if(rule){expr=expr.substr(match.length);xpathLog('token: '+match+' -- '+rule.label);ahead={tag:rule,match:match,prec:rule.prec?rule.prec:0,expr:makeTokenExpr(match)};}else{xpathLog('DONE');done=true;}
while(xpathReduce(stack,ahead)){reduce_count++;xpathLog('stack: '+stackToString(stack));}}
xpathLog('stack: '+stackToString(stack));if(stack.length!=1){throw'XPath parse error '+cachekey+':\n'+stackToString(stack);}
var result=stack[0].expr;xpathParseCache[cachekey]=result;xpathLog('XPath parse: '+parse_count+' / '+
lexer_count+' / '+reduce_count);return result;}
var xpathParseCache={};function xpathCacheLookup(expr){return xpathParseCache[expr];}
function xpathReduce(stack,ahead){var cand=null;if(stack.length>0){var top=stack[stack.length-1];var ruleset=xpathRules[top.tag.key];if(ruleset){for(var i=0;i<ruleset.length;++i){var rule=ruleset[i];var match=xpathMatchStack(stack,rule[1]);if(match.length){cand={tag:rule[0],rule:rule,match:match};cand.prec=xpathGrammarPrecedence(cand);break;}}}}
var ret;if(cand&&(!ahead||cand.prec>ahead.prec||(ahead.tag.left&&cand.prec>=ahead.prec))){for(var i=0;i<cand.match.matchlength;++i){stack.pop();}
xpathLog('reduce '+cand.tag.label+' '+cand.prec+' ahead '+(ahead?ahead.tag.label+' '+ahead.prec+
(ahead.tag.left?' left':''):' none '));var matchexpr=mapExpr(cand.match,function(m){return m.expr;});cand.expr=cand.rule[3].apply(null,matchexpr);stack.push(cand);ret=true;}else{if(ahead){xpathLog('shift '+ahead.tag.label+' '+ahead.prec+
(ahead.tag.left?' left':'')+' over '+(cand?cand.tag.label+' '+
cand.prec:' none'));stack.push(ahead);}
ret=false;}
return ret;}
function xpathMatchStack(stack,pattern){var S=stack.length;var P=pattern.length;var p,s;var match=[];match.matchlength=0;var ds=0;for(p=P-1,s=S-1;p>=0&&s>=0;--p,s-=ds){ds=0;var qmatch=[];if(pattern[p]==Q_MM){p-=1;match.push(qmatch);while(s-ds>=0&&stack[s-ds].tag==pattern[p]){qmatch.push(stack[s-ds]);ds+=1;match.matchlength+=1;}}else if(pattern[p]==Q_01){p-=1;match.push(qmatch);while(s-ds>=0&&ds<2&&stack[s-ds].tag==pattern[p]){qmatch.push(stack[s-ds]);ds+=1;match.matchlength+=1;}}else if(pattern[p]==Q_1M){p-=1;match.push(qmatch);if(stack[s].tag==pattern[p]){while(s-ds>=0&&stack[s-ds].tag==pattern[p]){qmatch.push(stack[s-ds]);ds+=1;match.matchlength+=1;}}else{return[];}}else if(stack[s].tag==pattern[p]){match.push(stack[s]);ds+=1;match.matchlength+=1;}else{return[];}
reverseInplace(qmatch);qmatch.expr=mapExpr(qmatch,function(m){return m.expr;});}
reverseInplace(match);if(p==-1){return match;}else{return[];}}
function xpathTokenPrecedence(tag){return tag.prec||2;}
function xpathGrammarPrecedence(frame){var ret=0;if(frame.rule){if(frame.rule.length>=3&&frame.rule[2]>=0){ret=frame.rule[2];}else{for(var i=0;i<frame.rule[1].length;++i){var p=xpathTokenPrecedence(frame.rule[1][i]);ret=Math.max(ret,p);}}}else if(frame.tag){ret=xpathTokenPrecedence(frame.tag);}else if(frame.length){for(var j=0;j<frame.length;++j){var p=xpathGrammarPrecedence(frame[j]);ret=Math.max(ret,p);}}
return ret;}
function stackToString(stack){var ret='';for(var i=0;i<stack.length;++i){if(ret){ret+='\n';}
ret+=stack[i].tag.label;}
return ret;}
function ExprContext(node,opt_position,opt_nodelist,opt_parent){this.node=node;this.position=opt_position||0;this.nodelist=opt_nodelist||[node];this.variables={};this.parent=opt_parent||null;if(opt_parent){this.root=opt_parent.root;}else if(this.node.nodeType==DOM_DOCUMENT_NODE){this.root=node;}else{this.root=node.ownerDocument;}}
ExprContext.prototype.clone=function(opt_node,opt_position,opt_nodelist){return new ExprContext(opt_node||this.node,typeof opt_position!='undefined'?opt_position:this.position,opt_nodelist||this.nodelist,this);};ExprContext.prototype.setVariable=function(name,value){this.variables[name]=value;};ExprContext.prototype.getVariable=function(name){if(typeof this.variables[name]!='undefined'){return this.variables[name];}else if(this.parent){return this.parent.getVariable(name);}else{return null;}};ExprContext.prototype.setNode=function(position){this.node=this.nodelist[position];this.position=position;};ExprContext.prototype.contextSize=function(){return this.nodelist.length;};function StringValue(value){this.value=value;this.type='string';}
StringValue.prototype.stringValue=function(){return this.value;};StringValue.prototype.booleanValue=function(){return this.value.length>0;};StringValue.prototype.numberValue=function(){return this.value-0;};StringValue.prototype.nodeSetValue=function(){throw this;};function BooleanValue(value){this.value=value;this.type='boolean';}
BooleanValue.prototype.stringValue=function(){return''+this.value;};BooleanValue.prototype.booleanValue=function(){return this.value;};BooleanValue.prototype.numberValue=function(){return this.value?1:0;};BooleanValue.prototype.nodeSetValue=function(){throw this;};function NumberValue(value){this.value=value;this.type='number';}
NumberValue.prototype.stringValue=function(){return''+this.value;};NumberValue.prototype.booleanValue=function(){return!!this.value;};NumberValue.prototype.numberValue=function(){return this.value-0;};NumberValue.prototype.nodeSetValue=function(){throw this;};function NodeSetValue(value){this.value=value;this.type='node-set';}
NodeSetValue.prototype.stringValue=function(){if(this.value.length==0){return'';}else{return xmlValue(this.value[0]);}};NodeSetValue.prototype.booleanValue=function(){return this.value.length>0;};NodeSetValue.prototype.numberValue=function(){return this.stringValue()-0;};NodeSetValue.prototype.nodeSetValue=function(){return this.value;};function TokenExpr(m){this.value=m;}
TokenExpr.prototype.evaluate=function(){return new StringValue(this.value);};function LocationExpr(){this.absolute=false;this.steps=[];}
LocationExpr.prototype.appendStep=function(s){this.steps.push(s);};LocationExpr.prototype.prependStep=function(s){var steps0=this.steps;this.steps=[s];for(var i=0;i<steps0.length;++i){this.steps.push(steps0[i]);}};LocationExpr.prototype.evaluate=function(ctx){var start;if(this.absolute){start=ctx.root;}else{start=ctx.node;}
var nodes=[];xPathStep(nodes,this.steps,0,start,ctx);return new NodeSetValue(nodes);};function xPathStep(nodes,steps,step,input,ctx){var s=steps[step];var ctx2=ctx.clone(input);var nodelist=s.evaluate(ctx2).nodeSetValue();for(var i=0;i<nodelist.length;++i){if(step==steps.length-1){nodes.push(nodelist[i]);}else{xPathStep(nodes,steps,step+1,nodelist[i],ctx);}}}
function StepExpr(axis,nodetest,opt_predicate){this.axis=axis;this.nodetest=nodetest;this.predicate=opt_predicate||[];}
StepExpr.prototype.appendPredicate=function(p){this.predicate.push(p);};StepExpr.prototype.evaluate=function(ctx){var input=ctx.node;var nodelist=[];if(this.axis==xpathAxis.ANCESTOR_OR_SELF){nodelist.push(input);for(var n=input.parentNode;n;n=n.parentNode){nodelist.push(n);}}else if(this.axis==xpathAxis.ANCESTOR){for(var n=input.parentNode;n;n=n.parentNode){nodelist.push(n);}}else if(this.axis==xpathAxis.ATTRIBUTE){copyArray(nodelist,input.attributes);}else if(this.axis==xpathAxis.CHILD){copyArray(nodelist,input.childNodes);}else if(this.axis==xpathAxis.DESCENDANT_OR_SELF){nodelist.push(input);xpathCollectDescendants(nodelist,input);}else if(this.axis==xpathAxis.DESCENDANT){xpathCollectDescendants(nodelist,input);}else if(this.axis==xpathAxis.FOLLOWING){for(var n=input;n;n=n.parentNode){for(var nn=n.nextSibling;nn;nn=nn.nextSibling){nodelist.push(nn);xpathCollectDescendants(nodelist,nn);}}}else if(this.axis==xpathAxis.FOLLOWING_SIBLING){for(var n=input.nextSibling;n;n=n.nextSibling){nodelist.push(n);}}else if(this.axis==xpathAxis.NAMESPACE){alert('not implemented: axis namespace');}else if(this.axis==xpathAxis.PARENT){if(input.parentNode){nodelist.push(input.parentNode);}}else if(this.axis==xpathAxis.PRECEDING){for(var n=input;n;n=n.parentNode){for(var nn=n.previousSibling;nn;nn=nn.previousSibling){nodelist.push(nn);xpathCollectDescendantsReverse(nodelist,nn);}}}else if(this.axis==xpathAxis.PRECEDING_SIBLING){for(var n=input.previousSibling;n;n=n.previousSibling){nodelist.push(n);}}else if(this.axis==xpathAxis.SELF){nodelist.push(input);}else{throw'ERROR -- NO SUCH AXIS: '+this.axis;}
var nodelist0=nodelist;nodelist=[];for(var i=0;i<nodelist0.length;++i){var n=nodelist0[i];if(this.nodetest.evaluate(ctx.clone(n,i,nodelist0)).booleanValue()){nodelist.push(n);}}
for(var i=0;i<this.predicate.length;++i){var nodelist0=nodelist;nodelist=[];for(var ii=0;ii<nodelist0.length;++ii){var n=nodelist0[ii];if(this.predicate[i].evaluate(ctx.clone(n,ii,nodelist0)).booleanValue()){nodelist.push(n);}}}
return new NodeSetValue(nodelist);};function NodeTestAny(){this.value=new BooleanValue(true);}
NodeTestAny.prototype.evaluate=function(ctx){return this.value;};function NodeTestElementOrAttribute(){}
NodeTestElementOrAttribute.prototype.evaluate=function(ctx){return new BooleanValue(ctx.node.nodeType==DOM_ELEMENT_NODE||ctx.node.nodeType==DOM_ATTRIBUTE_NODE);};function NodeTestText(){}
NodeTestText.prototype.evaluate=function(ctx){return new BooleanValue(ctx.node.nodeType==DOM_TEXT_NODE);};function NodeTestComment(){}
NodeTestComment.prototype.evaluate=function(ctx){return new BooleanValue(ctx.node.nodeType==DOM_COMMENT_NODE);};function NodeTestPI(target){this.target=target;}
NodeTestPI.prototype.evaluate=function(ctx){return new
BooleanValue(ctx.node.nodeType==DOM_PROCESSING_INSTRUCTION_NODE&&(!this.target||ctx.node.nodeName==this.target));};function NodeTestNC(nsprefix){this.regex=new RegExp("^"+nsprefix+":");this.nsprefix=nsprefix;}
NodeTestNC.prototype.evaluate=function(ctx){var n=ctx.node;return new BooleanValue(this.regex.match(n.nodeName));};function NodeTestName(name){this.name=name;}
NodeTestName.prototype.evaluate=function(ctx){var n=ctx.node;return new BooleanValue(n.nodeName==this.name);};function PredicateExpr(expr){this.expr=expr;}
PredicateExpr.prototype.evaluate=function(ctx){var v=this.expr.evaluate(ctx);if(v.type=='number'){return new BooleanValue(ctx.position==v.numberValue()-1);}else{return new BooleanValue(v.booleanValue());}};function FunctionCallExpr(name){this.name=name;this.args=[];}
FunctionCallExpr.prototype.appendArg=function(arg){this.args.push(arg);};FunctionCallExpr.prototype.evaluate=function(ctx){var fn=''+this.name.value;var f=this.xpathfunctions[fn];if(f){return f.call(this,ctx);}else{xpathLog('XPath NO SUCH FUNCTION '+fn);return new BooleanValue(false);}};FunctionCallExpr.prototype.xpathfunctions={'last':function(ctx){assert(this.args.length==0);return new NumberValue(ctx.contextSize());},'position':function(ctx){assert(this.args.length==0);return new NumberValue(ctx.position+1);},'count':function(ctx){assert(this.args.length==1);var v=this.args[0].evaluate(ctx);return new NumberValue(v.nodeSetValue().length);},'id':function(ctx){assert(this.args.length==1);var e=this.args[0].evaluate(ctx);var ret=[];var ids;if(e.type=='node-set'){ids=[];var en=e.nodeSetValue();for(var i=0;i<en.length;++i){var v=xmlValue(en[i]).split(/\s+/);for(var ii=0;ii<v.length;++ii){ids.push(v[ii]);}}}else{ids=e.stringValue().split(/\s+/);}
var d=ctx.node.ownerDocument;for(var i=0;i<ids.length;++i){var n=d.getElementById(ids[i]);if(n){ret.push(n);}}
return new NodeSetValue(ret);},'local-name':function(ctx){alert('not implmented yet: XPath function local-name()');},'namespace-uri':function(ctx){alert('not implmented yet: XPath function namespace-uri()');},'name':function(ctx){assert(this.args.length==1||this.args.length==0);var n;if(this.args.length==0){n=[ctx.node];}else{n=this.args[0].evaluate(ctx).nodeSetValue();}
if(n.length==0){return new StringValue('');}else{return new StringValue(n[0].nodeName);}},'string':function(ctx){assert(this.args.length==1||this.args.length==0);if(this.args.length==0){return new StringValue(new NodeSetValue([ctx.node]).stringValue());}else{return new StringValue(this.args[0].evaluate(ctx).stringValue());}},'concat':function(ctx){var ret='';for(var i=0;i<this.args.length;++i){ret+=this.args[i].evaluate(ctx).stringValue();}
return new StringValue(ret);},'starts-with':function(ctx){assert(this.args.length==2);var s0=this.args[0].evaluate(ctx).stringValue();var s1=this.args[1].evaluate(ctx).stringValue();return new BooleanValue(s0.indexOf(s1)==0);},'contains':function(ctx){assert(this.args.length==2);var s0=this.args[0].evaluate(ctx).stringValue();var s1=this.args[1].evaluate(ctx).stringValue();return new BooleanValue(s0.indexOf(s1)!=-1);},'substring-before':function(ctx){assert(this.args.length==2);var s0=this.args[0].evaluate(ctx).stringValue();var s1=this.args[1].evaluate(ctx).stringValue();var i=s0.indexOf(s1);var ret;if(i==-1){ret='';}else{ret=s0.substr(0,i);}
return new StringValue(ret);},'substring-after':function(ctx){assert(this.args.length==2);var s0=this.args[0].evaluate(ctx).stringValue();var s1=this.args[1].evaluate(ctx).stringValue();var i=s0.indexOf(s1);var ret;if(i==-1){ret='';}else{ret=s0.substr(i+s1.length);}
return new StringValue(ret);},'substring':function(ctx){assert(this.args.length==2||this.args.length==3);var s0=this.args[0].evaluate(ctx).stringValue();var s1=this.args[1].evaluate(ctx).numberValue();var ret;if(this.args.length==2){var i1=Math.max(0,Math.round(s1)-1);ret=s0.substr(i1);}else{var s2=this.args[2].evaluate(ctx).numberValue();var i0=Math.round(s1)-1;var i1=Math.max(0,i0);var i2=Math.round(s2)-Math.max(0,-i0);ret=s0.substr(i1,i2);}
return new StringValue(ret);},'string-length':function(ctx){var s;if(this.args.length>0){s=this.args[0].evaluate(ctx).stringValue();}else{s=new NodeSetValue([ctx.node]).stringValue();}
return new NumberValue(s.length);},'normalize-space':function(ctx){var s;if(this.args.length>0){s=this.args[0].evaluate(ctx).stringValue();}else{s=new NodeSetValue([ctx.node]).stringValue();}
s=s.replace(/^\s*/,'').replace(/\s*$/,'').replace(/\s+/g,' ');return new StringValue(s);},'translate':function(ctx){assert(this.args.length==3);var s0=this.args[0].evaluate(ctx).stringValue();var s1=this.args[1].evaluate(ctx).stringValue();var s2=this.args[2].evaluate(ctx).stringValue();for(var i=0;i<s1.length;++i){s0=s0.replace(new RegExp(s1.charAt(i),'g'),s2.charAt(i));}
return new StringValue(s0);},'boolean':function(ctx){assert(this.args.length==1);return new BooleanValue(this.args[0].evaluate(ctx).booleanValue());},'not':function(ctx){assert(this.args.length==1);var ret=!this.args[0].evaluate(ctx).booleanValue();return new BooleanValue(ret);},'true':function(ctx){assert(this.args.length==0);return new BooleanValue(true);},'false':function(ctx){assert(this.args.length==0);return new BooleanValue(false);},'lang':function(ctx){assert(this.args.length==1);var lang=this.args[0].evaluate(ctx).stringValue();var xmllang;var n=ctx.node;while(n&&n!=n.parentNode){xmllang=n.getAttribute('xml:lang');if(xmllang){break;}
n=n.parentNode;}
if(!xmllang){return new BooleanValue(false);}else{var re=new RegExp('^'+lang+'$','i');return new BooleanValue(xmllang.match(re)||xmllang.replace(/_.*$/,'').match(re));}},'number':function(ctx){assert(this.args.length==1||this.args.length==0);if(this.args.length==1){return new NumberValue(this.args[0].evaluate(ctx).numberValue());}else{return new NumberValue(new NodeSetValue([ctx.node]).numberValue());}},'sum':function(ctx){assert(this.args.length==1);var n=this.args[0].evaluate(ctx).nodeSetValue();var sum=0;for(var i=0;i<n.length;++i){sum+=xmlValue(n[i])-0;}
return new NumberValue(sum);},'floor':function(ctx){assert(this.args.length==1);var num=this.args[0].evaluate(ctx).numberValue();return new NumberValue(Math.floor(num));},'ceiling':function(ctx){assert(this.args.length==1);var num=this.args[0].evaluate(ctx).numberValue();return new NumberValue(Math.ceil(num));},'round':function(ctx){assert(this.args.length==1);var num=this.args[0].evaluate(ctx).numberValue();return new NumberValue(Math.round(num));},'ext-join':function(ctx){assert(this.args.length==2);var nodes=this.args[0].evaluate(ctx).nodeSetValue();var delim=this.args[1].evaluate(ctx).stringValue();var ret='';for(var i=0;i<nodes.length;++i){if(ret){ret+=delim;}
ret+=xmlValue(nodes[i]);}
return new StringValue(ret);},'ext-if':function(ctx){assert(this.args.length==3);if(this.args[0].evaluate(ctx).booleanValue()){return this.args[1].evaluate(ctx);}else{return this.args[2].evaluate(ctx);}},'ext-cardinal':function(ctx){assert(this.args.length>=1);var c=this.args[0].evaluate(ctx).numberValue();var ret=[];for(var i=0;i<c;++i){ret.push(ctx.node);}
return new NodeSetValue(ret);}};function UnionExpr(expr1,expr2){this.expr1=expr1;this.expr2=expr2;}
UnionExpr.prototype.evaluate=function(ctx){var nodes1=this.expr1.evaluate(ctx).nodeSetValue();var nodes2=this.expr2.evaluate(ctx).nodeSetValue();var I1=nodes1.length;for(var i2=0;i2<nodes2.length;++i2){var n=nodes2[i2];var inBoth=false;for(var i1=0;i1<I1;++i1){if(nodes1[i1]==n){inBoth=true;i1=I1;}}
if(!inBoth){nodes1.push(n);}}
return new NodeSetValue(nodes1);};function PathExpr(filter,rel){this.filter=filter;this.rel=rel;}
PathExpr.prototype.evaluate=function(ctx){var nodes=this.filter.evaluate(ctx).nodeSetValue();var nodes1=[];for(var i=0;i<nodes.length;++i){var nodes0=this.rel.evaluate(ctx.clone(nodes[i],i,nodes)).nodeSetValue();for(var ii=0;ii<nodes0.length;++ii){nodes1.push(nodes0[ii]);}}
return new NodeSetValue(nodes1);};function FilterExpr(expr,predicate){this.expr=expr;this.predicate=predicate;}
FilterExpr.prototype.evaluate=function(ctx){var nodes=this.expr.evaluate(ctx).nodeSetValue();for(var i=0;i<this.predicate.length;++i){var nodes0=nodes;nodes=[];for(var j=0;j<nodes0.length;++j){var n=nodes0[j];if(this.predicate[i].evaluate(ctx.clone(n,j,nodes0)).booleanValue()){nodes.push(n);}}}
return new NodeSetValue(nodes);};function UnaryMinusExpr(expr){this.expr=expr;}
UnaryMinusExpr.prototype.evaluate=function(ctx){return new NumberValue(-this.expr.evaluate(ctx).numberValue());};function BinaryExpr(expr1,op,expr2){this.expr1=expr1;this.expr2=expr2;this.op=op;}
BinaryExpr.prototype.evaluate=function(ctx){var ret;switch(this.op.value){case'or':ret=new BooleanValue(this.expr1.evaluate(ctx).booleanValue()||this.expr2.evaluate(ctx).booleanValue());break;case'and':ret=new BooleanValue(this.expr1.evaluate(ctx).booleanValue()&&this.expr2.evaluate(ctx).booleanValue());break;case'+':ret=new NumberValue(this.expr1.evaluate(ctx).numberValue()+
this.expr2.evaluate(ctx).numberValue());break;case'-':ret=new NumberValue(this.expr1.evaluate(ctx).numberValue()-
this.expr2.evaluate(ctx).numberValue());break;case'*':ret=new NumberValue(this.expr1.evaluate(ctx).numberValue()*this.expr2.evaluate(ctx).numberValue());break;case'mod':ret=new NumberValue(this.expr1.evaluate(ctx).numberValue()%this.expr2.evaluate(ctx).numberValue());break;case'div':ret=new NumberValue(this.expr1.evaluate(ctx).numberValue()/this.expr2.evaluate(ctx).numberValue());break;case'=':ret=this.compare(ctx,function(x1,x2){return x1==x2;});break;case'!=':ret=this.compare(ctx,function(x1,x2){return x1!=x2;});break;case'<':ret=this.compare(ctx,function(x1,x2){return x1<x2;});break;case'<=':ret=this.compare(ctx,function(x1,x2){return x1<=x2;});break;case'>':ret=this.compare(ctx,function(x1,x2){return x1>x2;});break;case'>=':ret=this.compare(ctx,function(x1,x2){return x1>=x2;});break;default:alert('BinaryExpr.evaluate: '+this.op.value);}
return ret;};BinaryExpr.prototype.compare=function(ctx,cmp){var v1=this.expr1.evaluate(ctx);var v2=this.expr2.evaluate(ctx);var ret;if(v1.type=='node-set'&&v2.type=='node-set'){var n1=v1.nodeSetValue();var n2=v2.nodeSetValue();ret=false;for(var i1=0;i1<n1.length;++i1){for(var i2=0;i2<n2.length;++i2){if(cmp(xmlValue(n1[i1]),xmlValue(n2[i2]))){ret=true;i2=n2.length;i1=n1.length;}}}}else if(v1.type=='node-set'||v2.type=='node-set'){if(v1.type=='number'){var s=v1.numberValue();var n=v2.nodeSetValue();ret=false;for(var i=0;i<n.length;++i){var nn=xmlValue(n[i])-0;if(cmp(s,nn)){ret=true;break;}}}else if(v2.type=='number'){var n=v1.nodeSetValue();var s=v2.numberValue();ret=false;for(var i=0;i<n.length;++i){var nn=xmlValue(n[i])-0;if(cmp(nn,s)){ret=true;break;}}}else if(v1.type=='string'){var s=v1.stringValue();var n=v2.nodeSetValue();ret=false;for(var i=0;i<n.length;++i){var nn=xmlValue(n[i]);if(cmp(s,nn)){ret=true;break;}}}else if(v2.type=='string'){var n=v1.nodeSetValue();var s=v2.stringValue();ret=false;for(var i=0;i<n.length;++i){var nn=xmlValue(n[i]);if(cmp(nn,s)){ret=true;break;}}}else{ret=cmp(v1.booleanValue(),v2.booleanValue());}}else if(v1.type=='boolean'||v2.type=='boolean'){ret=cmp(v1.booleanValue(),v2.booleanValue());}else if(v1.type=='number'||v2.type=='number'){ret=cmp(v1.numberValue(),v2.numberValue());}else{ret=cmp(v1.stringValue(),v2.stringValue());}
return new BooleanValue(ret);};function LiteralExpr(value){this.value=value;}
LiteralExpr.prototype.evaluate=function(ctx){return new StringValue(this.value);};function NumberExpr(value){this.value=value;}
NumberExpr.prototype.evaluate=function(ctx){return new NumberValue(this.value);};function VariableExpr(name){this.name=name;}
VariableExpr.prototype.evaluate=function(ctx){return ctx.getVariable(this.name);};function makeTokenExpr(m){return new TokenExpr(m);}
function passExpr(e){return e;}
function makeLocationExpr1(slash,rel){rel.absolute=true;return rel;}
function makeLocationExpr2(dslash,rel){rel.absolute=true;rel.prependStep(makeAbbrevStep(dslash.value));return rel;}
function makeLocationExpr3(slash){var ret=new LocationExpr();ret.appendStep(makeAbbrevStep('.'));ret.absolute=true;return ret;}
function makeLocationExpr4(dslash){var ret=new LocationExpr();ret.absolute=true;ret.appendStep(makeAbbrevStep(dslash.value));return ret;}
function makeLocationExpr5(step){var ret=new LocationExpr();ret.appendStep(step);return ret;}
function makeLocationExpr6(rel,slash,step){rel.appendStep(step);return rel;}
function makeLocationExpr7(rel,dslash,step){rel.appendStep(makeAbbrevStep(dslash.value));return rel;}
function makeStepExpr1(dot){return makeAbbrevStep(dot.value);}
function makeStepExpr2(ddot){return makeAbbrevStep(ddot.value);}
function makeStepExpr3(axisname,axis,nodetest){return new StepExpr(axisname.value,nodetest);}
function makeStepExpr4(at,nodetest){return new StepExpr('attribute',nodetest);}
function makeStepExpr5(nodetest){return new StepExpr('child',nodetest);}
function makeStepExpr6(step,predicate){step.appendPredicate(predicate);return step;}
function makeAbbrevStep(abbrev){switch(abbrev){case'//':return new StepExpr('descendant-or-self',new NodeTestAny);case'.':return new StepExpr('self',new NodeTestAny);case'..':return new StepExpr('parent',new NodeTestAny);}}
function makeNodeTestExpr1(asterisk){return new NodeTestElementOrAttribute;}
function makeNodeTestExpr2(ncname,colon,asterisk){return new NodeTestNC(ncname.value);}
function makeNodeTestExpr3(qname){return new NodeTestName(qname.value);}
function makeNodeTestExpr4(typeo,parenc){var type=typeo.value.replace(/\s*\($/,'');switch(type){case'node':return new NodeTestAny;case'text':return new NodeTestText;case'comment':return new NodeTestComment;case'processing-instruction':return new NodeTestPI('');}}
function makeNodeTestExpr5(typeo,target,parenc){var type=typeo.replace(/\s*\($/,'');if(type!='processing-instruction'){throw type;}
return new NodeTestPI(target.value);}
function makePredicateExpr(pareno,expr,parenc){return new PredicateExpr(expr);}
function makePrimaryExpr(pareno,expr,parenc){return expr;}
function makeFunctionCallExpr1(name,pareno,parenc){return new FunctionCallExpr(name);}
function makeFunctionCallExpr2(name,pareno,arg1,args,parenc){var ret=new FunctionCallExpr(name);ret.appendArg(arg1);for(var i=0;i<args.length;++i){ret.appendArg(args[i]);}
return ret;}
function makeArgumentExpr(comma,expr){return expr;}
function makeUnionExpr(expr1,pipe,expr2){return new UnionExpr(expr1,expr2);}
function makePathExpr1(filter,slash,rel){return new PathExpr(filter,rel);}
function makePathExpr2(filter,dslash,rel){rel.prependStep(makeAbbrevStep(dslash.value));return new PathExpr(filter,rel);}
function makeFilterExpr(expr,predicates){if(predicates.length>0){return new FilterExpr(expr,predicates);}else{return expr;}}
function makeUnaryMinusExpr(minus,expr){return new UnaryMinusExpr(expr);}
function makeBinaryExpr(expr1,op,expr2){return new BinaryExpr(expr1,op,expr2);}
function makeLiteralExpr(token){var value=token.value.substring(1,token.value.length-1);return new LiteralExpr(value);}
function makeNumberExpr(token){return new NumberExpr(token.value);}
function makeVariableReference(dollar,name){return new VariableExpr(name.value);}
function makeSimpleExpr(expr){if(expr.charAt(0)=='$'){return new VariableExpr(expr.substr(1));}else if(expr.charAt(0)=='@'){var a=new NodeTestName(expr.substr(1));var b=new StepExpr('attribute',a);var c=new LocationExpr();c.appendStep(b);return c;}else if(expr.match(/^[0-9]+$/)){return new NumberExpr(expr);}else{var a=new NodeTestName(expr);var b=new StepExpr('child',a);var c=new LocationExpr();c.appendStep(b);return c;}}
function makeSimpleExpr2(expr){var steps=stringSplit(expr,'/');var c=new LocationExpr();for(var i=0;i<steps.length;++i){var a=new NodeTestName(steps[i]);var b=new StepExpr('child',a);c.appendStep(b);}
return c;}
var xpathAxis={ANCESTOR_OR_SELF:'ancestor-or-self',ANCESTOR:'ancestor',ATTRIBUTE:'attribute',CHILD:'child',DESCENDANT_OR_SELF:'descendant-or-self',DESCENDANT:'descendant',FOLLOWING_SIBLING:'following-sibling',FOLLOWING:'following',NAMESPACE:'namespace',PARENT:'parent',PRECEDING_SIBLING:'preceding-sibling',PRECEDING:'preceding',SELF:'self'};var xpathAxesRe=[xpathAxis.ANCESTOR_OR_SELF,xpathAxis.ANCESTOR,xpathAxis.ATTRIBUTE,xpathAxis.CHILD,xpathAxis.DESCENDANT_OR_SELF,xpathAxis.DESCENDANT,xpathAxis.FOLLOWING_SIBLING,xpathAxis.FOLLOWING,xpathAxis.NAMESPACE,xpathAxis.PARENT,xpathAxis.PRECEDING_SIBLING,xpathAxis.PRECEDING,xpathAxis.SELF].join('|');var TOK_PIPE={label:"|",prec:17,re:new RegExp("^\\|")};var TOK_DSLASH={label:"//",prec:19,re:new RegExp("^//")};var TOK_SLASH={label:"/",prec:30,re:new RegExp("^/")};var TOK_AXIS={label:"::",prec:20,re:new RegExp("^::")};var TOK_COLON={label:":",prec:1000,re:new RegExp("^:")};var TOK_AXISNAME={label:"[axis]",re:new RegExp('^('+xpathAxesRe+')')};var TOK_PARENO={label:"(",prec:34,re:new RegExp("^\\(")};var TOK_PARENC={label:")",re:new RegExp("^\\)")};var TOK_DDOT={label:"..",prec:34,re:new RegExp("^\\.\\.")};var TOK_DOT={label:".",prec:34,re:new RegExp("^\\.")};var TOK_AT={label:"@",prec:34,re:new RegExp("^@")};var TOK_COMMA={label:",",re:new RegExp("^,")};var TOK_OR={label:"or",prec:10,re:new RegExp("^or\\b")};var TOK_AND={label:"and",prec:11,re:new RegExp("^and\\b")};var TOK_EQ={label:"=",prec:12,re:new RegExp("^=")};var TOK_NEQ={label:"!=",prec:12,re:new RegExp("^!=")};var TOK_GE={label:">=",prec:13,re:new RegExp("^>=")};var TOK_GT={label:">",prec:13,re:new RegExp("^>")};var TOK_LE={label:"<=",prec:13,re:new RegExp("^<=")};var TOK_LT={label:"<",prec:13,re:new RegExp("^<")};var TOK_PLUS={label:"+",prec:14,re:new RegExp("^\\+"),left:true};var TOK_MINUS={label:"-",prec:14,re:new RegExp("^\\-"),left:true};var TOK_DIV={label:"div",prec:15,re:new RegExp("^div\\b"),left:true};var TOK_MOD={label:"mod",prec:15,re:new RegExp("^mod\\b"),left:true};var TOK_BRACKO={label:"[",prec:32,re:new RegExp("^\\[")};var TOK_BRACKC={label:"]",re:new RegExp("^\\]")};var TOK_DOLLAR={label:"$",re:new RegExp("^\\$")};var TOK_NCNAME={label:"[ncname]",re:new RegExp('^'+XML_NC_NAME)};var TOK_ASTERISK={label:"*",prec:15,re:new RegExp("^\\*"),left:true};var TOK_LITERALQ={label:"[litq]",prec:20,re:new RegExp("^'[^\\']*'")};var TOK_LITERALQQ={label:"[litqq]",prec:20,re:new RegExp('^"[^\\"]*"')};var TOK_NUMBER={label:"[number]",prec:35,re:new RegExp('^\\d+(\\.\\d*)?')};var TOK_QNAME={label:"[qname]",re:new RegExp('^('+XML_NC_NAME+':)?'+XML_NC_NAME)};var TOK_NODEO={label:"[nodetest-start]",re:new RegExp('^(processing-instruction|comment|text|node)\\(')};var xpathTokenRules=[TOK_DSLASH,TOK_SLASH,TOK_DDOT,TOK_DOT,TOK_AXIS,TOK_COLON,TOK_AXISNAME,TOK_NODEO,TOK_PARENO,TOK_PARENC,TOK_BRACKO,TOK_BRACKC,TOK_AT,TOK_COMMA,TOK_OR,TOK_AND,TOK_NEQ,TOK_EQ,TOK_GE,TOK_GT,TOK_LE,TOK_LT,TOK_PLUS,TOK_MINUS,TOK_ASTERISK,TOK_PIPE,TOK_MOD,TOK_DIV,TOK_LITERALQ,TOK_LITERALQQ,TOK_NUMBER,TOK_QNAME,TOK_NCNAME,TOK_DOLLAR];var XPathLocationPath={label:"LocationPath"};var XPathRelativeLocationPath={label:"RelativeLocationPath"};var XPathAbsoluteLocationPath={label:"AbsoluteLocationPath"};var XPathStep={label:"Step"};var XPathNodeTest={label:"NodeTest"};var XPathPredicate={label:"Predicate"};var XPathLiteral={label:"Literal"};var XPathExpr={label:"Expr"};var XPathPrimaryExpr={label:"PrimaryExpr"};var XPathVariableReference={label:"Variablereference"};var XPathNumber={label:"Number"};var XPathFunctionCall={label:"FunctionCall"};var XPathArgumentRemainder={label:"ArgumentRemainder"};var XPathPathExpr={label:"PathExpr"};var XPathUnionExpr={label:"UnionExpr"};var XPathFilterExpr={label:"FilterExpr"};var XPathDigits={label:"Digits"};var xpathNonTerminals=[XPathLocationPath,XPathRelativeLocationPath,XPathAbsoluteLocationPath,XPathStep,XPathNodeTest,XPathPredicate,XPathLiteral,XPathExpr,XPathPrimaryExpr,XPathVariableReference,XPathNumber,XPathFunctionCall,XPathArgumentRemainder,XPathPathExpr,XPathUnionExpr,XPathFilterExpr,XPathDigits];var Q_01={label:"?"};var Q_MM={label:"*"};var Q_1M={label:"+"};var ASSOC_LEFT=true;var xpathGrammarRules=[[XPathLocationPath,[XPathRelativeLocationPath],18,passExpr],[XPathLocationPath,[XPathAbsoluteLocationPath],18,passExpr],[XPathAbsoluteLocationPath,[TOK_SLASH,XPathRelativeLocationPath],18,makeLocationExpr1],[XPathAbsoluteLocationPath,[TOK_DSLASH,XPathRelativeLocationPath],18,makeLocationExpr2],[XPathAbsoluteLocationPath,[TOK_SLASH],0,makeLocationExpr3],[XPathAbsoluteLocationPath,[TOK_DSLASH],0,makeLocationExpr4],[XPathRelativeLocationPath,[XPathStep],31,makeLocationExpr5],[XPathRelativeLocationPath,[XPathRelativeLocationPath,TOK_SLASH,XPathStep],31,makeLocationExpr6],[XPathRelativeLocationPath,[XPathRelativeLocationPath,TOK_DSLASH,XPathStep],31,makeLocationExpr7],[XPathStep,[TOK_DOT],33,makeStepExpr1],[XPathStep,[TOK_DDOT],33,makeStepExpr2],[XPathStep,[TOK_AXISNAME,TOK_AXIS,XPathNodeTest],33,makeStepExpr3],[XPathStep,[TOK_AT,XPathNodeTest],33,makeStepExpr4],[XPathStep,[XPathNodeTest],33,makeStepExpr5],[XPathStep,[XPathStep,XPathPredicate],33,makeStepExpr6],[XPathNodeTest,[TOK_ASTERISK],33,makeNodeTestExpr1],[XPathNodeTest,[TOK_NCNAME,TOK_COLON,TOK_ASTERISK],33,makeNodeTestExpr2],[XPathNodeTest,[TOK_QNAME],33,makeNodeTestExpr3],[XPathNodeTest,[TOK_NODEO,TOK_PARENC],33,makeNodeTestExpr4],[XPathNodeTest,[TOK_NODEO,XPathLiteral,TOK_PARENC],33,makeNodeTestExpr5],[XPathPredicate,[TOK_BRACKO,XPathExpr,TOK_BRACKC],33,makePredicateExpr],[XPathPrimaryExpr,[XPathVariableReference],33,passExpr],[XPathPrimaryExpr,[TOK_PARENO,XPathExpr,TOK_PARENC],33,makePrimaryExpr],[XPathPrimaryExpr,[XPathLiteral],30,passExpr],[XPathPrimaryExpr,[XPathNumber],30,passExpr],[XPathPrimaryExpr,[XPathFunctionCall],30,passExpr],[XPathFunctionCall,[TOK_QNAME,TOK_PARENO,TOK_PARENC],-1,makeFunctionCallExpr1],[XPathFunctionCall,[TOK_QNAME,TOK_PARENO,XPathExpr,XPathArgumentRemainder,Q_MM,TOK_PARENC],-1,makeFunctionCallExpr2],[XPathArgumentRemainder,[TOK_COMMA,XPathExpr],-1,makeArgumentExpr],[XPathUnionExpr,[XPathPathExpr],20,passExpr],[XPathUnionExpr,[XPathUnionExpr,TOK_PIPE,XPathPathExpr],20,makeUnionExpr],[XPathPathExpr,[XPathLocationPath],20,passExpr],[XPathPathExpr,[XPathFilterExpr],19,passExpr],[XPathPathExpr,[XPathFilterExpr,TOK_SLASH,XPathRelativeLocationPath],20,makePathExpr1],[XPathPathExpr,[XPathFilterExpr,TOK_DSLASH,XPathRelativeLocationPath],20,makePathExpr2],[XPathFilterExpr,[XPathPrimaryExpr,XPathPredicate,Q_MM],20,makeFilterExpr],[XPathExpr,[XPathPrimaryExpr],16,passExpr],[XPathExpr,[XPathUnionExpr],16,passExpr],[XPathExpr,[TOK_MINUS,XPathExpr],-1,makeUnaryMinusExpr],[XPathExpr,[XPathExpr,TOK_OR,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_AND,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_EQ,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_NEQ,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_LT,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_LE,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_GT,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_GE,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_PLUS,XPathExpr],-1,makeBinaryExpr,ASSOC_LEFT],[XPathExpr,[XPathExpr,TOK_MINUS,XPathExpr],-1,makeBinaryExpr,ASSOC_LEFT],[XPathExpr,[XPathExpr,TOK_ASTERISK,XPathExpr],-1,makeBinaryExpr,ASSOC_LEFT],[XPathExpr,[XPathExpr,TOK_DIV,XPathExpr],-1,makeBinaryExpr,ASSOC_LEFT],[XPathExpr,[XPathExpr,TOK_MOD,XPathExpr],-1,makeBinaryExpr,ASSOC_LEFT],[XPathLiteral,[TOK_LITERALQ],-1,makeLiteralExpr],[XPathLiteral,[TOK_LITERALQQ],-1,makeLiteralExpr],[XPathNumber,[TOK_NUMBER],-1,makeNumberExpr],[XPathVariableReference,[TOK_DOLLAR,TOK_QNAME],200,makeVariableReference]];var xpathRules=[];function xpathParseInit(){if(xpathRules.length){return;}
xpathGrammarRules.sort(function(a,b){var la=a[1].length;var lb=b[1].length;if(la<lb){return 1;}else if(la>lb){return-1;}else{return 0;}});var k=1;for(var i=0;i<xpathNonTerminals.length;++i){xpathNonTerminals[i].key=k++;}
for(i=0;i<xpathTokenRules.length;++i){xpathTokenRules[i].key=k++;}
xpathLog('XPath parse INIT: '+k+' rules');function push_(array,position,element){if(!array[position]){array[position]=[];}
array[position].push(element);}
for(i=0;i<xpathGrammarRules.length;++i){var rule=xpathGrammarRules[i];var pattern=rule[1];for(var j=pattern.length-1;j>=0;--j){if(pattern[j]==Q_1M){push_(xpathRules,pattern[j-1].key,rule);break;}else if(pattern[j]==Q_MM||pattern[j]==Q_01){push_(xpathRules,pattern[j-1].key,rule);--j;}else{push_(xpathRules,pattern[j].key,rule);break;}}}
xpathLog('XPath parse INIT: '+xpathRules.length+' rule bins');var sum=0;mapExec(xpathRules,function(i){if(i){sum+=i.length;}});xpathLog('XPath parse INIT: '+(sum/xpathRules.length)+' average bin size');}
function xpathCollectDescendants(nodelist,node){for(var n=node.firstChild;n;n=n.nextSibling){nodelist.push(n);arguments.callee(nodelist,n);}}
function xpathCollectDescendantsReverse(nodelist,node){for(var n=node.lastChild;n;n=n.previousSibling){nodelist.push(n);arguments.callee(nodelist,n);}}
function xpathDomEval(expr,node){var expr1=xpathParse(expr);var ret=expr1.evaluate(new ExprContext(node));return ret;}
function xpathSort(input,sort){if(sort.length==0){return;}
var sortlist=[];for(var i=0;i<input.contextSize();++i){var node=input.nodelist[i];var sortitem={node:node,key:[]};var context=input.clone(node,0,[node]);for(var j=0;j<sort.length;++j){var s=sort[j];var value=s.expr.evaluate(context);var evalue;if(s.type=='text'){evalue=value.stringValue();}else if(s.type=='number'){evalue=value.numberValue();}
sortitem.key.push({value:evalue,order:s.order});}
sortitem.key.push({value:i,order:'ascending'});sortlist.push(sortitem);}
sortlist.sort(xpathSortByKey);var nodes=[];for(var i=0;i<sortlist.length;++i){nodes.push(sortlist[i].node);}
input.nodelist=nodes;input.setNode(0);}
function xpathSortByKey(v1,v2){for(var i=0;i<v1.key.length;++i){var o=v1.key[i].order=='descending'?-1:1;if(v1.key[i].value>v2.key[i].value){return+1*o;}else if(v1.key[i].value<v2.key[i].value){return-1*o;}}
return 0;}
function xpathEval(select,context){var expr=xpathParse(select);var ret=expr.evaluate(context);return ret;};function initSearch()
{};function signUpNowContinue()
{var bReturn=false;Spry.$$("#showError").setStyle("display:none");if(Spry.Widget.Form.validate(document.getElementById('form_signup')))
{Spry.$$(".progress",document.getElementById('form_signup')).setStyle("display:inline");Spry.Utils.submitForm(document.getElementById('form_signup'),signUpNowCB);}
return bReturn;}
function showSignUpForm()
{var bSetFocus=false;Spry.$$("#overlay").setStyle("display:block;");Spry.$$("#signup_pod_container").setStyle("display:block;");if(bSetFocus)
{document.getElementById('signup_email').focus();}
return false;}
function hideSignUpForm()
{Spry.$$("#signup_pod_container").setStyle("display:none");Spry.$$("#overlay").setStyle("display:none");if(recaptchaWidgetPreviousParent)
{var recaptchaWidget=document.getElementById("recaptcha_widget_div");var oldParent=recaptchaWidget.parentNode;recaptchaWidgetPreviousParent.insertBefore(oldParent.removeChild(recaptchaWidget),null);}
return false;}
var vtf_signupemail=null;var vtp_signuppw=null;var vtc_signupconfirm=null;function initSignUp(strSignUpButtonID)
{if(document.getElementById("btn_signup_close"))
{Spry.$$("#"+strSignUpButtonID).addEventListener("click",showSignUpForm,false);Spry.$$("#btn_signup_close").addEventListener("click",hideSignUpForm,false);}}
var recaptchaWidgetPreviousParent=null;function signUpNowCB(req)
{if(req.xhRequest.responseText=="success")
{Spry.$$(".progress",document.getElementById('form_signup')).setStyle("display:none");if(document.getElementById('signup_part1').style.display!='none')
{Spry.$$("#signup_part1").setStyle("display:none");var recaptchaWidget=document.getElementById("recaptcha_widget_div");var newRecaptchaContainer=document.getElementById("signup_recaptcha_container");if(newRecaptchaContainer.previousSibling!=recaptchaWidget)
{recaptchaWidgetPreviousParent=recaptchaWidget.parentNode;var oldParent=recaptchaWidget.parentNode;newRecaptchaContainer.insertBefore(oldParent.removeChild(recaptchaWidget),null);}
Spry.$$("#signup_part2").setStyle("display:block");document.getElementById("step").value=2;}
else if(document.getElementById('signup_part2').style.display!='none')
{try
{var pageTracker=_gat._getTracker("UA-295227-1");pageTracker._trackPageview("/googlefunnel/signupemai");}catch(err){}
document.getElementById('sent_email').innerHTML=document.getElementById('signup_email').value;Spry.$$("#signup_part2").setStyle("display:none");Spry.$$("#signup_part3").setStyle("display:block");document.getElementById("step").value=3;new Spry.Widget.ValidationTextField("sprytf_code","none",{validateOn:["blur"],minChars:32,maxChars:32});Spry.Utils.updateContent("track_emailpw","/TrackEmailPW",null,{async:false});}
else if(document.getElementById('signup_part3').style.display!='none')
{var strDomain=String(window.location).substring(String(window.location).indexOf("://")+3,String(window.location).indexOf(".com")+4);parent.location.href="https://"+strDomain+"/SignUp?k="+document.getElementById('code').value;}}
else
{Spry.Utils.setInnerHTML('showError',req.xhRequest.responseText);Spry.$$("#showError").setStyle("display:block");}};var strMustBeLoggedIn="You must be signed in to make changes.";var MenuBar1=null;Spry.Utils.addLoadListener(function()
{if(document.getElementById("MenuBar1"))
{new Spry.Widget.MenuBar("MenuBar1",{imgDown:"/SpryAssets/SpryMenuBarDownHover.gif",imgRight:"/SpryAssets/SpryMenuBarRightHover.gif"});}
Spry.$$("#scanalert").addEventListener("contextmenu",function(){alert('Copying Prohibited by Law - HACKER SAFE is a Trademark of ScanAlert');return false;},false);Spry.$$(".whatisthis").addEventListener("click",whatIsThis,false);Spry.$$(".whatisthisplain").addEventListener("click",whatIsThis,false);});function getDomainString()
{return String(window.location).substring(String(window.location).indexOf("://")+3,String(window.location).indexOf(".com")+4);}
function sendInfoActionURL(strID)
{return"https://"+getDomainString()+"/SendInfo/"+strID;}
function adjustFormAction(elem,bVal)
{if(bVal==null)bVal=1;var strURL=new String(elem.action);var strNewURL=adjustSendInfoURL(strURL,bVal);if(strURL!=strNewURL)
{elem.action=strNewURL;}}
function adjustSendInfoURL(strURL,bVal)
{if(bVal==null)bVal=1;var i=0;var strNewURL=strURL;var strProtocol=strURL.substring(0,strURL.indexOf(":"));var nPageStart=strURL.indexOf("/",8)+1;var nPageEnd=strURL.indexOf("?");nPageEnd=(nPageEnd>0?nPageEnd:strURL.length);var strPage=strURL.substring(nPageStart,nPageEnd);if(strPage.substr(0,8)=="SendInfo")
{strNewURL=strProtocol+"://"+getDomainString()+"/"+strPage+"?";var objParams=Spry.Utils.getURLParamsAsObject(strURL);objParams["j"]=bVal;for(param in objParams)
{if(param=="j"&&objParams[param]!=1)
{break;}
if(param.length!=0)
{strNewURL+=(i++?"&":"");strNewURL+=param+"="+encodeURIComponent(objParams[param]);}}}
return strNewURL;}
function confirmCorrectEmail(spryTF)
{var bResult=true;if(spryTF.type=='email')
{var value=spryTF.input.value;var nDotIndex=value.lastIndexOf('.');if(nDotIndex>0)
{var strDomainEnd=value.substr(nDotIndex+1).toLowerCase();if(strDomainEnd=="cm"||strDomainEnd=="xom"||strDomainEnd=="co"||strDomainEnd=="cmo")
{if(!confirm("Please confirm that the correct e-mail address is:\n\n\t"+value))
{spryTF.errors=spryTF.errors|Spry.Widget.ValidationTextField.ERROR_FORMAT;spryTF.addClassName(spryTF.element,spryTF.invalidFormatClass);bResult=false;}}}}
return bResult;}
function signOutCB(req)
{if(req.xhRequest.responseText=="success")
{var strDomain=String(window.location).substring(String(window.location).indexOf("://")+3,String(window.location).indexOf(".com")+4);window.location="http://"+strDomain+"/";}}
function insertAfter(newElement,targetElement)
{var parent=targetElement.parentNode;if(parent.lastchild==targetElement)
{parent.appendChild(newElement);}
else
{parent.insertBefore(newElement,targetElement.nextSibling);}}
var hideShowMessageCB=null;var strMessageBoxID="show_message_container";function showMessageLarge(strTitle,strMessage,strButton,fnOnClose)
{strMessageBoxID="show_message_container_lg";return showMessage(strTitle,strMessage,strButton,fnOnClose);}
function showMessageSmall(strTitle,strMessage,strButton,fnOnClose)
{strMessageBoxID="show_message_container";return showMessage(strTitle,strMessage,strButton,fnOnClose);}
function showMessage(strTitle,strMessage,strButton,fnOnClose)
{if(strTitle=="")
{strTitle="Please read";}
if(strButton=="")
{strButton="Close";}
hideShowMessageCB=fnOnClose;var mainDoc=document;if(parent)
{mainDoc=parent.document;}
var strContainerID=strMessageBoxID;var theContainer=mainDoc.getElementById(strContainerID);if(!theContainer)
{theContainer=mainDoc.createElement("div");theContainer.id=strContainerID;mainDoc.getElementsByTagName("body")[0].appendChild(theContainer);}
Spry.Utils.addClassName(theContainer,"pod_container");var theOverlay=mainDoc.getElementById("overlay");if(!theOverlay)
{theOverlay=mainDoc.createElement("div");theOverlay.id="overlay";mainDoc.getElementsByTagName("body")[0].appendChild(theOverlay);}
if(/MSIE/.test(navigator.userAgent))
{theOverlay.style.zIndex=theContainer.style.zIndex-1;}
var strContent='<div class="pod_top"><h2 id="title_show_message">'+strTitle+'</h2></div><div class="pod_content"><div id="show_message_content">'+strMessage+'</div><input type="button" id="btn_close_show_message" value="'+strButton+'" class="closebutton" /></div><div class="pod_bottom"></div>';Spry.Utils.setInnerHTML(theContainer,strContent);Spry.Utils.addEventListener(mainDoc.getElementById("btn_close_show_message"),"click",hideShowMessage,false);bHideOverlay=(theOverlay.style.display!='block');if(/MSIE/.test(navigator.userAgent)&&!bHideOverlay)
{elemPodToHide=null;Spry.$$(".pod_container").forEach(function(elem){if(elem.style.display=='block'){elemPodToHide=elem;elemPodToHide.style.display='none';}});theOverlay.style.display='none';}
theOverlay.style.display='block';theContainer.style.display='block';return false;}
function hideShowMessage(event)
{var mainDoc=document;if(parent&&parent.document.getElementById("signinform"))
{mainDoc=parent.document;}
mainDoc.getElementById('overlay').style.display='none';mainDoc.getElementById(strMessageBoxID).style.display='none';if(hideShowMessageCB!=null)hideShowMessageCB();}
function whatIsThisAfterLoadHandler(elem)
{switch(elem.id)
{case"paypalverification_whatisthis":Spry.$$("#btn_paypal_sendverification").addEventListener("click",sendPayPalVerification,false);break;}}
function whatIsThisAfterHideHandler(elem)
{switch(elem.id)
{case"paypalverification_whatisthis":Spry.$$("#btn_paypal_sendverification").removeEventListener("click",sendPayPalVerification,false);break;}}
var bHideOverlay=true;var elemPodToHide=null;var whatIsThisElement=null;function whatIsThis(event)
{whatIsThisElement=(event.target)?event.target:event.srcElement;var mainDoc=document;if(parent)
{mainDoc=parent.document;}
var theContainer=mainDoc.getElementById("what_is_this_container");if(!theContainer)
{theContainer=mainDoc.createElement("div");theContainer.id="what_is_this_container";mainDoc.getElementsByTagName("body")[0].appendChild(theContainer);}
var theOverlay=mainDoc.getElementById("overlay");if(!theOverlay)
{theOverlay=mainDoc.createElement("div");theOverlay.id="overlay";mainDoc.getElementsByTagName("body")[0].appendChild(theOverlay);}
if(/MSIE/.test(navigator.userAgent))
{theOverlay.style.zIndex=theContainer.style.zIndex-1;}
Spry.Utils.updateContent(theContainer,whatIsThisElement.href,whatIsThisCB);return false;}
function whatIsThisCB(ele,contentURL)
{var mainDoc=document;if(parent&&parent.document.getElementById("signinform"))
{mainDoc=parent.document;}
if(mainDoc.getElementById("what_is_this_container").innerHTML==strMustBeLoggedIn)
{var strDomain=String(window.location).substring(String(window.location).indexOf("://")+3,String(window.location).indexOf(".com")+4);window.location="https://"+strDomain+"/SignIn?r=timeout";return;}
Spry.Utils.addEventListener(mainDoc.getElementById("btn_close_what_is_this"),"click",hideWhatIsThis,false);var overlay=mainDoc.getElementById('overlay');bHideOverlay=(overlay.style.display!='block');if(/MSIE/.test(navigator.userAgent)&&!bHideOverlay)
{elemPodToHide=null;Spry.$$(".pod_container").forEach(function(elem){if(elem.style.display=='block'){elemPodToHide=elem;elemPodToHide.style.display='none';}});mainDoc.getElementById('overlay').style.display='none';}
mainDoc.getElementById('overlay').style.display='block';mainDoc.getElementById('pod_what_is_this').style.display='block';whatIsThisAfterLoadHandler(whatIsThisElement);}
function hideWhatIsThis(event)
{var mainDoc=document;if(parent&&parent.document.getElementById("signinform"))
{mainDoc=parent.document;}
if(bHideOverlay)
{mainDoc.getElementById('overlay').style.display='none';}
else if(/MSIE/.test(navigator.userAgent)&&elemPodToHide)
{mainDoc.getElementById('overlay').style.display='block';elemPodToHide.style.display='block';elemPodToHide=null;}
mainDoc.getElementById('pod_what_is_this').style.display='none';whatIsThisAfterHideHandler(whatIsThisElement);}
function html_entity_decode(str)
{try
{var tarea=document.createElement('textarea');tarea.innerHTML=str;str=tarea.value;tarea.parentNode.removeChild(tarea);}
catch(e)
{document.getElementById("overlay").innerHTML='<textarea id="innerConverter">'+str+'</textarea>';var str=document.getElementById("innerConverter").value;document.getElementById("overlay").innerHTML="";}
return str;}
function showTerms()
{var strFileName="/Terms";newWindow=window.open(strFileName,'newwindow',config='height=550,width=1024,toolbar=no,menubar=no,scrollbars=yes,resizable=yes,location=no,directories=no,status=no');return false;}
function showAdditionalTerms()
{var strFileName="/AdditionalTerms";newWindow=window.open(strFileName,'newwindow',config='height=550,width=1024,toolbar=no,menubar=no,scrollbars=yes,resizable=yes,location=no,directories=no,status=no');return false;}
function openRedirect(url)
{var strFileName="/Redirect?u="+url;newWindow=window.open(strFileName,'redirect',config='height=550,width=790,toolbar=no,menubar=no,scrollbars=yes,resizable=yes,location=no,directories=no,status=no');return false;}
function openItem(itemURL)
{var strFileName="/Redirect?u="+itemURL;newWindow=window.open(strFileName,'registryitem',config='height=550,width=790,toolbar=yes,menubar=yes,scrollbars=yes,resizable=yes,location=yes,directories=yes,status=yes');return false;}
function MM_findObj(n,d){var p,i,x;if(!d)d=document;if((p=n.indexOf("?"))>0&&parent.frames.length){d=parent.frames[n.substring(p+1)].document;n=n.substring(0,p);}
if(!(x=d[n])&&d.all)x=d.all[n];for(i=0;!x&&i<d.forms.length;i++)x=d.forms[i][n];for(i=0;!x&&d.layers&&i<d.layers.length;i++)x=MM_findObj(n,d.layers[i].document);if(!x&&d.getElementById)x=d.getElementById(n);return x;}
function MM_setTextOfLayer(objName,x,newText){if((obj=MM_findObj(objName))!=null)with(obj)
if(document.layers){document.write(unescape(newText));document.close();}
else innerHTML=unescape(newText);}
function MM_jumpMenu(targ,selObj,restore){eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");if(restore)selObj.selectedIndex=0;}
function updateTotal(form,strCurrency)
{var nSum=getTotal(form);if(nSum>0)
{var strTotal=strCurrency+nSum+'.00';MM_setTextOfLayer('layerTotal1','',strTotal);}
else
{var strTotal=strCurrency+'0.00';MM_setTextOfLayer('layerTotal1','',strTotal);}}
function getTotal(form)
{var nSum=0;var arrQuantity=new Array();var arrElements=form.elements;for(var nItem=0;nItem<arrElements.length;nItem++)
{if(arrElements[nItem].type=="select-one")
{arrQuantity.push(arrElements[nItem]);}}
for(var nCurr=0;nCurr<arrQuantity.length;nCurr++)
{var eleQuantity=arrQuantity[nCurr];var nID=eleQuantity.id.split('-')[1];var elePrice=document.getElementById("price-"+nID);nSum+=eleQuantity.value*elePrice.value;}
return nSum;};Spry.Utils.addLoadListener(function()
{var acc1=new Spry.Widget.Accordion("Accordion1",{enableAnimation:false});var ua=navigator.userAgent.toString();var r=false
if(!(r=ua.match(/MSIE.([0-9\.]*)/i))||parseFloat(r[1])>=7)
{Spry.$$("#tab_signin").addEventListener("click",setSignInFrame,false);}
if(document.getElementById("signup_frame"))
{Spry.$$("#btn_signup").addEventListener("click",setSignUpFrame,false);}
initSearch();initSignUp("btn_signup");});var strDomain=String(window.location).substring(String(window.location).indexOf("://")+3,String(window.location).indexOf(".com")+4);var bLoadedSignIn=false;function setSignInFrame()
{var strPage="https://"+strDomain+"/SignInHomeFrame";if(document.getElementById("signin_frame").src!=strPage)
{bLoadedSignIn=false;Spry.$$("#loadingSignIn").setStyle("display:block");Spry.$$("#limitedSignIn").setStyle("display:none");window.setTimeout(showLimitedSignIn,5000);Spry.$$("#signin_frame").setStyle("display:none");Spry.$$("#signin_frame").addEventListener("load",loadedSignIn,false);Spry.$$("#signin_frame").setAttribute("src",strPage);}}
function loadedSignIn()
{Spry.$$("#loadingSignIn").setStyle("display:none");Spry.$$("#signin_frame").setStyle("display:block");Spry.$$("#signin_frame").removeEventListener("load",loadedSignIn,false);bLoadedSignIn=true;}
function showLimitedSignIn()
{if(!bLoadedSignIn)
{Spry.$$("#loadingSignIn").setStyle("display:none");Spry.$$("#limitedSignIn").setStyle("display:block");Spry.$$("#signin_frame").setAttribute("src","");}}
var bLoadedSignUp=false;function setSignUpFrame()
{var strPage="https://"+strDomain+"/SignUpFrame";if(document.getElementById("signup_frame").src!=strPage)
{bLoadedSignUp=false;Spry.$$("#loadingSignUp").setStyle("display:block");Spry.$$("#limitedSignUp").setStyle("display:none");window.setTimeout(showLimitedSignUp,5000);Spry.$$("#signup_frame").setStyle("display:none");Spry.$$("#signup_frame").addEventListener("load",loadedSignUp,false);Spry.$$("#signup_frame").setAttribute("src",strPage);}}
function loadedSignUp()
{Spry.$$("#loadingSignUp").setStyle("display:none");Spry.$$("#signup_frame").setStyle("display:block");Spry.$$("#signup_frame").removeEventListener("load",loadedSignUp,false);bLoadedSignUp=true;}
function showLimitedSignUp()
{if(!bLoadedSignUp)
{Spry.$$("#loadingSignUp").setStyle("display:none");Spry.$$("#limitedSignUp").setStyle("display:block");Spry.$$("#signup_frame").setAttribute("src","");}}