(function(){if(typeof Spry=="undefined"||!Spry.Widget||!Spry.Widget.Base)
{alert("SpryPanelSelector.js requires SpryWidget.js!");return;}
Spry.Widget.PanelSelector=function(elements,panel,opts)
{Spry.Widget.Base.call(this);this.buttons=Spry.$$(elements);this.panel=panel;this.disablePanelCallbacks=0;this.currentButton=null;this.setOptions(this,Spry.Widget.PanelSelector.config);this.setOptions(this,opts);if(typeof(this.defaultButton)=="number")
{if(this.defaultButton<0)
this.defaultButton=0;else
{var count=this.getButtonCount();if(this.defaultButton>=count)
this.defaultButton=(count>1)?(count-1):0;}}
this.attachBehaviors();};Spry.Widget.PanelSelector.config={event:"click",defaultButton:0,selectionStopsSlideShow:true,useHrefs:false,selectedClass:"PanelSelectorButtonSelected",unselectedClass:"PanelSelectorButtonUnselected",downClass:"PanelSelectorButtonDown",disabledClass:"PanelSelectorButtonDisabled",hoverClass:"PanelSelectorButtonHover",focusedClass:"PanelSelectorButtonFocused"};Spry.Widget.PanelSelector.prototype=new Spry.Widget.Base();Spry.Widget.PanelSelector.prototype.constructor=Spry.Widget.PanelSelector;Spry.Widget.PanelSelector.prototype.getPanelIDFromHREF=function(ele)
{if(ele)
{var href=ele.getAttribute("href");if(href!=undefined&&href.search(/^#\w/)!=-1)
return href.replace(/.*#/,"#");}
return null;};Spry.Widget.PanelSelector.prototype.getButtonCount=function()
{return this.buttons.length;};Spry.Widget.PanelSelector.prototype.getCurrentButton=function()
{return this.currentButton;};Spry.Widget.PanelSelector.prototype.getCurrentButtonIndex=function()
{return this.elementToIndex(this.getCurrentButton());};Spry.Widget.PanelSelector.prototype.elementToIndex=function(ele)
{var ea=this.buttons;var n=ea.length;for(var i=0;i<n;i++)
if(ea[i]==ele)return i;return-1;};Spry.Widget.PanelSelector.prototype.indexToElement=function(eleOrIndex)
{return(typeof eleOrIndex=="number")?this.buttons[eleOrIndex]:eleOrIndex;};Spry.Widget.PanelSelector.prototype.enableButton=function(eleOrIndex)
{var ele=this.indexToElement(eleOrIndex);if(ele&&ele.psButton)
ele.psButton.enable();};Spry.Widget.PanelSelector.prototype.disableButton=function(eleOrIndex)
{var ele=this.indexToElement(eleOrIndex);if(ele&&ele.psButton)
ele.psButton.disable();};Spry.Widget.PanelSelector.prototype.focusButton=function(eleOrIndex)
{var ele=this.indexToElement(eleOrIndex);if(ele&&ele.psButton)
ele.psButton.focus();};Spry.Widget.PanelSelector.prototype.selectButton=function(eleOrIndex,suppressPanelSync)
{++this.disablePanelCallbacks;var buttons=this.buttons;var ele=this.indexToElement(eleOrIndex);for(var i=0;i<buttons.length;i++)
{var e=buttons[i];this.removeClassName(e,(e==ele)?this.unselectedClass:this.selectedClass);this.addClassName(e,(e==ele)?this.selectedClass:this.unselectedClass);}
this.currentButton=ele;if(!suppressPanelSync&&this.panel)
{var href=this.useHrefs?this.getPanelIDFromHREF(ele):null;this.panel.showPanel(href?href:this.elementToIndex(ele));}
--this.disablePanelCallbacks;};Spry.Widget.PanelSelector.prototype.selectPreviousButton=function()
{var evt=new Spry.Widget.Event(this);this.notifyObservers("onPrePanelSelectorSelectPreviousButton",evt);if(!evt.performDefaultAction)
return;var curIndex=this.getCurrentButtonIndex();this.handleActivate(((curIndex<1)?this.getButtonCount():curIndex)-1);this.notifyObservers("onPostPanelSelectorSelectPreviousButton",evt);};Spry.Widget.PanelSelector.prototype.selectNextButton=function()
{var evt=new Spry.Widget.Event(this);this.notifyObservers("onPrePanelSelectorSelectNextButton",evt);if(!evt.performDefaultAction)
return;this.handleActivate((this.getCurrentButtonIndex()+1)%this.getButtonCount());this.notifyObservers("onPostPanelSelectorSelectNextButton",evt);};Spry.Widget.PanelSelector.prototype.selectFirstButton=function()
{var evt=new Spry.Widget.Event(this);this.notifyObservers("onPrePanelSelectorSelectFirstButton",evt);if(!evt.performDefaultAction)
return;this.handleActivate(0);this.notifyObservers("onPostPanelSelectorSelectFirstButton",evt);};Spry.Widget.PanelSelector.prototype.selectLastButton=function()
{var evt=new Spry.Widget.Event(this);this.notifyObservers("onPrePanelSelectorSelectLastButton",evt);if(!evt.performDefaultAction)
return;var count=this.getButtonCount();this.handleActivate(count>0?count-1:0);this.notifyObservers("onPostPanelSelectorSelectLastButton",evt);};Spry.Widget.PanelSelector.prototype.handleActivate=function(ele)
{if(typeof ele=="string")
ele=document.getElementById(ele);var evt=new Spry.Widget.Event(this,{target:ele,targetIndex:this.elementToIndex(ele)});this.notifyObservers("onPrePanelSelectorClick",evt);if(!evt.performDefaultAction)
return;if(this.selectionStopsSlideShow&&this.panel)
this.panel.stop();this.selectButton(ele);this.notifyObservers("onPostPanelSelectorClick",evt);};Spry.Widget.PanelSelector.prototype.handlePanelChange=function(data)
{if(this.disablePanelCallbacks)
return;var panelEle=data.target;var panelIndex=data.targetIndex;if(!this.panel)
return;var panelID=panelEle.id;var btns=this.buttons;var btn=btns[panelIndex];if(panelID)
{for(var i=0;!btn&&i<btns.length;i++)
{var b=btns[i];var id=this.getPanelIDFromHREF(b);if(id==panelID)
{btn=b;break;}}}
if(btn)
this.selectButton(btn,true);};Spry.Widget.PanelSelector.prototype.attachButtonBehaviors=function(ele)
{var self=this;var activateFunc=function(e){self.handleActivate(ele);return false;};ele.psButton=new Spry.Widget.Button(ele,{onclick:activateFunc,downClass:this.downClass,hoverClass:this.hoverClass,disabledClass:this.disabledClass,focusedClass:this.focusedClass});if(this.event!="click")
this.addEventListener(ele,this.event,activateFunc,false);};Spry.Widget.PanelSelector.prototype.attachBehaviors=function()
{var self=this;var buttons=this.buttons;for(var i=0;i<buttons.length;i++)
this.attachButtonBehaviors(buttons[i]);if(this.panel)
this.panel.addObserver({onPostShowPanel:function(n,data){self.handlePanelChange(data);}});this.selectButton(this.defaultButton);};})();
