var Spry;Spry||(Spry={});if(!Spry.Widget)Spry.Widget={};Spry.Widget.CollapsiblePanel=function(a,b){this.element=this.getElement(a);this.focusElement=null;this.hoverClass="CollapsiblePanelTabHover";this.openClass="CollapsiblePanelOpen";this.closedClass="CollapsiblePanelClosed";this.focusedClass="CollapsiblePanelFocused";this.enableKeyboardNavigation=this.enableAnimation=true;this.animator=null;this.hasFocus=false;this.contentIsOpen=true;this.openPanelKeyCode=Spry.Widget.CollapsiblePanel.KEY_DOWN;this.closePanelKeyCode=Spry.Widget.CollapsiblePanel.KEY_UP;Spry.Widget.CollapsiblePanel.setOptions(this,b);this.attachBehaviors()};Spry.Widget.CollapsiblePanel.prototype.getElement=function(a){if(a&&typeof a=="string")return document.getElementById(a);return a};Spry.Widget.CollapsiblePanel.prototype.addClassName=function(a,b){!a||!b||a.className&&a.className.search(RegExp("\\b"+b+"\\b"))!=-1||(a.className+=(a.className?" ":"")+b)};Spry.Widget.CollapsiblePanel.prototype.removeClassName=function(a,b){if(!(!a||!b||a.className&&a.className.search(RegExp("\\b"+b+"\\b"))==-1))a.className=a.className.replace(RegExp("\\s*\\b"+b+"\\b","g"),"")};Spry.Widget.CollapsiblePanel.prototype.hasClassName=function(a,b){if(!a||!b||!a.className||a.className.search(RegExp("\\b"+b+"\\b"))==-1)return false;return true};Spry.Widget.CollapsiblePanel.prototype.setDisplay=function(a,b){if(a)a.style.display=b};Spry.Widget.CollapsiblePanel.setOptions=function(a,b,c){if(b)for(var d in b)c&&b[d]==undefined||(a[d]=b[d])};Spry.Widget.CollapsiblePanel.prototype.onTabMouseOver=function(){this.addClassName(this.getTab(),this.hoverClass);return false};Spry.Widget.CollapsiblePanel.prototype.onTabMouseOut=function(){this.removeClassName(this.getTab(),this.hoverClass);return false};Spry.Widget.CollapsiblePanel.prototype.open=function(){this.contentIsOpen=true;if(this.enableAnimation){this.animator&&this.animator.stop();this.animator=new Spry.Widget.CollapsiblePanel.PanelAnimator(this,true,{duration:this.duration,fps:this.fps,transition:this.transition});this.animator.start()}else this.setDisplay(this.getContent(),"block");this.removeClassName(this.element,this.closedClass);this.addClassName(this.element,this.openClass)};Spry.Widget.CollapsiblePanel.prototype.close=function(){this.contentIsOpen=false;if(this.enableAnimation){this.animator&&this.animator.stop();this.animator=new Spry.Widget.CollapsiblePanel.PanelAnimator(this,false,{duration:this.duration,fps:this.fps,transition:this.transition});this.animator.start()}else this.setDisplay(this.getContent(),"none");this.removeClassName(this.element,this.openClass);this.addClassName(this.element,this.closedClass)};Spry.Widget.CollapsiblePanel.prototype.onTabClick=function(a){this.isOpen()?this.close():this.open();this.focus();return this.stopPropagation(a)};Spry.Widget.CollapsiblePanel.prototype.onFocus=function(){this.hasFocus=true;this.addClassName(this.element,this.focusedClass);return false};Spry.Widget.CollapsiblePanel.prototype.onBlur=function(){this.hasFocus=false;this.removeClassName(this.element,this.focusedClass);return false};Spry.Widget.CollapsiblePanel.KEY_UP=38;Spry.Widget.CollapsiblePanel.KEY_DOWN=40;Spry.Widget.CollapsiblePanel.prototype.onKeyDown=function(a){var b=a.keyCode;if(!this.hasFocus||b!=this.openPanelKeyCode&&b!=this.closePanelKeyCode)return true;if(this.isOpen()&&b==this.closePanelKeyCode)this.close();else b==this.openPanelKeyCode&&this.open();return this.stopPropagation(a)};Spry.Widget.CollapsiblePanel.prototype.stopPropagation=function(a){if(a.preventDefault)a.preventDefault();else a.returnValue=false;if(a.stopPropagation)a.stopPropagation();else a.cancelBubble=true;return false};Spry.Widget.CollapsiblePanel.prototype.attachPanelHandlers=function(){var a=this.getTab();if(a){var b=this;Spry.Widget.CollapsiblePanel.addEventListener(a,"click",function(e){return b.onTabClick(e)},false);Spry.Widget.CollapsiblePanel.addEventListener(a,"mouseover",function(e){return b.onTabMouseOver(e)},false);Spry.Widget.CollapsiblePanel.addEventListener(a,"mouseout",function(e){return b.onTabMouseOut(e)},false);if(this.enableKeyboardNavigation){var c=null,d=null;this.preorderTraversal(a,function(e){if(e.nodeType==1){if(a.attributes.getNamedItem("tabindex")){c=e;return true}if(!d&&e.nodeName.toLowerCase()=="a")d=e}return false});if(c)this.focusElement=c;else if(d)this.focusElement=d;if(this.focusElement){Spry.Widget.CollapsiblePanel.addEventListener(this.focusElement,"focus",function(e){return b.onFocus(e)},false);Spry.Widget.CollapsiblePanel.addEventListener(this.focusElement,"blur",function(e){return b.onBlur(e)},false);Spry.Widget.CollapsiblePanel.addEventListener(this.focusElement,"keydown",function(e){return b.onKeyDown(e)},false)}}}};Spry.Widget.CollapsiblePanel.addEventListener=function(a,b,c,d){try{if(a.addEventListener)a.addEventListener(b,c,d);else a.attachEvent&&a.attachEvent("on"+b,c)}catch(e){}};Spry.Widget.CollapsiblePanel.prototype.preorderTraversal=function(a,b){var c=false;if(a){c=b(a);if(a.hasChildNodes())for(var d=a.firstChild;!c&&d;){c=this.preorderTraversal(d,b);try{d=d.nextSibling}catch(e){d=null}}}return c};Spry.Widget.CollapsiblePanel.prototype.attachBehaviors=function(){var a=this.element;this.getTab();var b=this.getContent();if(this.contentIsOpen||this.hasClassName(a,this.openClass)){this.addClassName(a,this.openClass);this.removeClassName(a,this.closedClass);this.setDisplay(b,"block");this.contentIsOpen=true}else{this.removeClassName(a,this.openClass);this.addClassName(a,this.closedClass);this.setDisplay(b,"none");this.contentIsOpen=false}this.attachPanelHandlers()};Spry.Widget.CollapsiblePanel.prototype.getTab=function(){return this.getElementChildren(this.element)[0]};Spry.Widget.CollapsiblePanel.prototype.getContent=function(){return this.getElementChildren(this.element)[1]};Spry.Widget.CollapsiblePanel.prototype.isOpen=function(){return this.contentIsOpen};Spry.Widget.CollapsiblePanel.prototype.getElementChildren=function(a){var b=[];for(a=a.firstChild;a;){a.nodeType==1&&b.push(a);a=a.nextSibling}return b};Spry.Widget.CollapsiblePanel.prototype.focus=function(){this.focusElement&&this.focusElement.focus&&this.focusElement.focus()};Spry.Widget.CollapsiblePanel.PanelAnimator=function(a,b,c){this.timer=null;this.interval=0;this.fps=60;this.duration=500;this.startTime=0;this.transition=Spry.Widget.CollapsiblePanel.PanelAnimator.defaultTransition;this.onComplete=null;this.panel=a;this.content=a.getContent();this.doOpen=b;Spry.Widget.CollapsiblePanel.setOptions(this,c,true);this.interval=Math.floor(1E3/this.fps);a=this.content;c=a.offsetHeight?a.offsetHeight:0;this.fromHeight=b&&a.style.display=="none"?0:c;if(b){if(a.style.display=="none"){a.style.visibility="hidden";a.style.display="block"}a.style.height="";this.toHeight=a.offsetHeight}else this.toHeight=0;this.distance=this.toHeight-this.fromHeight;this.overflow=a.style.overflow;a.style.height=this.fromHeight+"px";a.style.visibility="visible";a.style.overflow="hidden";a.style.display="block"};Spry.Widget.CollapsiblePanel.PanelAnimator.defaultTransition=function(a,b,c,d){a/=d;return b+(2-a)*a*c};Spry.Widget.CollapsiblePanel.PanelAnimator.prototype.start=function(){var a=this;this.startTime=(new Date).getTime();this.timer=setTimeout(function(){a.stepAnimation()},this.interval)};Spry.Widget.CollapsiblePanel.PanelAnimator.prototype.stop=function(){if(this.timer){clearTimeout(this.timer);this.content.style.overflow=this.overflow}this.timer=null};Spry.Widget.CollapsiblePanel.PanelAnimator.prototype.stepAnimation=function(){var a=(new Date).getTime()-this.startTime;if(a>=this.duration){if(!this.doOpen)this.content.style.display="none";this.content.style.overflow=this.overflow;this.content.style.height=this.toHeight+"px";this.onComplete&&this.onComplete()}else{a=this.transition(a,this.fromHeight,this.distance,this.duration);this.content.style.height=(a<0?0:a)+"px";var b=this;this.timer=setTimeout(function(){b.stepAnimation()},this.interval)}};Spry.Widget.CollapsiblePanelGroup=function(a,b){this.element=this.getElement(a);this.opts=b;this.attachBehaviors()};Spry.Widget.CollapsiblePanelGroup.prototype.setOptions=Spry.Widget.CollapsiblePanel.prototype.setOptions;Spry.Widget.CollapsiblePanelGroup.prototype.getElement=Spry.Widget.CollapsiblePanel.prototype.getElement;Spry.Widget.CollapsiblePanelGroup.prototype.getElementChildren=Spry.Widget.CollapsiblePanel.prototype.getElementChildren;Spry.Widget.CollapsiblePanelGroup.prototype.setElementWidget=function(a,b){if(a&&b){if(!a.spry)a.spry={};a.spry.collapsiblePanel=b}};Spry.Widget.CollapsiblePanelGroup.prototype.getElementWidget=function(a){return a&&a.spry&&a.spry.collapsiblePanel?a.spry.collapsiblePanel:null};Spry.Widget.CollapsiblePanelGroup.prototype.getPanels=function(){if(!this.element)return[];return this.getElementChildren(this.element)};Spry.Widget.CollapsiblePanelGroup.prototype.getPanel=function(a){return this.getPanels()[a]};Spry.Widget.CollapsiblePanelGroup.prototype.attachBehaviors=function(){if(this.element)for(var a=this.getPanels(),b=a.length,c=0;c<b;c++){var d=a[c];this.setElementWidget(d,new Spry.Widget.CollapsiblePanel(d,this.opts))}};Spry.Widget.CollapsiblePanelGroup.prototype.openPanel=function(a){(a=this.getElementWidget(this.getPanel(a)))&&!a.isOpen()&&a.open()};Spry.Widget.CollapsiblePanelGroup.prototype.closePanel=function(a){(a=this.getElementWidget(this.getPanel(a)))&&a.isOpen()&&a.close()};Spry.Widget.CollapsiblePanelGroup.prototype.openAllPanels=function(){for(var a=this.getPanels(),b=a.length,c=0;c<b;c++){var d=this.getElementWidget(a[c]);d&&!d.isOpen()&&d.open()}};Spry.Widget.CollapsiblePanelGroup.prototype.closeAllPanels=function(){for(var a=this.getPanels(),b=a.length,c=0;c<b;c++){var d=this.getElementWidget(a[c]);d&&d.isOpen()&&d.close()}};
