var Spry
if(!Spry)Spry={}
if(!Spry.Widget)Spry.Widget={}
Spry.Widget.TabbedPanels=function(element,opts){
this.element=this.getElement(element)
this.defaultTab=0
this.bindings=[]
this.tabSelectedClass="TabbedPanelsTabSelected"
this.tabHoverClass="TabbedPanelsTabHover"
this.tabFocusedClass="TabbedPanelsTabFocused"
this.panelVisibleClass="TabbedPanelsContentVisible"
this.focusElement=null
this.hasFocus=false
this.currentTabIndex=0
this.enableKeyboardNavigation=true
Spry.Widget.TabbedPanels.setOptions(this,opts)
if(typeof(this.defaultTab)=="number"){
if(this.defaultTab<0)
this.defaultTab=0
else{
var count=this.getTabbedPanelCount()
if(this.defaultTab>=count)
this.defaultTab=(count>1)?(count-1): 0}
this.defaultTab=this.getTabs()[this.defaultTab]}
if(this.defaultTab)
this.defaultTab=this.getElement(this.defaultTab)
this.attachBehaviors()}
Spry.Widget.TabbedPanels.prototype.getElement=function(ele){
if(ele&&typeof ele=="string")
return document.getElementById(ele)
return ele}
Spry.Widget.TabbedPanels.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.TabbedPanels.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.TabbedPanels.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.TabbedPanels.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.TabbedPanels.prototype.getTabGroup=function(){
if(this.element){
var children=this.getElementChildren(this.element)
if(children.length)
return children[0]}
return null}
Spry.Widget.TabbedPanels.prototype.getTabs=function(){
var tabs=[]
var tg=this.getTabGroup()
if(tg)
tabs=this.getElementChildren(tg)
return tabs}
Spry.Widget.TabbedPanels.prototype.getContentPanelGroup=function(){
if(this.element){
var children=this.getElementChildren(this.element)
if(children.length>1)
return children[1]}
return null}
Spry.Widget.TabbedPanels.prototype.getContentPanels=function(){
var panels=[]
var pg=this.getContentPanelGroup()
if(pg)
panels=this.getElementChildren(pg)
return panels}
Spry.Widget.TabbedPanels.prototype.getIndex=function(ele,arr){
ele=this.getElement(ele)
if(ele&&arr&&arr.length){
for(var i=0;i<arr.length;i++){
if(ele==arr[i])
return i}}
return-1}
Spry.Widget.TabbedPanels.prototype.getTabIndex=function(ele){
var i=this.getIndex(ele,this.getTabs())
if(i<0)
i=this.getIndex(ele,this.getContentPanels())
return i}
Spry.Widget.TabbedPanels.prototype.getCurrentTabIndex=function(){
return this.currentTabIndex}
Spry.Widget.TabbedPanels.prototype.getTabbedPanelCount=function(ele){
return Math.min(this.getTabs().length,this.getContentPanels().length)}
Spry.Widget.TabbedPanels.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.TabbedPanels.prototype.onTabClick=function(e,tab){
this.showPanel(tab)}
Spry.Widget.TabbedPanels.prototype.onTabMouseOver=function(e,tab){
this.addClassName(tab,this.tabHoverClass)}
Spry.Widget.TabbedPanels.prototype.onTabMouseOut=function(e,tab){
this.removeClassName(tab,this.tabHoverClass)}
Spry.Widget.TabbedPanels.prototype.onTabFocus=function(e,tab){
this.hasFocus=true
this.addClassName(this.element,this.tabFocusedClass)}
Spry.Widget.TabbedPanels.prototype.onTabBlur=function(e,tab){
this.hasFocus=false
this.removeClassName(this.element,this.tabFocusedClass)}
Spry.Widget.TabbedPanels.ENTER_KEY=13
Spry.Widget.TabbedPanels.SPACE_KEY=32
Spry.Widget.TabbedPanels.prototype.onTabKeyDown=function(e,tab){
var key=e.keyCode
if(!this.hasFocus ||(key !=Spry.Widget.TabbedPanels.ENTER_KEY&&key !=Spry.Widget.TabbedPanels.SPACE_KEY))
return true
this.showPanel(tab)
if(e.stopPropagation)
e.stopPropagation()
if(e.preventDefault)
e.preventDefault()
return false}
Spry.Widget.TabbedPanels.prototype.preorderTraversal=function(root,func){
var stopTraversal=false
if(root){
stopTraversal=func(root)
if(root.hasChildNodes()){
var child=root.firstChild
while(!stopTraversal&&child){
stopTraversal=this.preorderTraversal(child,func)
try{child=child.nextSibling;}catch(e){child=null;}}}}
return stopTraversal}
Spry.Widget.TabbedPanels.prototype.addPanelEventListeners=function(tab,panel){
var self=this
Spry.Widget.TabbedPanels.addEventListener(tab,"click",function(e){return self.onTabClick(e,tab);},false)
Spry.Widget.TabbedPanels.addEventListener(tab,"mouseover",function(e){return self.onTabMouseOver(e,tab);},false)
Spry.Widget.TabbedPanels.addEventListener(tab,"mouseout",function(e){return self.onTabMouseOut(e,tab);},false)
if(this.enableKeyboardNavigation){
var tabIndexEle=null
var tabAnchorEle=null
this.preorderTraversal(tab,function(node){
if(node.nodeType==1){
var tabIndexAttr=tab.attributes.getNamedItem("tabindex")
if(tabIndexAttr){
tabIndexEle=node
return true}
if(!tabAnchorEle&&node.nodeName.toLowerCase()=="a")
tabAnchorEle=node}
return false
})
if(tabIndexEle)
this.focusElement=tabIndexEle
else if(tabAnchorEle)
this.focusElement=tabAnchorEle
if(this.focusElement){
Spry.Widget.TabbedPanels.addEventListener(this.focusElement,"focus",function(e){return self.onTabFocus(e,tab);},false)
Spry.Widget.TabbedPanels.addEventListener(this.focusElement,"blur",function(e){return self.onTabBlur(e,tab);},false)
Spry.Widget.TabbedPanels.addEventListener(this.focusElement,"keydown",function(e){return self.onTabKeyDown(e,tab);},false)}}}
Spry.Widget.TabbedPanels.prototype.showPanel=function(elementOrIndex){
var tpIndex=-1
if(typeof elementOrIndex=="number")
tpIndex=elementOrIndex
else
tpIndex=this.getTabIndex(elementOrIndex)
if(!tpIndex<0 || tpIndex>=this.getTabbedPanelCount())
return
var tabs=this.getTabs()
var panels=this.getContentPanels()
var numTabbedPanels=Math.max(tabs.length,panels.length)
for(var i=0;i<numTabbedPanels;i++){
if(i !=tpIndex){
if(tabs[i])
this.removeClassName(tabs[i],this.tabSelectedClass)
if(panels[i]){
this.removeClassName(panels[i],this.panelVisibleClass)
panels[i].style.display="none"}}}
this.addClassName(tabs[tpIndex],this.tabSelectedClass)
this.addClassName(panels[tpIndex],this.panelVisibleClass)
panels[tpIndex].style.display="block"
this.currentTabIndex=tpIndex}
Spry.Widget.TabbedPanels.prototype.attachBehaviors=function(element){
var tabs=this.getTabs()
var panels=this.getContentPanels()
var panelCount=this.getTabbedPanelCount()
for(var i=0;i<panelCount;i++)
this.addPanelEventListeners(tabs[i],panels[i])
this.showPanel(this.defaultTab)}
Spry.Widget.TabbedPanels2=function(element,opts){
this.element=this.getElement(element)
this.defaultTab=0
this.bindings=[]
this.tabSelectedClass="TabbedPanels2TabSelected"
this.tabHoverClass="TabbedPanels2TabHover"
this.tabFocusedClass="TabbedPanels2TabFocused"
this.panelVisibleClass="TabbedPanels2ContentVisible"
this.focusElement=null
this.hasFocus=false
this.currentTabIndex=0
this.enableKeyboardNavigation=true
Spry.Widget.TabbedPanels2.setOptions(this,opts)
if(typeof(this.defaultTab)=="number"){
if(this.defaultTab<0)
this.defaultTab=0
else{
var count=this.getTabbedPanelCount()
if(this.defaultTab>=count)
this.defaultTab=(count>1)?(count-1): 0}
this.defaultTab=this.getTabs()[this.defaultTab]}
if(this.defaultTab)
this.defaultTab=this.getElement(this.defaultTab)
this.attachBehaviors()}
Spry.Widget.TabbedPanels2.prototype.getElement=function(ele){
if(ele&&typeof ele=="string")
return document.getElementById(ele)
return ele}
Spry.Widget.TabbedPanels2.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.TabbedPanels2.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.TabbedPanels2.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.TabbedPanels2.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.TabbedPanels2.prototype.getTabGroup=function(){
if(this.element){
var children=this.getElementChildren(this.element)
if(children.length)
return children[0]}
return null}
Spry.Widget.TabbedPanels2.prototype.getTabs=function(){
var tabs=[]
var tg=this.getTabGroup()
if(tg)
tabs=this.getElementChildren(tg)
return tabs}
Spry.Widget.TabbedPanels2.prototype.getContentPanelGroup=function(){
if(this.element){
var children=this.getElementChildren(this.element)
if(children.length>1)
return children[1]}
return null}
Spry.Widget.TabbedPanels2.prototype.getContentPanels=function(){
var panels=[]
var pg=this.getContentPanelGroup()
if(pg)
panels=this.getElementChildren(pg)
return panels}
Spry.Widget.TabbedPanels2.prototype.getIndex=function(ele,arr){
ele=this.getElement(ele)
if(ele&&arr&&arr.length){
for(var i=0;i<arr.length;i++){
if(ele==arr[i])
return i}}
return-1}
Spry.Widget.TabbedPanels2.prototype.getTabIndex=function(ele){
var i=this.getIndex(ele,this.getTabs())
if(i<0)
i=this.getIndex(ele,this.getContentPanels())
return i}
Spry.Widget.TabbedPanels2.prototype.getCurrentTabIndex=function(){
return this.currentTabIndex}
Spry.Widget.TabbedPanels2.prototype.getTabbedPanelCount=function(ele){
return Math.min(this.getTabs().length,this.getContentPanels().length)}
Spry.Widget.TabbedPanels2.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.TabbedPanels2.prototype.onTabClick=function(e,tab){
this.showPanel(tab)}
Spry.Widget.TabbedPanels2.prototype.onTabMouseOver=function(e,tab){
this.addClassName(tab,this.tabHoverClass)}
Spry.Widget.TabbedPanels2.prototype.onTabMouseOut=function(e,tab){
this.removeClassName(tab,this.tabHoverClass)}
Spry.Widget.TabbedPanels2.prototype.onTabFocus=function(e,tab){
this.hasFocus=true
this.addClassName(this.element,this.tabFocusedClass)}
Spry.Widget.TabbedPanels2.prototype.onTabBlur=function(e,tab){
this.hasFocus=false
this.removeClassName(this.element,this.tabFocusedClass)}
Spry.Widget.TabbedPanels2.ENTER_KEY=13
Spry.Widget.TabbedPanels2.SPACE_KEY=32
Spry.Widget.TabbedPanels2.prototype.onTabKeyDown=function(e,tab){
var key=e.keyCode
if(!this.hasFocus ||(key !=Spry.Widget.TabbedPanels2.ENTER_KEY&&key !=Spry.Widget.TabbedPanels2.SPACE_KEY))
return true
this.showPanel(tab)
if(e.stopPropagation)
e.stopPropagation()
if(e.preventDefault)
e.preventDefault()
return false}
Spry.Widget.TabbedPanels2.prototype.preorderTraversal=function(root,func){
var stopTraversal=false
if(root){
stopTraversal=func(root)
if(root.hasChildNodes()){
var child=root.firstChild
while(!stopTraversal&&child){
stopTraversal=this.preorderTraversal(child,func)
try{child=child.nextSibling;}catch(e){child=null;}}}}
return stopTraversal}
Spry.Widget.TabbedPanels2.prototype.addPanelEventListeners=function(tab,panel){
var self=this
Spry.Widget.TabbedPanels2.addEventListener(tab,"click",function(e){return self.onTabClick(e,tab);},false)
Spry.Widget.TabbedPanels2.addEventListener(tab,"mouseover",function(e){return self.onTabMouseOver(e,tab);},false)
Spry.Widget.TabbedPanels2.addEventListener(tab,"mouseout",function(e){return self.onTabMouseOut(e,tab);},false)
if(this.enableKeyboardNavigation){
var tabIndexEle=null
var tabAnchorEle=null
this.preorderTraversal(tab,function(node){
if(node.nodeType==1){
var tabIndexAttr=tab.attributes.getNamedItem("tabindex")
if(tabIndexAttr){
tabIndexEle=node
return true}
if(!tabAnchorEle&&node.nodeName.toLowerCase()=="a")
tabAnchorEle=node}
return false
})
if(tabIndexEle)
this.focusElement=tabIndexEle
else if(tabAnchorEle)
this.focusElement=tabAnchorEle
if(this.focusElement){
Spry.Widget.TabbedPanels2.addEventListener(this.focusElement,"focus",function(e){return self.onTabFocus(e,tab);},false)
Spry.Widget.TabbedPanels2.addEventListener(this.focusElement,"blur",function(e){return self.onTabBlur(e,tab);},false)
Spry.Widget.TabbedPanels2.addEventListener(this.focusElement,"keydown",function(e){return self.onTabKeyDown(e,tab);},false)}}}
Spry.Widget.TabbedPanels2.prototype.showPanel=function(elementOrIndex){
var tpIndex=-1
if(typeof elementOrIndex=="number")
tpIndex=elementOrIndex
else
tpIndex=this.getTabIndex(elementOrIndex)
if(!tpIndex<0 || tpIndex>=this.getTabbedPanelCount())
return
var tabs=this.getTabs()
var panels=this.getContentPanels()
var numTabbedPanels2=Math.max(tabs.length,panels.length)
for(var i=0;i<numTabbedPanels2;i++){
if(i !=tpIndex){
if(tabs[i])
this.removeClassName(tabs[i],this.tabSelectedClass)
if(panels[i]){
this.removeClassName(panels[i],this.panelVisibleClass)
panels[i].style.display="none"}}}
this.addClassName(tabs[tpIndex],this.tabSelectedClass)
this.addClassName(panels[tpIndex],this.panelVisibleClass)
panels[tpIndex].style.display="block"
this.currentTabIndex=tpIndex}
Spry.Widget.TabbedPanels2.prototype.attachBehaviors=function(element){
var tabs=this.getTabs()
var panels=this.getContentPanels()
var panelCount=this.getTabbedPanelCount()
for(var i=0;i<panelCount;i++)
this.addPanelEventListeners(tabs[i],panels[i])
this.showPanel(this.defaultTab)}