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 = 0;this.hideDelay = 0;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 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 0){layers[0].parentNode.removeChild(layers[0]);} };Spry.Widget.MenuBar.prototype.clearMenus = function(root){var menus = root.getElementsByTagName('ul');for(var i=0;i 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){// IE 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){// gecko box = doc.getBoxObjectFor(el);ret.x = box.x;ret.y = box.y;} else{// safari/opera 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];} };