var Spry;if(!Spry){	Spry = {};}if(!Spry.Widget){	Spry.Widget = {};}// Constructor for Menu Bar// element should be an ID of an unordered list (<ul> tag)// preloadImage1 and preloadImage2 are images for the rollover state of a menuSpry.Widget.MenuBar = function(element, opts){	this.init(element, opts);};Spry.Widget.MenuBar.prototype.init = function(element, opts){	this.element = this.getElement(element);	// represents the current (sub)menu we are operating on	this.currMenu = null;	var isie = (typeof document.all != 'undefined' && typeof window.opera == 'undefined' && navigator.vendor != 'KDE');	if(typeof document.getElementById == 'undefined' || (navigator.vendor == 'Apple Computer, Inc.' && typeof window.XMLHttpRequest == 'undefined') || (isie && typeof document.uniqueID == 'undefined'))	{		// bail on older unsupported browsers		return;	}	// load hover images now	if(opts)	{		for(var k in opts)		{			var rollover = new Image;			rollover.src = opts[k];		}	}	if(this.element)	{		this.currMenu = this.element;		var items = this.element.getElementsByTagName('li');		for(var i=0; i<items.length; i++)		{			this.initialize(items[i], element, isie);			if(isie)			{				this.addClassName(items[i], "MenuBarItemIE");				items[i].style.position = "static";			}		}		if(isie)		{			if(this.hasClassName(this.element, "MenuBarVertical"))			{				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.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"), "");};// addEventListener for Menu Bar// attach an event to a tag without creating obtrusive HTML code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) {}};// createIframeLayer for Menu Bar// creates an IFRAME underneath a menu so that it will show above form controls and ActiveXSpry.Widget.MenuBar.prototype.createIframeLayer = function(menu){	var layer = document.createElement('iframe');	layer.tabIndex = '-1';	layer.src = 'javascript:false;';	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';};// removeIframeLayer for Menu Bar// removes an IFRAME underneath a menu to reveal any form controls and ActiveXSpry.Widget.MenuBar.prototype.removeIframeLayer =  function(menu){	var layers = menu.parentNode.getElementsByTagName('iframe');	while(layers.length > 0)	{		layers[0].parentNode.removeChild(layers[0]);	}};// clearMenus for Menu Bar// root is the top level unordered list (<ul> tag)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, "MenuBarActive");};// bubbledTextEvent for Menu Bar// identify bubbled up text events in Safari so we can ignore themSpry.Widget.MenuBar.prototype.bubbledTextEvent = function(){	return (navigator.vendor == 'Apple Computer, Inc.' && (event.target == event.relatedTarget.parentNode || (event.eventPhase == 3 && event.target.parentNode == event.relatedTarget)));};// showSubmenu for Menu Bar// set the proper CSS class on this menu to show itSpry.Widget.MenuBar.prototype.showSubmenu = function(menu){	if(this.currMenu)	{		this.clearMenus(this.currMenu);		this.currMenu = null;	}		if(menu)	{		this.addClassName(menu, "MenuBarSubmenuVisible");		if(typeof document.all != 'undefined' && typeof window.opera == 'undefined' && navigator.vendor != 'KDE')		{			if(!this.hasClassName(this.element, "MenuBarHorizontal") || menu.parentNode.parentNode != this.element)			{				menu.style.top = menu.parentNode.offsetTop + 'px';			}			if(!this.hasClassName(this.element, "MenuBarHorizontal") || menu.parentNode != this.element)			{				menu.style.left = menu.parentNode.offsetLeft + 'px';			}		}		if(typeof document.uniqueID != "undefined")		{			this.createIframeLayer(menu);		}	}	this.addClassName(this.element, "MenuBarActive");};// hideSubmenu for Menu Bar// remove the proper CSS class on this menu to hide itSpry.Widget.MenuBar.prototype.hideSubmenu = function(menu){	if(menu)	{		this.removeClassName(menu, "MenuBarSubmenuVisible");		if(typeof document.all != 'undefined' && typeof window.opera == 'undefined' && navigator.vendor != 'KDE')		{			menu.style.top = '';			menu.style.left = '';		}		this.removeIframeLayer(menu);	}};// initialize for Menu Bar// create event listeners for the Menu Bar widget so we can properly// show and hide submenusSpry.Widget.MenuBar.prototype.initialize = function(listitem, element, isie){	var opentime, closetime;	var link = listitem.getElementsByTagName('a')[0];	var submenus = listitem.getElementsByTagName('ul');	var menu = (submenus.length > 0 ? submenus[0] : null);	var hasSubMenu = false;	if(menu)	{		this.addClassName(link, "MenuBarItemSubmenu");		hasSubMenu = true;	}	if(!isie)	{		// define a simple function that comes standard in IE to determine		// if a node is within another node		listitem.contains = function(testNode)		{			// this refers to the list item			if(testNode == null)			{				return false;			}			if(testNode == this)			{				return true;			}			else			{				return this.contains(testNode.parentNode);			}		};	}		// need to save this for scope further down	var self = this;	this.addEventListener(listitem, 'mouseover', function(e)	{		if(self.bubbledTextEvent())		{			// ignore bubbled text events			return;		}		clearTimeout(closetime);		if(self.currMenu == listitem)		{			self.currMenu = null;		}		// show menu highlighting		self.addClassName(link, hasSubMenu ? "MenuBarItemSubmenuHover" : "MenuBarItemHover");		if(menu && !self.hasClassName(menu, "MenuBarSubmenuVisible"))		{			opentime = window.setTimeout(function(){self.showSubmenu(menu);}, 250);		}	}, false);	this.addEventListener(listitem, 'mouseout', function(e)	{		if(self.bubbledTextEvent())		{			// ignore bubbled text events			return;		}		var related = (typeof e.relatedTarget != 'undefined' ? e.relatedTarget : e.toElement);		if(!listitem.contains(related))		{			clearTimeout(opentime);			self.currMenu = listitem;			// remove menu highlighting			self.removeClassName(link, hasSubMenu ? "MenuBarItemSubmenuHover" : "MenuBarItemHover");			if(menu)			{				closetime = window.setTimeout(function(){self.hideSubmenu(menu);}, 600);			}		}	}, false);};