var Spry;if(!Spry)Spry={};if(!Spry.Widget)Spry.Widget={}
Spry.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.BrowserSniff()
Spry.Widget.MenuBar=function(element,opts){
this.init(element,opts)}
Spry.Widget.MenuBar.prototype.init=function(element,opts){
this.element=this.getElement(element)
this.currMenu=null
this.showDelay=250
this.hideDelay=600
if(typeof document.getElementById=='undefined' ||(navigator.vendor=='Apple Computer, Inc.'&&typeof window.XMLHttpRequest=='undefined')||(Spry.is.ie&&typeof document.uniqueID=='undefined')){
return}
if(Spry.is.ie&&Spry.is.version<7){
try{
document.execCommand("BackgroundImageCache",false,true)
}catch(err){}}
this.upKeyCode=Spry.Widget.MenuBar.KEY_UP
this.downKeyCode=Spry.Widget.MenuBar.KEY_DOWN
this.leftKeyCode=Spry.Widget.MenuBar.KEY_LEFT
this.rightKeyCode=Spry.Widget.MenuBar.KEY_RIGHT
this.escKeyCode=Spry.Widget.MenuBar.KEY_ESC
this.hoverClass='MenuBarItemHover'
this.subHoverClass='MenuBarItemSubmenuHover'
this.subVisibleClass='MenuBarSubmenuVisible'
this.hasSubClass='MenuBarItemSubmenu'
this.activeClass='MenuBarActive'
this.isieClass='MenuBarItemIE'
this.verticalClass='MenuBarVertical'
this.horizontalClass='MenuBarHorizontal'
this.enableKeyboardNavigation=true
this.hasFocus=false
if(opts){
for(var k in opts){
if(typeof this[k]=='undefined'){
var rollover=new Image
rollover.src=opts[k]}}
Spry.Widget.MenuBar.setOptions(this,opts)}
if(Spry.is.safari)
this.enableKeyboardNavigation=false
if(this.element){
this.currMenu=this.element
var items=this.element.getElementsByTagName('li')
for(var i=0;i<items.length;i++){
if(i>0&&this.enableKeyboardNavigation)
items[i].getElementsByTagName('a')[0].tabIndex='-1'
this.initialize(items[i],element)
if(Spry.is.ie){
this.addClassName(items[i],this.isieClass)
items[i].style.position="static"}}
if(this.enableKeyboardNavigation){
var self=this
this.addEventListener(document,'keydown',function(e){self.keyDown(e);},false)}
if(Spry.is.ie){
if(this.hasClassName(this.element,this.verticalClass)){
this.element.style.position="relative"}
var linkitems=this.element.getElementsByTagName('a')
for(var i=0;i<linkitems.length;i++){
linkitems[i].style.position="relative"}}}}
Spry.Widget.MenuBar.KEY_ESC=27
Spry.Widget.MenuBar.KEY_UP=38
Spry.Widget.MenuBar.KEY_DOWN=40
Spry.Widget.MenuBar.KEY_LEFT=37
Spry.Widget.MenuBar.KEY_RIGHT=39
Spry.Widget.MenuBar.prototype.getElement=function(ele){
if(ele&&typeof ele=="string")
return document.getElementById(ele)
return ele}
Spry.Widget.MenuBar.prototype.hasClassName=function(ele,className){
if(!ele || !className || !ele.className || ele.className.search(new RegExp("\\b"+className+"\\b"))==-1){
return false}
return true}
Spry.Widget.MenuBar.prototype.addClassName=function(ele,className){
if(!ele || !className || this.hasClassName(ele,className))
return
ele.className+=(ele.className ? " " : "")+className}
Spry.Widget.MenuBar.prototype.removeClassName=function(ele,className){
if(!ele || !className || !this.hasClassName(ele,className))
return
ele.className=ele.className.replace(new RegExp("\\s*\\b"+className+"\\b","g"),"")}
Spry.Widget.MenuBar.prototype.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.MenuBar.prototype.createIframeLayer=function(menu){
var layer=document.createElement('iframe')
layer.tabIndex='-1'
layer.src='javascript:""'
layer.frameBorder='0'
layer.scrolling='no'
menu.parentNode.appendChild(layer)
layer.style.left=menu.offsetLeft+'px'
layer.style.top=menu.offsetTop+'px'
layer.style.width=menu.offsetWidth+'px'
layer.style.height=menu.offsetHeight+'px'}
Spry.Widget.MenuBar.prototype.removeIframeLayer=function(menu){
var layers=((menu==this.element)? menu : menu.parentNode).getElementsByTagName('iframe')
while(layers.length>0){
layers[0].parentNode.removeChild(layers[0])}}
Spry.Widget.MenuBar.prototype.clearMenus=function(root){
var menus=root.getElementsByTagName('ul')
for(var i=0;i<menus.length;i++)
this.hideSubmenu(menus[i])
this.removeClassName(this.element,this.activeClass)}
Spry.Widget.MenuBar.prototype.bubbledTextEvent=function(){
return Spry.is.safari&&(event.target==event.relatedTarget.parentNode ||(event.eventPhase==3&&event.target.parentNode==event.relatedTarget))}
Spry.Widget.MenuBar.prototype.showSubmenu=function(menu){
if(this.currMenu){
this.clearMenus(this.currMenu)
this.currMenu=null}
if(menu){
this.addClassName(menu,this.subVisibleClass)
if(typeof document.all !='undefined'&&!Spry.is.opera&&navigator.vendor !='KDE'){
if(!this.hasClassName(this.element,this.horizontalClass)|| menu.parentNode.parentNode !=this.element){
menu.style.top=menu.parentNode.offsetTop+'px'}}
if(Spry.is.ie&&Spry.is.version<7){
this.createIframeLayer(menu)}}
this.addClassName(this.element,this.activeClass)}
Spry.Widget.MenuBar.prototype.hideSubmenu=function(menu){
if(menu){
this.removeClassName(menu,this.subVisibleClass)
if(typeof document.all !='undefined'&&!Spry.is.opera&&navigator.vendor !='KDE'){
menu.style.top=''
menu.style.left=''}
if(Spry.is.ie&&Spry.is.version<7)
this.removeIframeLayer(menu)}}
Spry.Widget.MenuBar.prototype.initialize=function(listitem,element){
var opentime,closetime
var link=listitem.getElementsByTagName('a')[0]
var submenus=listitem.getElementsByTagName('ul')
var menu=(submenus.length>0 ? submenus[0] : null)
if(menu)
this.addClassName(link,this.hasSubClass)
if(!Spry.is.ie){
listitem.contains=function(testNode){
if(testNode==null)
return false
if(testNode==this)
return true
else
return this.contains(testNode.parentNode)}}
var self=this
this.addEventListener(listitem,'mouseover',function(e){self.mouseOver(listitem,e);},false)
this.addEventListener(listitem,'mouseout',function(e){if(self.enableKeyboardNavigation)self.clearSelection();self.mouseOut(listitem,e);},false)
if(this.enableKeyboardNavigation){
this.addEventListener(link,'blur',function(e){self.onBlur(listitem);},false)
this.addEventListener(link,'focus',function(e){self.keyFocus(listitem,e);},false)}}
Spry.Widget.MenuBar.prototype.keyFocus=function(listitem,e){
this.lastOpen=listitem.getElementsByTagName('a')[0]
this.addClassName(this.lastOpen,listitem.getElementsByTagName('ul').length>0 ? this.subHoverClass : this.hoverClass)
this.hasFocus=true}
Spry.Widget.MenuBar.prototype.onBlur=function(listitem){
this.clearSelection(listitem)}
Spry.Widget.MenuBar.prototype.clearSelection=function(el){
if(!this.lastOpen)
return
if(el){
el=el.getElementsByTagName('a')[0]
var item=this.lastOpen
while(item !=this.element){
var tmp=el
while(tmp !=this.element){
if(tmp==item)
return
try{
tmp=tmp.parentNode
}catch(err){break;}}
item=item.parentNode}}
var item=this.lastOpen
while(item !=this.element){
this.hideSubmenu(item.parentNode)
var link=item.getElementsByTagName('a')[0]
this.removeClassName(link,this.hoverClass)
this.removeClassName(link,this.subHoverClass)
item=item.parentNode}
this.lastOpen=false}
Spry.Widget.MenuBar.prototype.keyDown=function(e){
if(!this.hasFocus)
return
if(!this.lastOpen){
this.hasFocus=false
return}
var e=e|| event
var listitem=this.lastOpen.parentNode
var link=this.lastOpen
var submenus=listitem.getElementsByTagName('ul')
var menu=(submenus.length>0 ? submenus[0] : null)
var hasSubMenu=(menu)? true : false
var opts=[listitem,menu,null,this.getSibling(listitem,'previousSibling'),this.getSibling(listitem,'nextSibling')]
if(!opts[3])
opts[2]=(listitem.parentNode.parentNode.nodeName.toLowerCase()=='li')?listitem.parentNode.parentNode:null
var found=0
switch(e.keyCode){
case this.upKeyCode:
found=this.getElementForKey(opts,'y',1)
break
case this.downKeyCode:
found=this.getElementForKey(opts,'y',-1)
break
case this.leftKeyCode:
found=this.getElementForKey(opts,'x',1)
break
case this.rightKeyCode:
found=this.getElementForKey(opts,'x',-1)
break
case this.escKeyCode:
case 9:
this.clearSelection()
this.hasFocus=false
default: return}
switch(found){
case 0: return
case 1:
this.mouseOver(listitem,e)
break
case 2:
this.mouseOut(opts[2],e)
break
case 3:
case 4:
this.removeClassName(link,hasSubMenu ? this.subHoverClass : this.hoverClass)
break}
var link=opts[found].getElementsByTagName('a')[0]
if(opts[found].nodeName.toLowerCase()=='ul')
opts[found]=opts[found].getElementsByTagName('li')[0]
this.addClassName(link,opts[found].getElementsByTagName('ul').length>0 ? this.subHoverClass : this.hoverClass)
this.lastOpen=link
opts[found].getElementsByTagName('a')[0].focus()
return Spry.Widget.MenuBar.stopPropagation(e)}
Spry.Widget.MenuBar.prototype.mouseOver=function(listitem,e){
var link=listitem.getElementsByTagName('a')[0]
var submenus=listitem.getElementsByTagName('ul')
var menu=(submenus.length>0 ? submenus[0] : null)
var hasSubMenu=(menu)? true : false
if(this.enableKeyboardNavigation)
this.clearSelection(listitem)
if(this.bubbledTextEvent()){
return}
if(listitem.closetime)
clearTimeout(listitem.closetime)
if(this.currMenu==listitem){
this.currMenu=null}
if(this.hasFocus)
link.focus()
this.addClassName(link,hasSubMenu ? this.subHoverClass : this.hoverClass)
this.lastOpen=link
if(menu&&!this.hasClassName(menu,this.subHoverClass)){
var self=this
listitem.opentime=window.setTimeout(function(){self.showSubmenu(menu);},this.showDelay)}}
Spry.Widget.MenuBar.prototype.mouseOut=function(listitem,e){
var link=listitem.getElementsByTagName('a')[0]
var submenus=listitem.getElementsByTagName('ul')
var menu=(submenus.length>0 ? submenus[0] : null)
var hasSubMenu=(menu)? true : false
if(this.bubbledTextEvent()){
return}
var related=(typeof e.relatedTarget !='undefined' ? e.relatedTarget : e.toElement)
if(!listitem.contains(related)){
if(listitem.opentime)
clearTimeout(listitem.opentime)
this.currMenu=listitem
this.removeClassName(link,hasSubMenu ? this.subHoverClass : this.hoverClass)
if(menu){
var self=this
listitem.closetime=window.setTimeout(function(){self.hideSubmenu(menu);},this.hideDelay)}
if(this.hasFocus)
link.blur()}}
Spry.Widget.MenuBar.prototype.getSibling=function(element,sibling){
var child=element[sibling]
while(child&&child.nodeName.toLowerCase()!='li')
child=child[sibling]
return child}
Spry.Widget.MenuBar.prototype.getElementForKey=function(els,prop,dir){
var found=0
var rect=Spry.Widget.MenuBar.getPosition
var ref=rect(els[found])
var hideSubmenu=false
if(els[1]&&!this.hasClassName(els[1],this.MenuBarSubmenuVisible)){
els[1].style.visibility='hidden'
this.showSubmenu(els[1])
hideSubmenu=true}
var isVert=this.hasClassName(this.element,this.verticalClass)
var hasParent=els[0].parentNode.parentNode.nodeName.toLowerCase()=='li' ? true : false
for(var i=1;i<els.length;i++){
if(prop=='y'&&isVert&&(i==1 || i==2)){
continue}
if(prop=='x'&&!isVert&&!hasParent&&(i==1 || i==2)){
continue}
if(els[i]){
var tmp=rect(els[i])
if((dir*tmp[prop])<(dir*ref[prop])){
ref=tmp
found=i}}}
if(els[1]&&hideSubmenu){
this.hideSubmenu(els[1])
els[1].style.visibility=''}
return found}
Spry.Widget.MenuBar.camelize=function(str){
if(str.indexOf('-')==-1){
return str}
var oStringList=str.split('-')
var isFirstEntry=true
var camelizedString=''
for(var i=0;i<oStringList.length;i++){
if(oStringList[i].length>0){
if(isFirstEntry){
camelizedString=oStringList[i]
isFirstEntry=false}
else{
var s=oStringList[i]
camelizedString+=s.charAt(0).toUpperCase()+s.substring(1)}}}
return camelizedString}
Spry.Widget.MenuBar.getStyleProp=function(element,prop){
var value
try{
if(element.style)
value=element.style[Spry.Widget.MenuBar.camelize(prop)]
if(!value)
if(document.defaultView&&document.defaultView.getComputedStyle){
var css=document.defaultView.getComputedStyle(element,null)
value=css ? css.getPropertyValue(prop): null}
else if(element.currentStyle){
value=element.currentStyle[Spry.Widget.MenuBar.camelize(prop)]}}
catch(e){}
return value=='auto' ? null : value}
Spry.Widget.MenuBar.getIntProp=function(element,prop){
var a=parseInt(Spry.Widget.MenuBar.getStyleProp(element,prop),10)
if(isNaN(a))
return 0
return a}
Spry.Widget.MenuBar.getPosition=function(el,doc){
doc=doc || document
if(typeof(el)=='string'){
el=doc.getElementById(el)}
if(!el){
return false}
if(el.parentNode===null || Spry.Widget.MenuBar.getStyleProp(el,'display')=='none'){
return false}
var ret={x:0,y:0}
var parent=null
var box
if(el.getBoundingClientRect){
box=el.getBoundingClientRect()
var scrollTop=doc.documentElement.scrollTop || doc.body.scrollTop
var scrollLeft=doc.documentElement.scrollLeft || doc.body.scrollLeft
ret.x=box.left+scrollLeft
ret.y=box.top+scrollTop
}else if(doc.getBoxObjectFor){
box=doc.getBoxObjectFor(el)
ret.x=box.x
ret.y=box.y
}else{
ret.x=el.offsetLeft
ret.y=el.offsetTop
parent=el.offsetParent
if(parent !=el){
while(parent){
ret.x+=parent.offsetLeft
ret.y+=parent.offsetTop
parent=parent.offsetParent}}
if(Spry.is.opera || Spry.is.safari&&Spry.Widget.MenuBar.getStyleProp(el,'position')=='absolute')
ret.y-=doc.body.offsetTop}
if(el.parentNode)
parent=el.parentNode
else
parent=null
if(parent.nodeName){
var cas=parent.nodeName.toUpperCase()
while(parent&&cas !='BODY'&&cas !='HTML'){
cas=parent.nodeName.toUpperCase()
ret.x-=parent.scrollLeft
ret.y-=parent.scrollTop
if(parent.parentNode)
parent=parent.parentNode
else
parent=null}}
return ret}
Spry.Widget.MenuBar.stopPropagation=function(ev){
if(ev.stopPropagation)
ev.stopPropagation()
else
ev.cancelBubble=true
if(ev.preventDefault)
ev.preventDefault()
else
ev.returnValue=false}
Spry.Widget.MenuBar.setOptions=function(obj,optionsObj,ignoreUndefinedProps){
if(!optionsObj)
return
for(var optionName in optionsObj){
if(ignoreUndefinedProps&&optionsObj[optionName]==undefined)
continue
obj[optionName]=optionsObj[optionName]}}
