packages feed

happstack-yui-7373.5.2: bundle/node-menunav/node-menunav-coverage.js

/*
YUI 3.7.3 (build 5687)
Copyright 2012 Yahoo! Inc. All rights reserved.
Licensed under the BSD License.
http://yuilibrary.com/license/
*/
if (typeof _yuitest_coverage == "undefined"){
    _yuitest_coverage = {};
    _yuitest_coverline = function(src, line){
        var coverage = _yuitest_coverage[src];
        if (!coverage.lines[line]){
            coverage.calledLines++;
        }
        coverage.lines[line]++;
    };
    _yuitest_coverfunc = function(src, name, line){
        var coverage = _yuitest_coverage[src],
            funcId = name + ":" + line;
        if (!coverage.functions[funcId]){
            coverage.calledFunctions++;
        }
        coverage.functions[funcId]++;
    };
}
_yuitest_coverage["build/node-menunav/node-menunav.js"] = {
    lines: {},
    functions: {},
    coveredLines: 0,
    calledLines: 0,
    coveredFunctions: 0,
    calledFunctions: 0,
    path: "build/node-menunav/node-menunav.js",
    code: []
};
_yuitest_coverage["build/node-menunav/node-menunav.js"].code=["YUI.add('node-menunav', function (Y, NAME) {","","/**","* <p>The MenuNav Node Plugin makes it easy to transform existing list-based ","* markup into traditional, drop down navigational menus that are both accessible ","* and easy to customize, and only require a small set of dependencies.</p>","* ","* ","* <p>To use the MenuNav Node Plugin, simply pass a reference to the plugin to a ","* Node instance's <code>plug</code> method.</p>","* ","* <p>","* <code>","* &#60;script type=\"text/javascript\"&#62; <br>","* <br>","* 		//	Call the \"use\" method, passing in \"node-menunav\".  This will <br>","* 		//	load the script and CSS for the MenuNav Node Plugin and all of <br>","* 		//	the required dependencies. <br>","* <br>","* 		YUI().use(\"node-menunav\", function(Y) { <br>","* <br>","* 			//	Use the \"contentready\" event to initialize the menu when <br>","* 			//	the subtree of element representing the root menu <br>","* 			//	(&#60;div id=\"menu-1\"&#62;) is ready to be scripted. <br>","* <br>","* 			Y.on(\"contentready\", function () { <br>","* <br>","* 				//	The scope of the callback will be a Node instance <br>","* 				//	representing the root menu (&#60;div id=\"menu-1\"&#62;). <br>","* 				//	Therefore, since \"this\" represents a Node instance, it <br>","* 				//	is possible to just call \"this.plug\" passing in a <br>","*				//	reference to the MenuNav Node Plugin. <br>","* <br>","* 				this.plug(Y.Plugin.NodeMenuNav); <br>","* <br>","* 			}, \"#menu-1\"); <br>","* <br>		","* 		}); <br>","* <br>	","* 	&#60;/script&#62; <br>","* </code>","* </p>","*","* <p>The MenuNav Node Plugin has several configuration properties that can be ","* set via an object literal that is passed as a second argument to a Node ","* instance's <code>plug</code> method.","* </p>","*","* <p>","* <code>","* &#60;script type=\"text/javascript\"&#62; <br>","* <br>","* 		//	Call the \"use\" method, passing in \"node-menunav\".  This will <br>","* 		//	load the script and CSS for the MenuNav Node Plugin and all of <br>","* 		//	the required dependencies. <br>","* <br>","* 		YUI().use(\"node-menunav\", function(Y) { <br>","* <br>","* 			//	Use the \"contentready\" event to initialize the menu when <br>","* 			//	the subtree of element representing the root menu <br>","* 			//	(&#60;div id=\"menu-1\"&#62;) is ready to be scripted. <br>","* <br>","* 			Y.on(\"contentready\", function () { <br>","* <br>","* 				//	The scope of the callback will be a Node instance <br>","* 				//	representing the root menu (&#60;div id=\"menu-1\"&#62;). <br>","* 				//	Therefore, since \"this\" represents a Node instance, it <br>","* 				//	is possible to just call \"this.plug\" passing in a <br>","*				//	reference to the MenuNav Node Plugin. <br>","* <br>","* 				this.plug(Y.Plugin.NodeMenuNav, { mouseOutHideDelay: 1000 });","* <br><br>","* 			}, \"#menu-1\"); <br>","* <br>		","* 		}); <br>","* <br>	","* 	&#60;/script&#62; <br>","* </code>","* </p>","* ","* @module node-menunav","*/","","","	//	Util shortcuts","","var UA = Y.UA,","	later = Y.later,","	getClassName = Y.ClassNameManager.getClassName,","","","","	//	Frequently used strings","","	MENU = \"menu\",","	MENUITEM = \"menuitem\",","	HIDDEN = \"hidden\",","	PARENT_NODE = \"parentNode\",","	CHILDREN = \"children\",","	OFFSET_HEIGHT = \"offsetHeight\",","	OFFSET_WIDTH = \"offsetWidth\",","	PX = \"px\",","	ID = \"id\",","	PERIOD = \".\",","	HANDLED_MOUSEOUT = \"handledMouseOut\",","	HANDLED_MOUSEOVER = \"handledMouseOver\",","	ACTIVE = \"active\",","	LABEL = \"label\",","	LOWERCASE_A = \"a\",","	MOUSEDOWN = \"mousedown\",","	KEYDOWN = \"keydown\",","	CLICK = \"click\",","	EMPTY_STRING = \"\",","	FIRST_OF_TYPE = \"first-of-type\",","	ROLE = \"role\",","	PRESENTATION = \"presentation\",","	DESCENDANTS = \"descendants\",","	UI = \"UI\",","	ACTIVE_DESCENDANT = \"activeDescendant\",","	USE_ARIA = \"useARIA\",","	ARIA_HIDDEN = \"aria-hidden\",","	CONTENT = \"content\",","	HOST = \"host\",","	ACTIVE_DESCENDANT_CHANGE = ACTIVE_DESCENDANT + \"Change\",","","","	//	Attribute keys","	","	AUTO_SUBMENU_DISPLAY = \"autoSubmenuDisplay\",","	MOUSEOUT_HIDE_DELAY = \"mouseOutHideDelay\",","","","	//	CSS class names","","	CSS_MENU = getClassName(MENU),","	CSS_MENU_HIDDEN = getClassName(MENU, HIDDEN),","	CSS_MENU_HORIZONTAL = getClassName(MENU, \"horizontal\"),","	CSS_MENU_LABEL = getClassName(MENU, LABEL),","	CSS_MENU_LABEL_ACTIVE = getClassName(MENU, LABEL, ACTIVE),","	CSS_MENU_LABEL_MENUVISIBLE = getClassName(MENU, LABEL, (MENU + \"visible\")),","	CSS_MENUITEM = getClassName(MENUITEM),","	CSS_MENUITEM_ACTIVE = getClassName(MENUITEM, ACTIVE),","","","	//	CSS selectors","	","	MENU_SELECTOR = PERIOD + CSS_MENU,","	MENU_TOGGLE_SELECTOR = (PERIOD + getClassName(MENU, \"toggle\")),","    MENU_CONTENT_SELECTOR = PERIOD + getClassName(MENU, CONTENT),","    MENU_LABEL_SELECTOR = PERIOD + CSS_MENU_LABEL,","","	STANDARD_QUERY = \">\" + MENU_CONTENT_SELECTOR + \">ul>li>a\",","	EXTENDED_QUERY = \">\" + MENU_CONTENT_SELECTOR + \">ul>li>\" + MENU_LABEL_SELECTOR + \">a:first-child\";","","//	Utility functions","","","var getPreviousSibling = function (node) {","","	var oPrevious = node.previous(),","		oChildren;","","	if (!oPrevious) {","		oChildren = node.get(PARENT_NODE).get(CHILDREN);","		oPrevious = oChildren.item(oChildren.size() - 1);","	}","	","	return oPrevious;","","};","","","var getNextSibling = function (node) {","","	var oNext = node.next();","","	if (!oNext) {","		oNext = node.get(PARENT_NODE).get(CHILDREN).item(0);		","	}","	","	return oNext;","","};","","","var isAnchor = function (node) {","	","	var bReturnVal = false;","	","	if (node) {","		bReturnVal = node.get(\"nodeName\").toLowerCase() === LOWERCASE_A;","	}","	","	return bReturnVal;","	","};","","","var isMenuItem = function (node) {","","	return node.hasClass(CSS_MENUITEM);","","};","","","var isMenuLabel = function (node) {","","	return node.hasClass(CSS_MENU_LABEL);","","};","","","var isHorizontalMenu = function (menu) {","","	return menu.hasClass(CSS_MENU_HORIZONTAL);","","};","","","var hasVisibleSubmenu = function (menuLabel) {","","	return menuLabel.hasClass(CSS_MENU_LABEL_MENUVISIBLE);","","};","","","var getItemAnchor = function (node) {","","	return isAnchor(node) ? node : node.one(LOWERCASE_A);","","};","","","var getNodeWithClass = function (node, className, searchAncestors) {","","	var oItem;","	","	if (node) {","		","		if (node.hasClass(className)) {","			oItem = node;","		}","		","		if (!oItem && searchAncestors) {","			oItem = node.ancestor((PERIOD + className));","		}","	","	}","	","	return oItem;","","};","","","var getParentMenu = function (node) {","","	return node.ancestor(MENU_SELECTOR);","	","};","","","var getMenu = function (node, searchAncestors) {","","	return getNodeWithClass(node, CSS_MENU, searchAncestors);","","};","","","var getMenuItem = function (node, searchAncestors) {","","	var oItem;","	","	if (node) {","		oItem = getNodeWithClass(node, CSS_MENUITEM, searchAncestors);","	}","	","	return oItem;","","};","","","var getMenuLabel = function (node, searchAncestors) {","","	var oItem;","	","	if (node) {","	","		if (searchAncestors) {","			oItem = getNodeWithClass(node, CSS_MENU_LABEL, searchAncestors);","		}","		else {","			oItem = getNodeWithClass(node, CSS_MENU_LABEL) || ","				node.one((PERIOD + CSS_MENU_LABEL));","		}","		","	}","	","	return oItem;","","};","","","var getItem = function (node, searchAncestors) {","","	var oItem;","	","	if (node) {","		oItem = getMenuItem(node, searchAncestors) || ","			getMenuLabel(node, searchAncestors);","	}","	","	return oItem;	","","};","","","var getFirstItem = function (menu) {","	","	return getItem(menu.one(\"li\"));","","};","","","var getActiveClass = function (node) {","","	return isMenuItem(node) ? CSS_MENUITEM_ACTIVE : CSS_MENU_LABEL_ACTIVE;","","};","","","var handleMouseOverForNode = function (node, target) {","","	return node && !node[HANDLED_MOUSEOVER] && ","		(node.compareTo(target) || node.contains(target));","","};","","","var handleMouseOutForNode = function (node, relatedTarget) {","","	return node && !node[HANDLED_MOUSEOUT] && ","		(!node.compareTo(relatedTarget) && !node.contains(relatedTarget));","","};","","/**","* The NodeMenuNav class is a plugin for a Node instance.  The class is used via  ","* the <a href=\"Node.html#method_plug\"><code>plug</code></a> method of Node and ","* should not be instantiated directly.","* @namespace plugin","* @class NodeMenuNav","*/","var NodeMenuNav = function () {","","	NodeMenuNav.superclass.constructor.apply(this, arguments);","","};","","NodeMenuNav.NAME = \"nodeMenuNav\";","NodeMenuNav.NS = \"menuNav\";","","","/** ","* @property SHIM_TEMPLATE_TITLE","* @description String representing the value for the <code>title</code> ","* attribute for the shim used to prevent <code>&#60;select&#62;</code> elements ","* from poking through menus in IE 6.","* @default \"Menu Stacking Shim\"","* @type String","*/","NodeMenuNav.SHIM_TEMPLATE_TITLE = \"Menu Stacking Shim\";","","","/** ","* @property SHIM_TEMPLATE","* @description String representing the HTML used to create the ","* <code>&#60;iframe&#62;</code> shim used to prevent ","* <code>&#60;select&#62;</code> elements from poking through menus in IE 6.","* @default &#34;&#60;iframe frameborder=&#34;0&#34; tabindex=&#34;-1&#34; ","* class=&#34;yui-shim&#34; title=&#34;Menu Stacking Shim&#34; ","* src=&#34;javascript:false;&#34;&#62;&#60;/iframe&#62;&#34;","* @type String","*/","","//	<iframe> shim notes:","//","//	1) Need to set the \"frameBorder\" property to 0 to suppress the default ","//	<iframe> border in IE.  (Setting the CSS \"border\" property alone doesn't  ","//	suppress it.) ","//","//	2) The \"src\" attribute of the <iframe> is set to \"javascript:false;\" so ","//	that it won't load a page inside it, preventing the secure/nonsecure ","//	warning in IE when using HTTPS.","//","//	3) Since the role of the <iframe> shim is completely presentational, its ","//	\"tabindex\" attribute is set to \"-1\" and its title attribute is set to ","//	\"Menu Stacking Shim\".  Both strategies help users of screen readers to ","//	avoid mistakenly interacting with the <iframe> shim.","","NodeMenuNav.SHIM_TEMPLATE = '<iframe frameborder=\"0\" tabindex=\"-1\" class=\"' + ","							getClassName(\"shim\") + ","							'\" title=\"' + NodeMenuNav.SHIM_TEMPLATE_TITLE + ","							'\" src=\"javascript:false;\"></iframe>';","","","NodeMenuNav.ATTRS = {","","	/**","	* Boolean indicating if use of the WAI-ARIA Roles and States should be ","	* enabled for the menu.","	*","	* @attribute useARIA","	* @readOnly","	* @writeOnce	","	* @default true","	* @type boolean","	*/","	useARIA: {","		","		value: true,","		writeOnce: true,","		lazyAdd: false,","		setter: function (value) {","","			var oMenu = this.get(HOST),","				oMenuLabel,","				oMenuToggle,","				oSubmenu,","				sID;","","			if (value) {","","				oMenu.set(ROLE, MENU);","","				oMenu.all(\"ul,li,\" + MENU_CONTENT_SELECTOR).set(ROLE, PRESENTATION);","","				oMenu.all((PERIOD + getClassName(MENUITEM, CONTENT))).set(ROLE, MENUITEM);","","				oMenu.all((PERIOD + CSS_MENU_LABEL)).each(function (node) {","","					oMenuLabel = node;","					oMenuToggle = node.one(MENU_TOGGLE_SELECTOR);","","					if (oMenuToggle) {","						oMenuToggle.set(ROLE, PRESENTATION);","						oMenuLabel = oMenuToggle.previous();","					}","","					oMenuLabel.set(ROLE, MENUITEM);","					oMenuLabel.set(\"aria-haspopup\", true);","","					oSubmenu = node.next();","","					if (oSubmenu) {","","						oSubmenu.set(ROLE, MENU);","","						oMenuLabel = oSubmenu.previous();","						oMenuToggle = oMenuLabel.one(MENU_TOGGLE_SELECTOR);","","						if (oMenuToggle) {","							oMenuLabel = oMenuToggle;","						}","","						sID = Y.stamp(oMenuLabel);","","						if (!oMenuLabel.get(ID)) {","							oMenuLabel.set(ID, sID);","						}","","						oSubmenu.set(\"aria-labelledby\", sID);","						oSubmenu.set(ARIA_HIDDEN, true);","						","					}","","				});","				","			}","","		}","		","	},","","","	/**","	* Boolean indicating if submenus are automatically made visible when the ","	* user mouses over the menu's items.","	*","	* @attribute autoSubmenuDisplay","	* @readOnly","	* @writeOnce	","	* @default true","	* @type boolean","	*/	","	autoSubmenuDisplay: {","		","		value: true,","		writeOnce: true","		","	},","","","	/**","	* Number indicating the time (in milliseconds) that should expire before a ","	* submenu is made visible when the user mouses over the menu's label.","	*","	* @attribute submenuShowDelay","	* @readOnly","	* @writeOnce	","	* @default 250","	* @type Number","	*/","	submenuShowDelay: {","		","		value: 250,","		writeOnce: true","		","	},","","","	/**","	* Number indicating the time (in milliseconds) that should expire before a ","	* submenu is hidden when the user mouses out of a menu label heading in the ","	* direction of a submenu.  ","	*","	* @attribute submenuHideDelay","	* @readOnly","	* @writeOnce	","	* @default 250","	* @type Number","	*/","	submenuHideDelay: {","		","		value: 250,","		writeOnce: true","		","	},","","","	/**","	* Number indicating the time (in milliseconds) that should expire before a ","	* submenu is hidden when the user mouses out of it.","	* ","	* @attribute mouseOutHideDelay","	* @readOnly","	* @writeOnce	","	* @default 750","	* @type Number","	*/	","	mouseOutHideDelay: {","		","		value: 750,","		writeOnce: true","		","	}","","};","","","Y.extend(NodeMenuNav, Y.Plugin.Base, {","","	//	Protected properties","","	/** ","	* @property _rootMenu","	* @description Node instance representing the root menu in the menu.","	* @default null","	* @protected","	* @type Node","	*/","	_rootMenu: null,	","","","	/** ","	* @property _activeItem","	* @description Node instance representing the menu's active descendent: ","	* the menuitem or menu label the user is currently interacting with.","	* @default null","	* @protected","	* @type Node","	*/","	_activeItem: null, ","","","	/** ","	* @property _activeMenu","	* @description Node instance representing the menu that is the parent of ","	* the menu's active descendent.","	* @default null","	* @protected","	* @type Node","	*/","	_activeMenu: null,","","","	/** ","	* @property _hasFocus","	* @description Boolean indicating if the menu has focus.","	* @default false","	* @protected","	* @type Boolean","	*/","	_hasFocus: false,","","","	//	In gecko-based browsers a mouseover and mouseout event will fire even ","	//	if a DOM element moves out from under the mouse without the user ","	//	actually moving the mouse.  This bug affects NodeMenuNav because the  ","	//	user can hit the Esc key to hide a menu, and if the mouse is over the  ","	//	menu when the user presses Esc, the _onMenuMouseOut handler will be ","	//	called.  To fix this bug the following flag (_blockMouseEvent) is used ","	// to block the code in the _onMenuMouseOut handler from executing.","","	/** ","	* @property _blockMouseEvent","	* @description Boolean indicating whether or not to handle the ","	* \"mouseover\" event.","	* @default false","	* @protected","	* @type Boolean","	*/","	_blockMouseEvent: false,","","","	/** ","	* @property _currentMouseX","	* @description Number representing the current x coordinate of the mouse ","	* inside the menu.","	* @default 0","	* @protected","	* @type Number","	*/","	_currentMouseX: 0,","","","	/** ","	* @property _movingToSubmenu","	* @description Boolean indicating if the mouse is moving from a menu ","	* label to its corresponding submenu.","	* @default false","	* @protected","	* @type Boolean","	*/","	_movingToSubmenu: false,","","","	/** ","	* @property _showSubmenuTimer","	* @description Timer used to show a submenu.","	* @default null","	* @protected","	* @type Object","	*/","	_showSubmenuTimer: null,","","","	/** ","	* @property _hideSubmenuTimer","	* @description Timer used to hide a submenu.","	* @default null","	* @protected","	* @type Object","	*/","	_hideSubmenuTimer: null,","","","	/** ","	* @property _hideAllSubmenusTimer","	* @description Timer used to hide a all submenus.","	* @default null","	* @protected","	* @type Object","	*/","	_hideAllSubmenusTimer: null,","","","	/** ","	* @property _firstItem","	* @description Node instance representing the first item (menuitem or menu ","	* label) in the root menu of a menu.","	* @default null","	* @protected","	* @type Node","	*/","	_firstItem: null,","","","	//	Public methods","","","    initializer: function (config) {","","		var menuNav = this,","			oRootMenu = this.get(HOST),","			aHandlers = [],","			oDoc;","","","		if (oRootMenu) {","","			menuNav._rootMenu = oRootMenu;","","			oRootMenu.all(\"ul:first-child\").addClass(FIRST_OF_TYPE);","","			//	Hide all visible submenus","","			oRootMenu.all(MENU_SELECTOR).addClass(CSS_MENU_HIDDEN);","","","			//	Wire up all event handlers","","			aHandlers.push(oRootMenu.on(\"mouseover\", menuNav._onMouseOver, menuNav));","			aHandlers.push(oRootMenu.on(\"mouseout\", menuNav._onMouseOut, menuNav));","			aHandlers.push(oRootMenu.on(\"mousemove\", menuNav._onMouseMove, menuNav));","			aHandlers.push(oRootMenu.on(MOUSEDOWN, menuNav._toggleSubmenuDisplay, menuNav));","			aHandlers.push(Y.on(\"key\", menuNav._toggleSubmenuDisplay, oRootMenu, \"down:13\", menuNav));","			aHandlers.push(oRootMenu.on(CLICK, menuNav._toggleSubmenuDisplay, menuNav));","			aHandlers.push(oRootMenu.on(\"keypress\", menuNav._onKeyPress, menuNav));","			aHandlers.push(oRootMenu.on(KEYDOWN, menuNav._onKeyDown, menuNav));","","			oDoc = oRootMenu.get(\"ownerDocument\");","","		    aHandlers.push(oDoc.on(MOUSEDOWN, menuNav._onDocMouseDown, menuNav));","			aHandlers.push(oDoc.on(\"focus\", menuNav._onDocFocus, menuNav));","","			this._eventHandlers = aHandlers;","","			menuNav._initFocusManager();","","		}","		","","    },","","	destructor: function () {","","		var aHandlers = this._eventHandlers;","","		if (aHandlers) {","","			Y.Array.each(aHandlers, function (handle) {","				handle.detach();","			});","","			this._eventHandlers = null;","","		}","		","		this.get(HOST).unplug(\"focusManager\");","		","    },","","","","	//	Protected methods","","	/**","	* @method _isRoot","	* @description Returns a boolean indicating if the specified menu is the ","	* root menu in the menu.","	* @protected","	* @param {Node} menu Node instance representing a menu.","	* @return {Boolean} Boolean indicating if the specified menu is the root ","	* menu in the menu.","	*/","	_isRoot: function (menu) {","","		return this._rootMenu.compareTo(menu);","","	},","","","	/**","	* @method _getTopmostSubmenu","	* @description Returns the topmost submenu of a submenu hierarchy.","	* @protected","	* @param {Node} menu Node instance representing a menu.","	* @return {Node} Node instance representing a menu.","	*/","	_getTopmostSubmenu: function (menu) {","	","		var menuNav = this,","			oMenu = getParentMenu(menu),","			returnVal;","","","		if (!oMenu) {","			returnVal = menu;","		}","		else if (menuNav._isRoot(oMenu)) {","			returnVal = menu;","		}","		else {","			returnVal = menuNav._getTopmostSubmenu(oMenu);","		}","	","		return returnVal;","	","	},","","","	/**","	* @method _clearActiveItem","	* @description Clears the menu's active descendent.","	* @protected","	*/","	_clearActiveItem: function () {","","		var menuNav = this,","			oActiveItem = menuNav._activeItem;","		","		if (oActiveItem) {","			oActiveItem.removeClass(getActiveClass(oActiveItem));","		}","","		menuNav._activeItem = null;","	","	},","","","	/**","	* @method _setActiveItem","	* @description Sets the specified menuitem or menu label as the menu's ","	* active descendent.","	* @protected","	* @param {Node} item Node instance representing a menuitem or menu label.","	*/","	_setActiveItem: function (item) {","","		var menuNav = this;","	","		if (item) {","			","			menuNav._clearActiveItem();","	","			item.addClass(getActiveClass(item));","			","			menuNav._activeItem = item;","		","		}","	","	},","","","	/**","	* @method _focusItem","	* @description Focuses the specified menuitem or menu label.","	* @protected","	* @param {Node} item Node instance representing a menuitem or menu label.","	*/","	_focusItem: function (item) {","	","		var menuNav = this,","			oMenu,","			oItem;","	","		if (item && menuNav._hasFocus) {","","			oMenu = getParentMenu(item);","			oItem = getItemAnchor(item);","","			if (oMenu && !oMenu.compareTo(menuNav._activeMenu)) {","				menuNav._activeMenu = oMenu;","				menuNav._initFocusManager();","			}","		","			menuNav._focusManager.focus(oItem);","","		}","	","	},","","","	/**","	* @method _showMenu","	* @description Shows the specified menu.","	* @protected","	* @param {Node} menu Node instance representing a menu.","	*/","	_showMenu: function (menu) {","","		var oParentMenu = getParentMenu(menu),","			oLI = menu.get(PARENT_NODE),","			aXY = oLI.getXY();","","","		if (this.get(USE_ARIA)) {","			menu.set(ARIA_HIDDEN, false);","		}","","","		if (isHorizontalMenu(oParentMenu)) {","			aXY[1] = aXY[1] + oLI.get(OFFSET_HEIGHT);","		}","		else {","			aXY[0] = aXY[0] + oLI.get(OFFSET_WIDTH);","		}","		","		menu.setXY(aXY);","","		if (UA.ie < 8) {","","			if (UA.ie === 6 && !menu.hasIFrameShim) {","	","				menu.appendChild(Y.Node.create(NodeMenuNav.SHIM_TEMPLATE));","				menu.hasIFrameShim = true;","","			}","","			//	Clear previous values for height and width","","			menu.setStyles({ height: EMPTY_STRING, width: EMPTY_STRING });","","			//	Set the width and height of the menu's bounding box - this is ","			//	necessary for IE 6 so that the CSS for the <iframe> shim can ","			//	simply set the <iframe>'s width and height to 100% to ensure ","			//	that dimensions of an <iframe> shim are always sync'd to the ","			//	that of its parent menu.  Specifying a width and height also ","			//	helps when positioning decorator elements (for creating effects ","			//	like rounded corners) inside a menu's bounding box in IE 7.","			","			menu.setStyles({ ","				height: (menu.get(OFFSET_HEIGHT) + PX), ","				width: (menu.get(OFFSET_WIDTH) + PX) });","","		}","","		menu.previous().addClass(CSS_MENU_LABEL_MENUVISIBLE);","		menu.removeClass(CSS_MENU_HIDDEN);","","	},","	","","	/**","	* @method _hideMenu ","	* @description Hides the specified menu.","	* @protected","	* @param {Node} menu Node instance representing a menu.","	* @param {Boolean} activateAndFocusLabel Boolean indicating if the label ","	* for the specified ","	* menu should be focused and set as active.","	*/","	_hideMenu: function (menu, activateAndFocusLabel) {","","		var menuNav = this,","			oLabel = menu.previous(),","			oActiveItem;","","		oLabel.removeClass(CSS_MENU_LABEL_MENUVISIBLE);","","","		if (activateAndFocusLabel) {","			menuNav._focusItem(oLabel);","			menuNav._setActiveItem(oLabel);			","		}","","		oActiveItem = menu.one((PERIOD + CSS_MENUITEM_ACTIVE));","","		if (oActiveItem) {","			oActiveItem.removeClass(CSS_MENUITEM_ACTIVE);","		}","","		//	Clear the values for top and left that were set by the call to ","		//	\"setXY\" when the menu was shown so that the hidden position ","		//	specified in the core CSS file will take affect.","","		menu.setStyles({ left: EMPTY_STRING, top: EMPTY_STRING });","		","		menu.addClass(CSS_MENU_HIDDEN);","","		if (menuNav.get(USE_ARIA)) {","			menu.set(ARIA_HIDDEN, true);","		}	","		","	},","","","	/**","	* @method _hideAllSubmenus","	* @description Hides all submenus of the specified menu.","	* @protected","	* @param {Node} menu Node instance representing a menu.","	*/","	_hideAllSubmenus: function (menu) {","","		var menuNav = this;","","		menu.all(MENU_SELECTOR).each(Y.bind(function (submenuNode) {","		","			menuNav._hideMenu(submenuNode);","		","		}, menuNav));","	","	},","","","	/**","	* @method _cancelShowSubmenuTimer","	* @description Cancels the timer used to show a submenu.","	* @protected","	*/","	_cancelShowSubmenuTimer: function () {","","		var menuNav = this,","			oShowSubmenuTimer = menuNav._showSubmenuTimer;","","		if (oShowSubmenuTimer) {","			oShowSubmenuTimer.cancel();","			menuNav._showSubmenuTimer = null;","		}","	","	},","","","	/**","	* @method _cancelHideSubmenuTimer","	* @description Cancels the timer used to hide a submenu.","	* @protected","	*/","	_cancelHideSubmenuTimer: function () {","","		var menuNav = this,","			oHideSubmenuTimer = menuNav._hideSubmenuTimer;","","","		if (oHideSubmenuTimer) {","			oHideSubmenuTimer.cancel();","			menuNav._hideSubmenuTimer = null;","		}","	","	},","","","	/**","	* @method _initFocusManager","	* @description Initializes and updates the Focus Manager so that is is ","	* always managing descendants of the active menu.","	* @protected","	*/","	_initFocusManager: function () {","","		var menuNav = this,","			oRootMenu = menuNav._rootMenu,","			oMenu = menuNav._activeMenu || oRootMenu,","			sSelectorBase = ","				menuNav._isRoot(oMenu) ? EMPTY_STRING : (\"#\" + oMenu.get(\"id\")),","			oFocusManager = menuNav._focusManager,","			sKeysVal,","			sDescendantSelector,","			sQuery;","","		if (isHorizontalMenu(oMenu)) {","","			sDescendantSelector = sSelectorBase + STANDARD_QUERY + \",\" + ","				sSelectorBase + EXTENDED_QUERY;","			","			sKeysVal = { next: \"down:39\", previous: \"down:37\" };","			","		}","		else {","","			sDescendantSelector = sSelectorBase + STANDARD_QUERY;","			sKeysVal = { next: \"down:40\", previous: \"down:38\" };","","		}","","","		if (!oFocusManager) {","","			oRootMenu.plug(Y.Plugin.NodeFocusManager, { ","				descendants: sDescendantSelector,","				keys: sKeysVal,","				circular: true","			});","","			oFocusManager = oRootMenu.focusManager;","","			sQuery = \"#\" + oRootMenu.get(\"id\") + MENU_SELECTOR + \" a,\" + ","							MENU_TOGGLE_SELECTOR;","","			oRootMenu.all(sQuery).set(\"tabIndex\", -1);","","			oFocusManager.on(ACTIVE_DESCENDANT_CHANGE, ","				this._onActiveDescendantChange, oFocusManager, this);","","			oFocusManager.after(ACTIVE_DESCENDANT_CHANGE, ","				this._afterActiveDescendantChange, oFocusManager, this);","			","			menuNav._focusManager = oFocusManager;","			","		}","		else {","","			oFocusManager.set(ACTIVE_DESCENDANT, -1);","			oFocusManager.set(DESCENDANTS, sDescendantSelector);","			oFocusManager.set(\"keys\", sKeysVal);","			","		}","","	},","","","	//	Event handlers for discrete pieces of pieces of the menu","","","	/**","	* @method _onActiveDescendantChange","	* @description \"activeDescendantChange\" event handler for menu's ","	* Focus Manager.","	* @protected","	* @param {Object} event Object representing the Attribute change event.","	* @param {NodeMenuNav} menuNav Object representing the NodeMenuNav instance.","	*/","	_onActiveDescendantChange: function (event, menuNav) {","","		if (event.src === UI && menuNav._activeMenu && ","				!menuNav._movingToSubmenu) {","","			menuNav._hideAllSubmenus(menuNav._activeMenu);","","		}","		","	},","","","	/**","	* @method _afterActiveDescendantChange","	* @description \"activeDescendantChange\" event handler for menu's ","	* Focus Manager.","	* @protected","	* @param {Object} event Object representing the Attribute change event.","	* @param {NodeMenuNav} menuNav Object representing the NodeMenuNav instance.","	*/","	_afterActiveDescendantChange: function (event, menuNav) {","","		var oItem;","","		if (event.src === UI) {","			oItem = getItem(this.get(DESCENDANTS).item(event.newVal), true);","			menuNav._setActiveItem(oItem);","		}","	","	},","","","	/**","	* @method _onDocFocus","	* @description \"focus\" event handler for the owner document of the MenuNav.","	* @protected","	* @param {Object} event Object representing the DOM event.","	*/","	_onDocFocus: function (event) {","	","		var menuNav = this,","			oActiveItem = menuNav._activeItem,","			oTarget = event.target,","			oMenu;","	","","		if (menuNav._rootMenu.contains(oTarget)) {	//	The menu has focus","","			if (menuNav._hasFocus) {	","","				oMenu = getParentMenu(oTarget);","","				//	If the element that was focused is a descendant of the ","				//	root menu, but is in a submenu not currently being ","				//	managed by the Focus Manager, update the Focus Manager so ","				//	that it is now managing the submenu that is the parent of  ","				//	the element that was focused.","				","				if (!menuNav._activeMenu.compareTo(oMenu)) {","","					menuNav._activeMenu = oMenu;","					menuNav._initFocusManager();","					menuNav._focusManager.set(ACTIVE_DESCENDANT, oTarget);","					menuNav._setActiveItem(getItem(oTarget, true));","					","				}","			","			}","			else { //	Initial focus","","				//	First time the menu has been focused, need to setup focused ","				//	state and established active active descendant","	","				menuNav._hasFocus = true;","	","				oActiveItem = getItem(oTarget, true);","	","				if (oActiveItem) {	","					menuNav._setActiveItem(oActiveItem);","				}","				","			}","		","		}","		else {	//	The menu has lost focus","","			menuNav._clearActiveItem();","","			menuNav._cancelShowSubmenuTimer();","			menuNav._hideAllSubmenus(menuNav._rootMenu);","","			menuNav._activeMenu = menuNav._rootMenu;","			menuNav._initFocusManager();","			","			menuNav._focusManager.set(ACTIVE_DESCENDANT, 0);","			","			menuNav._hasFocus = false;","","		}","	","	},","","","	/**","	* @method _onMenuMouseOver","	* @description \"mouseover\" event handler for a menu.","	* @protected","	* @param {Node} menu Node instance representing a menu.","	* @param {Object} event Object representing the DOM event.","	*/","	_onMenuMouseOver: function (menu, event) {","","		var menuNav = this,","			oHideAllSubmenusTimer = menuNav._hideAllSubmenusTimer;","","		if (oHideAllSubmenusTimer) {","			oHideAllSubmenusTimer.cancel();","			menuNav._hideAllSubmenusTimer = null;","		}","","		menuNav._cancelHideSubmenuTimer();","","		//	Need to update the FocusManager in advance of focus a new ","		//	Menu in order to avoid the FocusManager thinking that ","		//	it has lost focus","		","		if (menu && !menu.compareTo(menuNav._activeMenu)) {","			menuNav._activeMenu = menu;","","			if (menuNav._hasFocus) {","				menuNav._initFocusManager();","			}","","		}","","		if (menuNav._movingToSubmenu && isHorizontalMenu(menu)) {","			menuNav._movingToSubmenu = false;","		}","","	},","","","	/**","	* @method _hideAndFocusLabel","	* @description Hides all of the submenus of the root menu and focuses the ","	* label of the topmost submenu","	* @protected","	*/","	_hideAndFocusLabel: function () {","","		var	menuNav = this,","			oActiveMenu = menuNav._activeMenu,","			oSubmenu;","	","		menuNav._hideAllSubmenus(menuNav._rootMenu);","","		if (oActiveMenu) {","","			//	Focus the label element for the topmost submenu","			oSubmenu = menuNav._getTopmostSubmenu(oActiveMenu);","			menuNav._focusItem(oSubmenu.previous());","","		}","	","	},","","","	/**","	* @method _onMenuMouseOut","	* @description \"mouseout\" event handler for a menu.","	* @protected","	* @param {Node} menu Node instance representing a menu.","	* @param {Object} event Object representing the DOM event.","	*/","	_onMenuMouseOut: function (menu, event) {","","		var menuNav = this,","			oActiveMenu = menuNav._activeMenu,","			oRelatedTarget = event.relatedTarget,","			oActiveItem = menuNav._activeItem,","			oParentMenu,","			oMenu;","","","		if (oActiveMenu && !oActiveMenu.contains(oRelatedTarget)) {","		","			oParentMenu = getParentMenu(oActiveMenu);","			","","			if (oParentMenu && !oParentMenu.contains(oRelatedTarget)) {","","				if (menuNav.get(MOUSEOUT_HIDE_DELAY) > 0) {","","					menuNav._cancelShowSubmenuTimer();","","					menuNav._hideAllSubmenusTimer = ","","						later(menuNav.get(MOUSEOUT_HIDE_DELAY), ","							menuNav, menuNav._hideAndFocusLabel);","						","				}","			","			}","			else {","			","				if (oActiveItem) {","				","					oMenu = getParentMenu(oActiveItem);","","					if (!menuNav._isRoot(oMenu)) { ","						menuNav._focusItem(oMenu.previous());","					}","				","				}","			","			}","","		}","","	},","","","	/**","	* @method _onMenuLabelMouseOver","	* @description \"mouseover\" event handler for a menu label.","	* @protected","	* @param {Node} menuLabel Node instance representing a menu label.","	* @param {Object} event Object representing the DOM event.","	*/","	_onMenuLabelMouseOver: function (menuLabel, event) {","","		var menuNav = this,","			oActiveMenu = menuNav._activeMenu,","			bIsRoot = menuNav._isRoot(oActiveMenu),","			bUseAutoSubmenuDisplay = ","				(menuNav.get(AUTO_SUBMENU_DISPLAY) && bIsRoot || !bIsRoot),","            submenuShowDelay = menuNav.get(\"submenuShowDelay\"),	","			oSubmenu;","				","","        var showSubmenu = function (delay) {","","			menuNav._cancelHideSubmenuTimer();","			menuNav._cancelShowSubmenuTimer();","","			if (!hasVisibleSubmenu(menuLabel)) {","","				oSubmenu = menuLabel.next();","","				if (oSubmenu) {","					menuNav._hideAllSubmenus(oActiveMenu);","					menuNav._showSubmenuTimer = later(delay, menuNav, menuNav._showMenu, oSubmenu);","				}","","			}","            ","        };","","","		menuNav._focusItem(menuLabel);","		menuNav._setActiveItem(menuLabel);","","","		if (bUseAutoSubmenuDisplay) {","	","	        if (menuNav._movingToSubmenu) {","	            ","	            //  If the user is moving diagonally from a submenu to ","	            //  another submenu and they then stop and pause on a","	            //  menu label for an amount of time equal to the amount of ","	            //  time defined for the display of a submenu then show the ","	            //  submenu immediately.","	            //  http://yuilibrary.com/projects/yui3/ticket/2528316","	            ","	            //Y.message(\"Pause path\");","	            ","	            menuNav._hoverTimer = later(submenuShowDelay, menuNav, function () {","                    showSubmenu(0);","	            });","	            ","	        }","	        else {","                showSubmenu(submenuShowDelay);","	        }","		","		}","","	},","","","	/**","	* @method _onMenuLabelMouseOut","	* @description \"mouseout\" event handler for a menu label.","	* @protected","	* @param {Node} menuLabel Node instance representing a menu label.","	* @param {Object} event Object representing the DOM event.","	*/","	_onMenuLabelMouseOut: function (menuLabel, event) {","","		var menuNav = this,","			bIsRoot = menuNav._isRoot(menuNav._activeMenu),","			bUseAutoSubmenuDisplay = ","				(menuNav.get(AUTO_SUBMENU_DISPLAY) && bIsRoot || !bIsRoot),","","			oRelatedTarget = event.relatedTarget,","			oSubmenu = menuLabel.next(),","			hoverTimer = menuNav._hoverTimer;","","        if (hoverTimer) {","            hoverTimer.cancel();","        }","","		menuNav._clearActiveItem();","","		if (bUseAutoSubmenuDisplay) {","","			if (menuNav._movingToSubmenu && ","					!menuNav._showSubmenuTimer && oSubmenu) {","","				//	If the mouse is moving diagonally toward the submenu and ","				//	another submenu isn't in the process of being displayed ","				//	(via a timer), then hide the submenu via a timer to give","				//	the user some time to reach the submenu.","			","				menuNav._hideSubmenuTimer = ","					later(menuNav.get(\"submenuHideDelay\"), menuNav, ","						menuNav._hideMenu, oSubmenu);","			","			}","			else if (!menuNav._movingToSubmenu && oSubmenu && (!oRelatedTarget || ","			        (oRelatedTarget && ","			            !oSubmenu.contains(oRelatedTarget) && ","			            !oRelatedTarget.compareTo(oSubmenu)))) {","","				//	If the mouse is not moving toward the submenu, cancel any ","				//	submenus that might be in the process of being displayed ","				//	(via a timer) and hide this submenu immediately.","","				menuNav._cancelShowSubmenuTimer();","","				menuNav._hideMenu(oSubmenu);","","			}","","		}","","	},","	","","	/**","	* @method _onMenuItemMouseOver","	* @description \"mouseover\" event handler for a menuitem.","	* @protected","	* @param {Node} menuItem Node instance representing a menuitem.","	* @param {Object} event Object representing the DOM event.","	*/","	_onMenuItemMouseOver: function (menuItem, event) {","","		var menuNav = this,","			oActiveMenu = menuNav._activeMenu,","			bIsRoot = menuNav._isRoot(oActiveMenu),","			bUseAutoSubmenuDisplay = ","				(menuNav.get(AUTO_SUBMENU_DISPLAY) && bIsRoot || !bIsRoot);","","","		menuNav._focusItem(menuItem);","		menuNav._setActiveItem(menuItem);","","","		if (bUseAutoSubmenuDisplay && !menuNav._movingToSubmenu) {","","			menuNav._hideAllSubmenus(oActiveMenu);","","		}","","	},","	","","	/**","	* @method _onMenuItemMouseOut","	* @description \"mouseout\" event handler for a menuitem.","	* @protected","	* @param {Node} menuItem Node instance representing a menuitem.","	* @param {Object} event Object representing the DOM event.","	*/","	_onMenuItemMouseOut: function (menuItem, event) {","","		this._clearActiveItem();","","	},","","","	/**","	* @method _onVerticalMenuKeyDown","	* @description \"keydown\" event handler for vertical menus.","	* @protected","	* @param {Object} event Object representing the DOM event.","	*/","	_onVerticalMenuKeyDown: function (event) {","","		var menuNav = this,","			oActiveMenu = menuNav._activeMenu,","			oRootMenu = menuNav._rootMenu,","			oTarget = event.target,","			bPreventDefault = false,","			nKeyCode = event.keyCode,","			oSubmenu,","			oParentMenu,","			oLI,","			oItem;","","","		switch (nKeyCode) {","","			case 37:	//	left arrow","","				oParentMenu = getParentMenu(oActiveMenu);","","				if (oParentMenu && isHorizontalMenu(oParentMenu)) {","				","					menuNav._hideMenu(oActiveMenu);","					oLI = getPreviousSibling(oActiveMenu.get(PARENT_NODE));","					oItem = getItem(oLI);","					","					if (oItem) {","","						if (isMenuLabel(oItem)) {	//	Menu label","						","							oSubmenu = oItem.next();","						","","							if (oSubmenu) {","","								menuNav._showMenu(oSubmenu);","								menuNav._focusItem(getFirstItem(oSubmenu));","								menuNav._setActiveItem(getFirstItem(oSubmenu));","","							}","							else {","	","								menuNav._focusItem(oItem);","								menuNav._setActiveItem(oItem);","	","							}","						","						}","						else {	//	MenuItem","","							menuNav._focusItem(oItem);","							menuNav._setActiveItem(oItem);","","						}","					","					}","","				}","				else if (!menuNav._isRoot(oActiveMenu)) {","					menuNav._hideMenu(oActiveMenu, true);","				}","","","				bPreventDefault = true;","","			break;","","			case 39:	//	right arrow","","				if (isMenuLabel(oTarget)) {","					","					oSubmenu = oTarget.next();","","					if (oSubmenu) {","","						menuNav._showMenu(oSubmenu);","						menuNav._focusItem(getFirstItem(oSubmenu));","						menuNav._setActiveItem(getFirstItem(oSubmenu));","","					}","				","				}","				else if (isHorizontalMenu(oRootMenu)) {","","					oSubmenu = menuNav._getTopmostSubmenu(oActiveMenu);","					oLI = getNextSibling(oSubmenu.get(PARENT_NODE));","					oItem = getItem(oLI);","","					menuNav._hideAllSubmenus(oRootMenu);","","					if (oItem) {","","						if (isMenuLabel(oItem)) {	//	Menu label","","							oSubmenu = oItem.next();","","							if (oSubmenu) {","","								menuNav._showMenu(oSubmenu);","								menuNav._focusItem(getFirstItem(oSubmenu));","								menuNav._setActiveItem(getFirstItem(oSubmenu));","","							}","							else {","","								menuNav._focusItem(oItem);","								menuNav._setActiveItem(oItem);	","","							}","						","						}","						else {	//	MenuItem","","							menuNav._focusItem(oItem);","							menuNav._setActiveItem(oItem);","","						}							","","					}","				","				}","","				bPreventDefault = true;","","			break;","","		}	","","","		if (bPreventDefault) {","","			//	Prevent the browser from scrolling the window","","			event.preventDefault();			","","		}","	","	},","	","","	/**","	* @method _onHorizontalMenuKeyDown","	* @description \"keydown\" event handler for horizontal menus.","	* @protected","	* @param {Object} event Object representing the DOM event.","	*/","	_onHorizontalMenuKeyDown: function (event) {","","		var menuNav = this,","			oActiveMenu = menuNav._activeMenu,","			oTarget = event.target,","			oFocusedItem = getItem(oTarget, true),","			bPreventDefault = false,","			nKeyCode = event.keyCode,","			oSubmenu;","","","		if (nKeyCode === 40) {","","			menuNav._hideAllSubmenus(oActiveMenu);","","			if (isMenuLabel(oFocusedItem)) {","			","				oSubmenu = oFocusedItem.next();","","				if (oSubmenu) {","","					menuNav._showMenu(oSubmenu);","					menuNav._focusItem(getFirstItem(oSubmenu));","					menuNav._setActiveItem(getFirstItem(oSubmenu));","","				}","","				bPreventDefault = true;","			","			}","","		}		","","","		if (bPreventDefault) {","","			//	Prevent the browser from scrolling the window","","			event.preventDefault();			","","		}","	","	},","","","	//	Generic DOM Event handlers","","","	/**","	* @method _onMouseMove","	* @description \"mousemove\" event handler for the menu.","	* @protected","	* @param {Object} event Object representing the DOM event.","	*/","	_onMouseMove: function (event) {","","		var menuNav = this;","","		//	Using a timer to set the value of the \"_currentMouseX\" property ","		//	helps improve the reliability of the calculation used to set the ","		//	value of the \"_movingToSubmenu\" property - especially in Opera.","","		later(10, menuNav, function () {","","			menuNav._currentMouseX = event.pageX;","		","		});","	","	},","","","	/**","	* @method _onMouseOver","	* @description \"mouseover\" event handler for the menu.","	* @protected","	* @param {Object} event Object representing the DOM event.","	*/","	_onMouseOver: function (event) {","","		var menuNav = this,","			oTarget,","			oMenu,","			oMenuLabel,","			oParentMenu,","			oMenuItem;","","","		if (menuNav._blockMouseEvent) {","			menuNav._blockMouseEvent = false;","		}","		else {","","			oTarget = event.target;","			oMenu = getMenu(oTarget, true);","			oMenuLabel = getMenuLabel(oTarget, true);","			oMenuItem = getMenuItem(oTarget, true);","","","			if (handleMouseOverForNode(oMenu, oTarget)) {","","				menuNav._onMenuMouseOver(oMenu, event);","","				oMenu[HANDLED_MOUSEOVER] = true;","				oMenu[HANDLED_MOUSEOUT] = false;","","				oParentMenu = getParentMenu(oMenu);","","				if (oParentMenu) {","","					oParentMenu[HANDLED_MOUSEOUT] = true;","					oParentMenu[HANDLED_MOUSEOVER] = false;","		","				}","			","			}","","			if (handleMouseOverForNode(oMenuLabel, oTarget)) {","","				menuNav._onMenuLabelMouseOver(oMenuLabel, event);","","				oMenuLabel[HANDLED_MOUSEOVER] = true;","				oMenuLabel[HANDLED_MOUSEOUT] = false;","	","			}","","			if (handleMouseOverForNode(oMenuItem, oTarget)) {","	","				menuNav._onMenuItemMouseOver(oMenuItem, event);","","				oMenuItem[HANDLED_MOUSEOVER] = true;","				oMenuItem[HANDLED_MOUSEOUT] = false;","				","			}","","		}","","	},","","","	/**","	* @method _onMouseOut","	* @description \"mouseout\" event handler for the menu.","	* @protected","	* @param {Object} event Object representing the DOM event.","	*/","	_onMouseOut: function (event) {","			","		var menuNav = this,","			oActiveMenu = menuNav._activeMenu,","			bMovingToSubmenu = false,","			oTarget,","			oRelatedTarget,","			oMenu,","			oMenuLabel,","			oSubmenu,","			oMenuItem;","","","		menuNav._movingToSubmenu = ","					(oActiveMenu && !isHorizontalMenu(oActiveMenu) && ","						((event.pageX - 5) > menuNav._currentMouseX));","		","		oTarget = event.target;","		oRelatedTarget = event.relatedTarget;","		oMenu = getMenu(oTarget, true);","		oMenuLabel = getMenuLabel(oTarget, true);","		oMenuItem = getMenuItem(oTarget, true);","","","		if (handleMouseOutForNode(oMenuLabel, oRelatedTarget)) {","","			menuNav._onMenuLabelMouseOut(oMenuLabel, event);","","			oMenuLabel[HANDLED_MOUSEOUT] = true;","			oMenuLabel[HANDLED_MOUSEOVER] = false;","","		}","","		if (handleMouseOutForNode(oMenuItem, oRelatedTarget)) {","","			menuNav._onMenuItemMouseOut(oMenuItem, event);","","			oMenuItem[HANDLED_MOUSEOUT] = true;","			oMenuItem[HANDLED_MOUSEOVER] = false;","			","		}","","","		if (oMenuLabel) {","","			oSubmenu = oMenuLabel.next();","","			if (oSubmenu && oRelatedTarget && ","				(oRelatedTarget.compareTo(oSubmenu) || ","					oSubmenu.contains(oRelatedTarget))) {","","				bMovingToSubmenu = true;","","			}","		","		}","		","","		if (handleMouseOutForNode(oMenu, oRelatedTarget) || bMovingToSubmenu) {","","			menuNav._onMenuMouseOut(oMenu, event);				","","			oMenu[HANDLED_MOUSEOUT] = true;","			oMenu[HANDLED_MOUSEOVER] = false;","		","		}","	","	},","","","	/**","	* @method _toggleSubmenuDisplay","	* @description \"mousedown,\" \"keydown,\" and \"click\" event handler for the ","	* menu used to toggle the display of a submenu.","	* @protected","	* @param {Object} event Object representing the DOM event.","	*/","	_toggleSubmenuDisplay: function (event) {","","		var menuNav = this,","			oTarget = event.target,","			oMenuLabel = getMenuLabel(oTarget, true),","			sType = event.type,","			oAnchor,","			oSubmenu,","			sHref,","			nHashPos,","			nLen,","			sId;","","","		if (oMenuLabel) {","","			oAnchor = isAnchor(oTarget) ? oTarget : oTarget.ancestor(isAnchor);","			","","			if (oAnchor) {","","				//	Need to pass \"2\" as a second argument to \"getAttribute\" for ","				//	IE otherwise IE will return a fully qualified URL for the ","				//	value of the \"href\" attribute.","				//	http://msdn.microsoft.com/en-us/library/ms536429(VS.85).aspx","","				sHref = oAnchor.getAttribute(\"href\", 2);","				nHashPos = sHref.indexOf(\"#\");","				nLen = sHref.length;","","				if (nHashPos === 0 && nLen > 1) {","","					sId = sHref.substr(1, nLen);","					oSubmenu = oMenuLabel.next();","","					if (oSubmenu && (oSubmenu.get(ID) === sId)) {","","						if (sType === MOUSEDOWN || sType === KEYDOWN) {","							","							if ((UA.opera || UA.gecko || UA.ie) && sType === KEYDOWN && !menuNav._preventClickHandle) {","","								//	Prevent the browser from following the URL of ","								//	the anchor element","","								menuNav._preventClickHandle = menuNav._rootMenu.on(\"click\", function (event) {","","									event.preventDefault();","","									menuNav._preventClickHandle.detach();","									menuNav._preventClickHandle = null;","","								});","","							}","							","							if (sType == MOUSEDOWN) {","","								//	Prevent the target from getting focused by ","								//	default, since the element to be focused will","								//	be determined by weather or not the submenu","								//	is visible.","								event.preventDefault();","","								//	FocusManager will attempt to focus any ","								//	descendant that is the target of the mousedown","								//	event.  Since we want to explicitly control ","	 							//	where focus is going, we need to call ","								//	\"stopImmediatePropagation\" to stop the ","								//	FocusManager from doing its thing.","								event.stopImmediatePropagation();	","","								//	The \"_focusItem\" method relies on the ","								//	\"_hasFocus\" property being set to true.  The","								//	\"_hasFocus\" property is normally set via a ","								//	\"focus\" event listener, but since we've ","								//	blocked focus from happening, we need to set ","								//	this property manually.","								menuNav._hasFocus = true;","","							}","","								","							if (menuNav._isRoot(getParentMenu(oTarget))) {	//	Event target is a submenu label in the root menu","							","								//	Menu label toggle functionality","							","								if (hasVisibleSubmenu(oMenuLabel)) {","							","									menuNav._hideMenu(oSubmenu);","									menuNav._focusItem(oMenuLabel);	","									menuNav._setActiveItem(oMenuLabel);","									","								}","								else {","							","									menuNav._hideAllSubmenus(menuNav._rootMenu);","									menuNav._showMenu(oSubmenu);","","									menuNav._focusItem(getFirstItem(oSubmenu));","									menuNav._setActiveItem(getFirstItem(oSubmenu));","									","								}","							","							}","							else {	//	Event target is a submenu label within a submenu","							","								if (menuNav._activeItem == oMenuLabel) {","							","									menuNav._showMenu(oSubmenu);","									menuNav._focusItem(getFirstItem(oSubmenu));","									menuNav._setActiveItem(getFirstItem(oSubmenu));										","							","								}","								else {","							","									if (!oMenuLabel._clickHandle) {","","										oMenuLabel._clickHandle = oMenuLabel.on(\"click\", function () {","","											menuNav._hideAllSubmenus(menuNav._rootMenu);","","											menuNav._hasFocus = false;","											menuNav._clearActiveItem();","","","											oMenuLabel._clickHandle.detach();","											","											oMenuLabel._clickHandle = null;","","										});","										","									}","									","								}","								","							}","","						}","","","						if (sType === CLICK) {","						","							//	Prevent the browser from following the URL of ","							//	the anchor element","							","							event.preventDefault();","						","						}","					","					}","				","				}				","","","			}","		","		}","	","	},","	","","	/**","	* @method _onKeyPress","	* @description \"keypress\" event handler for the menu.","	* @protected","	* @param {Object} event Object representing the DOM event.","	*/","	_onKeyPress: function (event) {","	","		switch (event.keyCode) {","","			case 37:	//	left arrow","			case 38:	//	up arrow","			case 39:	//	right arrow","			case 40:	//	down arrow","","				//	Prevent the browser from scrolling the window","","				event.preventDefault();","","			break;","","		}						","","	},	","","","	/**","	* @method _onKeyDown","	* @description \"keydown\" event handler for the menu.","	* @protected","	* @param {Object} event Object representing the DOM event.","	*/","	_onKeyDown: function (event) {","","		var menuNav = this,","			oActiveItem = menuNav._activeItem,","			oTarget = event.target,","			oActiveMenu = getParentMenu(oTarget),","			oSubmenu;","","		if (oActiveMenu) {","","			menuNav._activeMenu = oActiveMenu;","","			if (isHorizontalMenu(oActiveMenu)) {","				menuNav._onHorizontalMenuKeyDown(event);","			}","			else {","				menuNav._onVerticalMenuKeyDown(event);","			}","","","			if (event.keyCode === 27) {","","				if (!menuNav._isRoot(oActiveMenu)) {","","					if (UA.opera) {","						later(0, menuNav, function () {","							menuNav._hideMenu(oActiveMenu, true);","						});						","					}","					else {","						menuNav._hideMenu(oActiveMenu, true);						","					}","","					event.stopPropagation();","					menuNav._blockMouseEvent = UA.gecko ? true : false;","","				}","				else if (oActiveItem) {","","					if (isMenuLabel(oActiveItem) && ","							hasVisibleSubmenu(oActiveItem)) {","					","						oSubmenu = oActiveItem.next();","","						if (oSubmenu) {","							menuNav._hideMenu(oSubmenu);","						}","","					}","					else {","","						menuNav._focusManager.blur();","","						//	This is necessary for Webkit since blurring the ","						//	active menuitem won't result in the document ","						//	gaining focus, meaning the that _onDocFocus ","						//	listener won't clear the active menuitem.","","						menuNav._clearActiveItem();	","						","						menuNav._hasFocus = false;","","					}","","				}","			","			}","		","		}","	","	},","	","	/**","	* @method _onDocMouseDown","	* @description \"mousedown\" event handler for the owner document of ","	* the menu.","	* @protected","	* @param {Object} event Object representing the DOM event.","	*/","	_onDocMouseDown: function (event) {","","		var menuNav = this,","			oRoot = menuNav._rootMenu,","			oTarget = event.target;","","","		if (!(oRoot.compareTo(oTarget) || oRoot.contains(oTarget))) {","","			menuNav._hideAllSubmenus(oRoot);","","			//	Document doesn't receive focus in Webkit when the user mouses ","			//	down on it, so the \"_hasFocus\" property won't get set to the ","			//	correct value.  The following line corrects the problem.","","			if (UA.webkit) {","				menuNav._hasFocus = false;","				menuNav._clearActiveItem();","			}","","		}","","	}","	","});","","","Y.namespace('Plugin');","","Y.Plugin.NodeMenuNav = NodeMenuNav;","","","}, '3.7.3', {\"requires\": [\"node\", \"classnamemanager\", \"plugin\", \"node-focusmanager\"], \"skinnable\": true});"];
_yuitest_coverage["build/node-menunav/node-menunav.js"].lines = {"1":0,"87":0,"158":0,"160":0,"163":0,"164":0,"165":0,"168":0,"173":0,"175":0,"177":0,"178":0,"181":0,"186":0,"188":0,"190":0,"191":0,"194":0,"199":0,"201":0,"206":0,"208":0,"213":0,"215":0,"220":0,"222":0,"227":0,"229":0,"234":0,"236":0,"238":0,"240":0,"241":0,"244":0,"245":0,"250":0,"255":0,"257":0,"262":0,"264":0,"269":0,"271":0,"273":0,"274":0,"277":0,"282":0,"284":0,"286":0,"288":0,"289":0,"292":0,"298":0,"303":0,"305":0,"307":0,"308":0,"312":0,"317":0,"319":0,"324":0,"326":0,"331":0,"333":0,"339":0,"341":0,"353":0,"355":0,"359":0,"360":0,"371":0,"400":0,"406":0,"425":0,"431":0,"433":0,"435":0,"437":0,"439":0,"441":0,"442":0,"444":0,"445":0,"446":0,"449":0,"450":0,"452":0,"454":0,"456":0,"458":0,"459":0,"461":0,"462":0,"465":0,"467":0,"468":0,"471":0,"472":0,"560":0,"693":0,"699":0,"701":0,"703":0,"707":0,"712":0,"713":0,"714":0,"715":0,"716":0,"717":0,"718":0,"719":0,"721":0,"723":0,"724":0,"726":0,"728":0,"737":0,"739":0,"741":0,"742":0,"745":0,"749":0,"768":0,"782":0,"787":0,"788":0,"790":0,"791":0,"794":0,"797":0,"809":0,"812":0,"813":0,"816":0,"830":0,"832":0,"834":0,"836":0,"838":0,"853":0,"857":0,"859":0,"860":0,"862":0,"863":0,"864":0,"867":0,"882":0,"887":0,"888":0,"892":0,"893":0,"896":0,"899":0,"901":0,"903":0,"905":0,"906":0,"912":0,"922":0,"928":0,"929":0,"945":0,"949":0,"952":0,"953":0,"954":0,"957":0,"959":0,"960":0,"967":0,"969":0,"971":0,"972":0,"986":0,"988":0,"990":0,"1004":0,"1007":0,"1008":0,"1009":0,"1022":0,"1026":0,"1027":0,"1028":0,"1042":0,"1052":0,"1054":0,"1057":0,"1062":0,"1063":0,"1068":0,"1070":0,"1076":0,"1078":0,"1081":0,"1083":0,"1086":0,"1089":0,"1094":0,"1095":0,"1096":0,"1116":0,"1119":0,"1136":0,"1138":0,"1139":0,"1140":0,"1154":0,"1160":0,"1162":0,"1164":0,"1172":0,"1174":0,"1175":0,"1176":0,"1177":0,"1187":0,"1189":0,"1191":0,"1192":0,"1200":0,"1202":0,"1203":0,"1205":0,"1206":0,"1208":0,"1210":0,"1226":0,"1229":0,"1230":0,"1231":0,"1234":0,"1240":0,"1241":0,"1243":0,"1244":0,"1249":0,"1250":0,"1264":0,"1268":0,"1270":0,"1273":0,"1274":0,"1290":0,"1298":0,"1300":0,"1303":0,"1305":0,"1307":0,"1309":0,"1319":0,"1321":0,"1323":0,"1324":0,"1345":0,"1354":0,"1356":0,"1357":0,"1359":0,"1361":0,"1363":0,"1364":0,"1365":0,"1373":0,"1374":0,"1377":0,"1379":0,"1390":0,"1391":0,"1396":0,"1413":0,"1422":0,"1423":0,"1426":0,"1428":0,"1430":0,"1438":0,"1443":0,"1452":0,"1454":0,"1472":0,"1479":0,"1480":0,"1483":0,"1485":0,"1501":0,"1514":0,"1526":0,"1530":0,"1532":0,"1534":0,"1535":0,"1536":0,"1538":0,"1540":0,"1542":0,"1545":0,"1547":0,"1548":0,"1549":0,"1554":0,"1555":0,"1562":0,"1563":0,"1570":0,"1571":0,"1575":0,"1577":0,"1581":0,"1583":0,"1585":0,"1587":0,"1588":0,"1589":0,"1594":0,"1596":0,"1597":0,"1598":0,"1600":0,"1602":0,"1604":0,"1606":0,"1608":0,"1610":0,"1611":0,"1612":0,"1617":0,"1618":0,"1625":0,"1626":0,"1634":0,"1636":0,"1641":0,"1645":0,"1660":0,"1669":0,"1671":0,"1673":0,"1675":0,"1677":0,"1679":0,"1680":0,"1681":0,"1685":0,"1692":0,"1696":0,"1714":0,"1720":0,"1722":0,"1737":0,"1745":0,"1746":0,"1750":0,"1751":0,"1752":0,"1753":0,"1756":0,"1758":0,"1760":0,"1761":0,"1763":0,"1765":0,"1767":0,"1768":0,"1774":0,"1776":0,"1778":0,"1779":0,"1783":0,"1785":0,"1787":0,"1788":0,"1805":0,"1816":0,"1820":0,"1821":0,"1822":0,"1823":0,"1824":0,"1827":0,"1829":0,"1831":0,"1832":0,"1836":0,"1838":0,"1840":0,"1841":0,"1846":0,"1848":0,"1850":0,"1854":0,"1861":0,"1863":0,"1865":0,"1866":0,"1882":0,"1894":0,"1896":0,"1899":0,"1906":0,"1907":0,"1908":0,"1910":0,"1912":0,"1913":0,"1915":0,"1917":0,"1919":0,"1924":0,"1926":0,"1928":0,"1929":0,"1935":0,"1941":0,"1949":0,"1957":0,"1962":0,"1966":0,"1968":0,"1969":0,"1970":0,"1975":0,"1976":0,"1978":0,"1979":0,"1986":0,"1988":0,"1989":0,"1990":0,"1995":0,"1997":0,"1999":0,"2001":0,"2002":0,"2005":0,"2007":0,"2020":0,"2025":0,"2049":0,"2058":0,"2060":0,"2075":0,"2081":0,"2083":0,"2085":0,"2086":0,"2089":0,"2093":0,"2095":0,"2097":0,"2098":0,"2099":0,"2103":0,"2106":0,"2107":0,"2110":0,"2112":0,"2115":0,"2117":0,"2118":0,"2124":0,"2131":0,"2133":0,"2154":0,"2159":0,"2161":0,"2167":0,"2168":0,"2169":0,"2179":0,"2181":0};
_yuitest_coverage["build/node-menunav/node-menunav.js"].functions = {"getPreviousSibling:158":0,"getNextSibling:173":0,"isAnchor:186":0,"isMenuItem:199":0,"isMenuLabel:206":0,"isHorizontalMenu:213":0,"hasVisibleSubmenu:220":0,"getItemAnchor:227":0,"getNodeWithClass:234":0,"getParentMenu:255":0,"getMenu:262":0,"getMenuItem:269":0,"getMenuLabel:282":0,"getItem:303":0,"getFirstItem:317":0,"getActiveClass:324":0,"handleMouseOverForNode:331":0,"handleMouseOutForNode:339":0,"NodeMenuNav:353":0,"(anonymous 2):439":0,"setter:423":0,"initializer:691":0,"(anonymous 3):741":0,"destructor:735":0,"_isRoot:766":0,"_getTopmostSubmenu:780":0,"_clearActiveItem:807":0,"_setActiveItem:828":0,"_focusItem:851":0,"_showMenu:880":0,"_hideMenu:943":0,"(anonymous 4):988":0,"_hideAllSubmenus:984":0,"_cancelShowSubmenuTimer:1002":0,"_cancelHideSubmenuTimer:1020":0,"_initFocusManager:1040":0,"_onActiveDescendantChange:1114":0,"_afterActiveDescendantChange:1134":0,"_onDocFocus:1152":0,"_onMenuMouseOver:1224":0,"_hideAndFocusLabel:1262":0,"_onMenuMouseOut:1288":0,"showSubmenu:1354":0,"(anonymous 5):1390":0,"_onMenuLabelMouseOver:1343":0,"_onMenuLabelMouseOut:1411":0,"_onMenuItemMouseOver:1470":0,"_onMenuItemMouseOut:1499":0,"_onVerticalMenuKeyDown:1512":0,"_onHorizontalMenuKeyDown:1658":0,"(anonymous 6):1720":0,"_onMouseMove:1712":0,"_onMouseOver:1735":0,"_onMouseOut:1803":0,"(anonymous 7):1924":0,"(anonymous 8):1997":0,"_toggleSubmenuDisplay:1880":0,"_onKeyPress:2047":0,"(anonymous 9):2098":0,"_onKeyDown:2073":0,"_onDocMouseDown:2152":0,"(anonymous 1):1":0};
_yuitest_coverage["build/node-menunav/node-menunav.js"].coveredLines = 472;
_yuitest_coverage["build/node-menunav/node-menunav.js"].coveredFunctions = 62;
_yuitest_coverline("build/node-menunav/node-menunav.js", 1);
YUI.add('node-menunav', function (Y, NAME) {

/**
* <p>The MenuNav Node Plugin makes it easy to transform existing list-based 
* markup into traditional, drop down navigational menus that are both accessible 
* and easy to customize, and only require a small set of dependencies.</p>
* 
* 
* <p>To use the MenuNav Node Plugin, simply pass a reference to the plugin to a 
* Node instance's <code>plug</code> method.</p>
* 
* <p>
* <code>
* &#60;script type="text/javascript"&#62; <br>
* <br>
* 		//	Call the "use" method, passing in "node-menunav".  This will <br>
* 		//	load the script and CSS for the MenuNav Node Plugin and all of <br>
* 		//	the required dependencies. <br>
* <br>
* 		YUI().use("node-menunav", function(Y) { <br>
* <br>
* 			//	Use the "contentready" event to initialize the menu when <br>
* 			//	the subtree of element representing the root menu <br>
* 			//	(&#60;div id="menu-1"&#62;) is ready to be scripted. <br>
* <br>
* 			Y.on("contentready", function () { <br>
* <br>
* 				//	The scope of the callback will be a Node instance <br>
* 				//	representing the root menu (&#60;div id="menu-1"&#62;). <br>
* 				//	Therefore, since "this" represents a Node instance, it <br>
* 				//	is possible to just call "this.plug" passing in a <br>
*				//	reference to the MenuNav Node Plugin. <br>
* <br>
* 				this.plug(Y.Plugin.NodeMenuNav); <br>
* <br>
* 			}, "#menu-1"); <br>
* <br>		
* 		}); <br>
* <br>	
* 	&#60;/script&#62; <br>
* </code>
* </p>
*
* <p>The MenuNav Node Plugin has several configuration properties that can be 
* set via an object literal that is passed as a second argument to a Node 
* instance's <code>plug</code> method.
* </p>
*
* <p>
* <code>
* &#60;script type="text/javascript"&#62; <br>
* <br>
* 		//	Call the "use" method, passing in "node-menunav".  This will <br>
* 		//	load the script and CSS for the MenuNav Node Plugin and all of <br>
* 		//	the required dependencies. <br>
* <br>
* 		YUI().use("node-menunav", function(Y) { <br>
* <br>
* 			//	Use the "contentready" event to initialize the menu when <br>
* 			//	the subtree of element representing the root menu <br>
* 			//	(&#60;div id="menu-1"&#62;) is ready to be scripted. <br>
* <br>
* 			Y.on("contentready", function () { <br>
* <br>
* 				//	The scope of the callback will be a Node instance <br>
* 				//	representing the root menu (&#60;div id="menu-1"&#62;). <br>
* 				//	Therefore, since "this" represents a Node instance, it <br>
* 				//	is possible to just call "this.plug" passing in a <br>
*				//	reference to the MenuNav Node Plugin. <br>
* <br>
* 				this.plug(Y.Plugin.NodeMenuNav, { mouseOutHideDelay: 1000 });
* <br><br>
* 			}, "#menu-1"); <br>
* <br>		
* 		}); <br>
* <br>	
* 	&#60;/script&#62; <br>
* </code>
* </p>
* 
* @module node-menunav
*/


	//	Util shortcuts

_yuitest_coverfunc("build/node-menunav/node-menunav.js", "(anonymous 1)", 1);
_yuitest_coverline("build/node-menunav/node-menunav.js", 87);
var UA = Y.UA,
	later = Y.later,
	getClassName = Y.ClassNameManager.getClassName,



	//	Frequently used strings

	MENU = "menu",
	MENUITEM = "menuitem",
	HIDDEN = "hidden",
	PARENT_NODE = "parentNode",
	CHILDREN = "children",
	OFFSET_HEIGHT = "offsetHeight",
	OFFSET_WIDTH = "offsetWidth",
	PX = "px",
	ID = "id",
	PERIOD = ".",
	HANDLED_MOUSEOUT = "handledMouseOut",
	HANDLED_MOUSEOVER = "handledMouseOver",
	ACTIVE = "active",
	LABEL = "label",
	LOWERCASE_A = "a",
	MOUSEDOWN = "mousedown",
	KEYDOWN = "keydown",
	CLICK = "click",
	EMPTY_STRING = "",
	FIRST_OF_TYPE = "first-of-type",
	ROLE = "role",
	PRESENTATION = "presentation",
	DESCENDANTS = "descendants",
	UI = "UI",
	ACTIVE_DESCENDANT = "activeDescendant",
	USE_ARIA = "useARIA",
	ARIA_HIDDEN = "aria-hidden",
	CONTENT = "content",
	HOST = "host",
	ACTIVE_DESCENDANT_CHANGE = ACTIVE_DESCENDANT + "Change",


	//	Attribute keys
	
	AUTO_SUBMENU_DISPLAY = "autoSubmenuDisplay",
	MOUSEOUT_HIDE_DELAY = "mouseOutHideDelay",


	//	CSS class names

	CSS_MENU = getClassName(MENU),
	CSS_MENU_HIDDEN = getClassName(MENU, HIDDEN),
	CSS_MENU_HORIZONTAL = getClassName(MENU, "horizontal"),
	CSS_MENU_LABEL = getClassName(MENU, LABEL),
	CSS_MENU_LABEL_ACTIVE = getClassName(MENU, LABEL, ACTIVE),
	CSS_MENU_LABEL_MENUVISIBLE = getClassName(MENU, LABEL, (MENU + "visible")),
	CSS_MENUITEM = getClassName(MENUITEM),
	CSS_MENUITEM_ACTIVE = getClassName(MENUITEM, ACTIVE),


	//	CSS selectors
	
	MENU_SELECTOR = PERIOD + CSS_MENU,
	MENU_TOGGLE_SELECTOR = (PERIOD + getClassName(MENU, "toggle")),
    MENU_CONTENT_SELECTOR = PERIOD + getClassName(MENU, CONTENT),
    MENU_LABEL_SELECTOR = PERIOD + CSS_MENU_LABEL,

	STANDARD_QUERY = ">" + MENU_CONTENT_SELECTOR + ">ul>li>a",
	EXTENDED_QUERY = ">" + MENU_CONTENT_SELECTOR + ">ul>li>" + MENU_LABEL_SELECTOR + ">a:first-child";

//	Utility functions


_yuitest_coverline("build/node-menunav/node-menunav.js", 158);
var getPreviousSibling = function (node) {

	_yuitest_coverfunc("build/node-menunav/node-menunav.js", "getPreviousSibling", 158);
_yuitest_coverline("build/node-menunav/node-menunav.js", 160);
var oPrevious = node.previous(),
		oChildren;

	_yuitest_coverline("build/node-menunav/node-menunav.js", 163);
if (!oPrevious) {
		_yuitest_coverline("build/node-menunav/node-menunav.js", 164);
oChildren = node.get(PARENT_NODE).get(CHILDREN);
		_yuitest_coverline("build/node-menunav/node-menunav.js", 165);
oPrevious = oChildren.item(oChildren.size() - 1);
	}
	
	_yuitest_coverline("build/node-menunav/node-menunav.js", 168);
return oPrevious;

};


_yuitest_coverline("build/node-menunav/node-menunav.js", 173);
var getNextSibling = function (node) {

	_yuitest_coverfunc("build/node-menunav/node-menunav.js", "getNextSibling", 173);
_yuitest_coverline("build/node-menunav/node-menunav.js", 175);
var oNext = node.next();

	_yuitest_coverline("build/node-menunav/node-menunav.js", 177);
if (!oNext) {
		_yuitest_coverline("build/node-menunav/node-menunav.js", 178);
oNext = node.get(PARENT_NODE).get(CHILDREN).item(0);		
	}
	
	_yuitest_coverline("build/node-menunav/node-menunav.js", 181);
return oNext;

};


_yuitest_coverline("build/node-menunav/node-menunav.js", 186);
var isAnchor = function (node) {
	
	_yuitest_coverfunc("build/node-menunav/node-menunav.js", "isAnchor", 186);
_yuitest_coverline("build/node-menunav/node-menunav.js", 188);
var bReturnVal = false;
	
	_yuitest_coverline("build/node-menunav/node-menunav.js", 190);
if (node) {
		_yuitest_coverline("build/node-menunav/node-menunav.js", 191);
bReturnVal = node.get("nodeName").toLowerCase() === LOWERCASE_A;
	}
	
	_yuitest_coverline("build/node-menunav/node-menunav.js", 194);
return bReturnVal;
	
};


_yuitest_coverline("build/node-menunav/node-menunav.js", 199);
var isMenuItem = function (node) {

	_yuitest_coverfunc("build/node-menunav/node-menunav.js", "isMenuItem", 199);
_yuitest_coverline("build/node-menunav/node-menunav.js", 201);
return node.hasClass(CSS_MENUITEM);

};


_yuitest_coverline("build/node-menunav/node-menunav.js", 206);
var isMenuLabel = function (node) {

	_yuitest_coverfunc("build/node-menunav/node-menunav.js", "isMenuLabel", 206);
_yuitest_coverline("build/node-menunav/node-menunav.js", 208);
return node.hasClass(CSS_MENU_LABEL);

};


_yuitest_coverline("build/node-menunav/node-menunav.js", 213);
var isHorizontalMenu = function (menu) {

	_yuitest_coverfunc("build/node-menunav/node-menunav.js", "isHorizontalMenu", 213);
_yuitest_coverline("build/node-menunav/node-menunav.js", 215);
return menu.hasClass(CSS_MENU_HORIZONTAL);

};


_yuitest_coverline("build/node-menunav/node-menunav.js", 220);
var hasVisibleSubmenu = function (menuLabel) {

	_yuitest_coverfunc("build/node-menunav/node-menunav.js", "hasVisibleSubmenu", 220);
_yuitest_coverline("build/node-menunav/node-menunav.js", 222);
return menuLabel.hasClass(CSS_MENU_LABEL_MENUVISIBLE);

};


_yuitest_coverline("build/node-menunav/node-menunav.js", 227);
var getItemAnchor = function (node) {

	_yuitest_coverfunc("build/node-menunav/node-menunav.js", "getItemAnchor", 227);
_yuitest_coverline("build/node-menunav/node-menunav.js", 229);
return isAnchor(node) ? node : node.one(LOWERCASE_A);

};


_yuitest_coverline("build/node-menunav/node-menunav.js", 234);
var getNodeWithClass = function (node, className, searchAncestors) {

	_yuitest_coverfunc("build/node-menunav/node-menunav.js", "getNodeWithClass", 234);
_yuitest_coverline("build/node-menunav/node-menunav.js", 236);
var oItem;
	
	_yuitest_coverline("build/node-menunav/node-menunav.js", 238);
if (node) {
		
		_yuitest_coverline("build/node-menunav/node-menunav.js", 240);
if (node.hasClass(className)) {
			_yuitest_coverline("build/node-menunav/node-menunav.js", 241);
oItem = node;
		}
		
		_yuitest_coverline("build/node-menunav/node-menunav.js", 244);
if (!oItem && searchAncestors) {
			_yuitest_coverline("build/node-menunav/node-menunav.js", 245);
oItem = node.ancestor((PERIOD + className));
		}
	
	}
	
	_yuitest_coverline("build/node-menunav/node-menunav.js", 250);
return oItem;

};


_yuitest_coverline("build/node-menunav/node-menunav.js", 255);
var getParentMenu = function (node) {

	_yuitest_coverfunc("build/node-menunav/node-menunav.js", "getParentMenu", 255);
_yuitest_coverline("build/node-menunav/node-menunav.js", 257);
return node.ancestor(MENU_SELECTOR);
	
};


_yuitest_coverline("build/node-menunav/node-menunav.js", 262);
var getMenu = function (node, searchAncestors) {

	_yuitest_coverfunc("build/node-menunav/node-menunav.js", "getMenu", 262);
_yuitest_coverline("build/node-menunav/node-menunav.js", 264);
return getNodeWithClass(node, CSS_MENU, searchAncestors);

};


_yuitest_coverline("build/node-menunav/node-menunav.js", 269);
var getMenuItem = function (node, searchAncestors) {

	_yuitest_coverfunc("build/node-menunav/node-menunav.js", "getMenuItem", 269);
_yuitest_coverline("build/node-menunav/node-menunav.js", 271);
var oItem;
	
	_yuitest_coverline("build/node-menunav/node-menunav.js", 273);
if (node) {
		_yuitest_coverline("build/node-menunav/node-menunav.js", 274);
oItem = getNodeWithClass(node, CSS_MENUITEM, searchAncestors);
	}
	
	_yuitest_coverline("build/node-menunav/node-menunav.js", 277);
return oItem;

};


_yuitest_coverline("build/node-menunav/node-menunav.js", 282);
var getMenuLabel = function (node, searchAncestors) {

	_yuitest_coverfunc("build/node-menunav/node-menunav.js", "getMenuLabel", 282);
_yuitest_coverline("build/node-menunav/node-menunav.js", 284);
var oItem;
	
	_yuitest_coverline("build/node-menunav/node-menunav.js", 286);
if (node) {
	
		_yuitest_coverline("build/node-menunav/node-menunav.js", 288);
if (searchAncestors) {
			_yuitest_coverline("build/node-menunav/node-menunav.js", 289);
oItem = getNodeWithClass(node, CSS_MENU_LABEL, searchAncestors);
		}
		else {
			_yuitest_coverline("build/node-menunav/node-menunav.js", 292);
oItem = getNodeWithClass(node, CSS_MENU_LABEL) || 
				node.one((PERIOD + CSS_MENU_LABEL));
		}
		
	}
	
	_yuitest_coverline("build/node-menunav/node-menunav.js", 298);
return oItem;

};


_yuitest_coverline("build/node-menunav/node-menunav.js", 303);
var getItem = function (node, searchAncestors) {

	_yuitest_coverfunc("build/node-menunav/node-menunav.js", "getItem", 303);
_yuitest_coverline("build/node-menunav/node-menunav.js", 305);
var oItem;
	
	_yuitest_coverline("build/node-menunav/node-menunav.js", 307);
if (node) {
		_yuitest_coverline("build/node-menunav/node-menunav.js", 308);
oItem = getMenuItem(node, searchAncestors) || 
			getMenuLabel(node, searchAncestors);
	}
	
	_yuitest_coverline("build/node-menunav/node-menunav.js", 312);
return oItem;	

};


_yuitest_coverline("build/node-menunav/node-menunav.js", 317);
var getFirstItem = function (menu) {
	
	_yuitest_coverfunc("build/node-menunav/node-menunav.js", "getFirstItem", 317);
_yuitest_coverline("build/node-menunav/node-menunav.js", 319);
return getItem(menu.one("li"));

};


_yuitest_coverline("build/node-menunav/node-menunav.js", 324);
var getActiveClass = function (node) {

	_yuitest_coverfunc("build/node-menunav/node-menunav.js", "getActiveClass", 324);
_yuitest_coverline("build/node-menunav/node-menunav.js", 326);
return isMenuItem(node) ? CSS_MENUITEM_ACTIVE : CSS_MENU_LABEL_ACTIVE;

};


_yuitest_coverline("build/node-menunav/node-menunav.js", 331);
var handleMouseOverForNode = function (node, target) {

	_yuitest_coverfunc("build/node-menunav/node-menunav.js", "handleMouseOverForNode", 331);
_yuitest_coverline("build/node-menunav/node-menunav.js", 333);
return node && !node[HANDLED_MOUSEOVER] && 
		(node.compareTo(target) || node.contains(target));

};


_yuitest_coverline("build/node-menunav/node-menunav.js", 339);
var handleMouseOutForNode = function (node, relatedTarget) {

	_yuitest_coverfunc("build/node-menunav/node-menunav.js", "handleMouseOutForNode", 339);
_yuitest_coverline("build/node-menunav/node-menunav.js", 341);
return node && !node[HANDLED_MOUSEOUT] && 
		(!node.compareTo(relatedTarget) && !node.contains(relatedTarget));

};

/**
* The NodeMenuNav class is a plugin for a Node instance.  The class is used via  
* the <a href="Node.html#method_plug"><code>plug</code></a> method of Node and 
* should not be instantiated directly.
* @namespace plugin
* @class NodeMenuNav
*/
_yuitest_coverline("build/node-menunav/node-menunav.js", 353);
var NodeMenuNav = function () {

	_yuitest_coverfunc("build/node-menunav/node-menunav.js", "NodeMenuNav", 353);
_yuitest_coverline("build/node-menunav/node-menunav.js", 355);
NodeMenuNav.superclass.constructor.apply(this, arguments);

};

_yuitest_coverline("build/node-menunav/node-menunav.js", 359);
NodeMenuNav.NAME = "nodeMenuNav";
_yuitest_coverline("build/node-menunav/node-menunav.js", 360);
NodeMenuNav.NS = "menuNav";


/** 
* @property SHIM_TEMPLATE_TITLE
* @description String representing the value for the <code>title</code> 
* attribute for the shim used to prevent <code>&#60;select&#62;</code> elements 
* from poking through menus in IE 6.
* @default "Menu Stacking Shim"
* @type String
*/
_yuitest_coverline("build/node-menunav/node-menunav.js", 371);
NodeMenuNav.SHIM_TEMPLATE_TITLE = "Menu Stacking Shim";


/** 
* @property SHIM_TEMPLATE
* @description String representing the HTML used to create the 
* <code>&#60;iframe&#62;</code> shim used to prevent 
* <code>&#60;select&#62;</code> elements from poking through menus in IE 6.
* @default &#34;&#60;iframe frameborder=&#34;0&#34; tabindex=&#34;-1&#34; 
* class=&#34;yui-shim&#34; title=&#34;Menu Stacking Shim&#34; 
* src=&#34;javascript:false;&#34;&#62;&#60;/iframe&#62;&#34;
* @type String
*/

//	<iframe> shim notes:
//
//	1) Need to set the "frameBorder" property to 0 to suppress the default 
//	<iframe> border in IE.  (Setting the CSS "border" property alone doesn't  
//	suppress it.) 
//
//	2) The "src" attribute of the <iframe> is set to "javascript:false;" so 
//	that it won't load a page inside it, preventing the secure/nonsecure 
//	warning in IE when using HTTPS.
//
//	3) Since the role of the <iframe> shim is completely presentational, its 
//	"tabindex" attribute is set to "-1" and its title attribute is set to 
//	"Menu Stacking Shim".  Both strategies help users of screen readers to 
//	avoid mistakenly interacting with the <iframe> shim.

_yuitest_coverline("build/node-menunav/node-menunav.js", 400);
NodeMenuNav.SHIM_TEMPLATE = '<iframe frameborder="0" tabindex="-1" class="' + 
							getClassName("shim") + 
							'" title="' + NodeMenuNav.SHIM_TEMPLATE_TITLE + 
							'" src="javascript:false;"></iframe>';


_yuitest_coverline("build/node-menunav/node-menunav.js", 406);
NodeMenuNav.ATTRS = {

	/**
	* Boolean indicating if use of the WAI-ARIA Roles and States should be 
	* enabled for the menu.
	*
	* @attribute useARIA
	* @readOnly
	* @writeOnce	
	* @default true
	* @type boolean
	*/
	useARIA: {
		
		value: true,
		writeOnce: true,
		lazyAdd: false,
		setter: function (value) {

			_yuitest_coverfunc("build/node-menunav/node-menunav.js", "setter", 423);
_yuitest_coverline("build/node-menunav/node-menunav.js", 425);
var oMenu = this.get(HOST),
				oMenuLabel,
				oMenuToggle,
				oSubmenu,
				sID;

			_yuitest_coverline("build/node-menunav/node-menunav.js", 431);
if (value) {

				_yuitest_coverline("build/node-menunav/node-menunav.js", 433);
oMenu.set(ROLE, MENU);

				_yuitest_coverline("build/node-menunav/node-menunav.js", 435);
oMenu.all("ul,li," + MENU_CONTENT_SELECTOR).set(ROLE, PRESENTATION);

				_yuitest_coverline("build/node-menunav/node-menunav.js", 437);
oMenu.all((PERIOD + getClassName(MENUITEM, CONTENT))).set(ROLE, MENUITEM);

				_yuitest_coverline("build/node-menunav/node-menunav.js", 439);
oMenu.all((PERIOD + CSS_MENU_LABEL)).each(function (node) {

					_yuitest_coverfunc("build/node-menunav/node-menunav.js", "(anonymous 2)", 439);
_yuitest_coverline("build/node-menunav/node-menunav.js", 441);
oMenuLabel = node;
					_yuitest_coverline("build/node-menunav/node-menunav.js", 442);
oMenuToggle = node.one(MENU_TOGGLE_SELECTOR);

					_yuitest_coverline("build/node-menunav/node-menunav.js", 444);
if (oMenuToggle) {
						_yuitest_coverline("build/node-menunav/node-menunav.js", 445);
oMenuToggle.set(ROLE, PRESENTATION);
						_yuitest_coverline("build/node-menunav/node-menunav.js", 446);
oMenuLabel = oMenuToggle.previous();
					}

					_yuitest_coverline("build/node-menunav/node-menunav.js", 449);
oMenuLabel.set(ROLE, MENUITEM);
					_yuitest_coverline("build/node-menunav/node-menunav.js", 450);
oMenuLabel.set("aria-haspopup", true);

					_yuitest_coverline("build/node-menunav/node-menunav.js", 452);
oSubmenu = node.next();

					_yuitest_coverline("build/node-menunav/node-menunav.js", 454);
if (oSubmenu) {

						_yuitest_coverline("build/node-menunav/node-menunav.js", 456);
oSubmenu.set(ROLE, MENU);

						_yuitest_coverline("build/node-menunav/node-menunav.js", 458);
oMenuLabel = oSubmenu.previous();
						_yuitest_coverline("build/node-menunav/node-menunav.js", 459);
oMenuToggle = oMenuLabel.one(MENU_TOGGLE_SELECTOR);

						_yuitest_coverline("build/node-menunav/node-menunav.js", 461);
if (oMenuToggle) {
							_yuitest_coverline("build/node-menunav/node-menunav.js", 462);
oMenuLabel = oMenuToggle;
						}

						_yuitest_coverline("build/node-menunav/node-menunav.js", 465);
sID = Y.stamp(oMenuLabel);

						_yuitest_coverline("build/node-menunav/node-menunav.js", 467);
if (!oMenuLabel.get(ID)) {
							_yuitest_coverline("build/node-menunav/node-menunav.js", 468);
oMenuLabel.set(ID, sID);
						}

						_yuitest_coverline("build/node-menunav/node-menunav.js", 471);
oSubmenu.set("aria-labelledby", sID);
						_yuitest_coverline("build/node-menunav/node-menunav.js", 472);
oSubmenu.set(ARIA_HIDDEN, true);
						
					}

				});
				
			}

		}
		
	},


	/**
	* Boolean indicating if submenus are automatically made visible when the 
	* user mouses over the menu's items.
	*
	* @attribute autoSubmenuDisplay
	* @readOnly
	* @writeOnce	
	* @default true
	* @type boolean
	*/	
	autoSubmenuDisplay: {
		
		value: true,
		writeOnce: true
		
	},


	/**
	* Number indicating the time (in milliseconds) that should expire before a 
	* submenu is made visible when the user mouses over the menu's label.
	*
	* @attribute submenuShowDelay
	* @readOnly
	* @writeOnce	
	* @default 250
	* @type Number
	*/
	submenuShowDelay: {
		
		value: 250,
		writeOnce: true
		
	},


	/**
	* Number indicating the time (in milliseconds) that should expire before a 
	* submenu is hidden when the user mouses out of a menu label heading in the 
	* direction of a submenu.  
	*
	* @attribute submenuHideDelay
	* @readOnly
	* @writeOnce	
	* @default 250
	* @type Number
	*/
	submenuHideDelay: {
		
		value: 250,
		writeOnce: true
		
	},


	/**
	* Number indicating the time (in milliseconds) that should expire before a 
	* submenu is hidden when the user mouses out of it.
	* 
	* @attribute mouseOutHideDelay
	* @readOnly
	* @writeOnce	
	* @default 750
	* @type Number
	*/	
	mouseOutHideDelay: {
		
		value: 750,
		writeOnce: true
		
	}

};


_yuitest_coverline("build/node-menunav/node-menunav.js", 560);
Y.extend(NodeMenuNav, Y.Plugin.Base, {

	//	Protected properties

	/** 
	* @property _rootMenu
	* @description Node instance representing the root menu in the menu.
	* @default null
	* @protected
	* @type Node
	*/
	_rootMenu: null,	


	/** 
	* @property _activeItem
	* @description Node instance representing the menu's active descendent: 
	* the menuitem or menu label the user is currently interacting with.
	* @default null
	* @protected
	* @type Node
	*/
	_activeItem: null, 


	/** 
	* @property _activeMenu
	* @description Node instance representing the menu that is the parent of 
	* the menu's active descendent.
	* @default null
	* @protected
	* @type Node
	*/
	_activeMenu: null,


	/** 
	* @property _hasFocus
	* @description Boolean indicating if the menu has focus.
	* @default false
	* @protected
	* @type Boolean
	*/
	_hasFocus: false,


	//	In gecko-based browsers a mouseover and mouseout event will fire even 
	//	if a DOM element moves out from under the mouse without the user 
	//	actually moving the mouse.  This bug affects NodeMenuNav because the  
	//	user can hit the Esc key to hide a menu, and if the mouse is over the  
	//	menu when the user presses Esc, the _onMenuMouseOut handler will be 
	//	called.  To fix this bug the following flag (_blockMouseEvent) is used 
	// to block the code in the _onMenuMouseOut handler from executing.

	/** 
	* @property _blockMouseEvent
	* @description Boolean indicating whether or not to handle the 
	* "mouseover" event.
	* @default false
	* @protected
	* @type Boolean
	*/
	_blockMouseEvent: false,


	/** 
	* @property _currentMouseX
	* @description Number representing the current x coordinate of the mouse 
	* inside the menu.
	* @default 0
	* @protected
	* @type Number
	*/
	_currentMouseX: 0,


	/** 
	* @property _movingToSubmenu
	* @description Boolean indicating if the mouse is moving from a menu 
	* label to its corresponding submenu.
	* @default false
	* @protected
	* @type Boolean
	*/
	_movingToSubmenu: false,


	/** 
	* @property _showSubmenuTimer
	* @description Timer used to show a submenu.
	* @default null
	* @protected
	* @type Object
	*/
	_showSubmenuTimer: null,


	/** 
	* @property _hideSubmenuTimer
	* @description Timer used to hide a submenu.
	* @default null
	* @protected
	* @type Object
	*/
	_hideSubmenuTimer: null,


	/** 
	* @property _hideAllSubmenusTimer
	* @description Timer used to hide a all submenus.
	* @default null
	* @protected
	* @type Object
	*/
	_hideAllSubmenusTimer: null,


	/** 
	* @property _firstItem
	* @description Node instance representing the first item (menuitem or menu 
	* label) in the root menu of a menu.
	* @default null
	* @protected
	* @type Node
	*/
	_firstItem: null,


	//	Public methods


    initializer: function (config) {

		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "initializer", 691);
_yuitest_coverline("build/node-menunav/node-menunav.js", 693);
var menuNav = this,
			oRootMenu = this.get(HOST),
			aHandlers = [],
			oDoc;


		_yuitest_coverline("build/node-menunav/node-menunav.js", 699);
if (oRootMenu) {

			_yuitest_coverline("build/node-menunav/node-menunav.js", 701);
menuNav._rootMenu = oRootMenu;

			_yuitest_coverline("build/node-menunav/node-menunav.js", 703);
oRootMenu.all("ul:first-child").addClass(FIRST_OF_TYPE);

			//	Hide all visible submenus

			_yuitest_coverline("build/node-menunav/node-menunav.js", 707);
oRootMenu.all(MENU_SELECTOR).addClass(CSS_MENU_HIDDEN);


			//	Wire up all event handlers

			_yuitest_coverline("build/node-menunav/node-menunav.js", 712);
aHandlers.push(oRootMenu.on("mouseover", menuNav._onMouseOver, menuNav));
			_yuitest_coverline("build/node-menunav/node-menunav.js", 713);
aHandlers.push(oRootMenu.on("mouseout", menuNav._onMouseOut, menuNav));
			_yuitest_coverline("build/node-menunav/node-menunav.js", 714);
aHandlers.push(oRootMenu.on("mousemove", menuNav._onMouseMove, menuNav));
			_yuitest_coverline("build/node-menunav/node-menunav.js", 715);
aHandlers.push(oRootMenu.on(MOUSEDOWN, menuNav._toggleSubmenuDisplay, menuNav));
			_yuitest_coverline("build/node-menunav/node-menunav.js", 716);
aHandlers.push(Y.on("key", menuNav._toggleSubmenuDisplay, oRootMenu, "down:13", menuNav));
			_yuitest_coverline("build/node-menunav/node-menunav.js", 717);
aHandlers.push(oRootMenu.on(CLICK, menuNav._toggleSubmenuDisplay, menuNav));
			_yuitest_coverline("build/node-menunav/node-menunav.js", 718);
aHandlers.push(oRootMenu.on("keypress", menuNav._onKeyPress, menuNav));
			_yuitest_coverline("build/node-menunav/node-menunav.js", 719);
aHandlers.push(oRootMenu.on(KEYDOWN, menuNav._onKeyDown, menuNav));

			_yuitest_coverline("build/node-menunav/node-menunav.js", 721);
oDoc = oRootMenu.get("ownerDocument");

		    _yuitest_coverline("build/node-menunav/node-menunav.js", 723);
aHandlers.push(oDoc.on(MOUSEDOWN, menuNav._onDocMouseDown, menuNav));
			_yuitest_coverline("build/node-menunav/node-menunav.js", 724);
aHandlers.push(oDoc.on("focus", menuNav._onDocFocus, menuNav));

			_yuitest_coverline("build/node-menunav/node-menunav.js", 726);
this._eventHandlers = aHandlers;

			_yuitest_coverline("build/node-menunav/node-menunav.js", 728);
menuNav._initFocusManager();

		}
		

    },

	destructor: function () {

		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "destructor", 735);
_yuitest_coverline("build/node-menunav/node-menunav.js", 737);
var aHandlers = this._eventHandlers;

		_yuitest_coverline("build/node-menunav/node-menunav.js", 739);
if (aHandlers) {

			_yuitest_coverline("build/node-menunav/node-menunav.js", 741);
Y.Array.each(aHandlers, function (handle) {
				_yuitest_coverfunc("build/node-menunav/node-menunav.js", "(anonymous 3)", 741);
_yuitest_coverline("build/node-menunav/node-menunav.js", 742);
handle.detach();
			});

			_yuitest_coverline("build/node-menunav/node-menunav.js", 745);
this._eventHandlers = null;

		}
		
		_yuitest_coverline("build/node-menunav/node-menunav.js", 749);
this.get(HOST).unplug("focusManager");
		
    },



	//	Protected methods

	/**
	* @method _isRoot
	* @description Returns a boolean indicating if the specified menu is the 
	* root menu in the menu.
	* @protected
	* @param {Node} menu Node instance representing a menu.
	* @return {Boolean} Boolean indicating if the specified menu is the root 
	* menu in the menu.
	*/
	_isRoot: function (menu) {

		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "_isRoot", 766);
_yuitest_coverline("build/node-menunav/node-menunav.js", 768);
return this._rootMenu.compareTo(menu);

	},


	/**
	* @method _getTopmostSubmenu
	* @description Returns the topmost submenu of a submenu hierarchy.
	* @protected
	* @param {Node} menu Node instance representing a menu.
	* @return {Node} Node instance representing a menu.
	*/
	_getTopmostSubmenu: function (menu) {
	
		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "_getTopmostSubmenu", 780);
_yuitest_coverline("build/node-menunav/node-menunav.js", 782);
var menuNav = this,
			oMenu = getParentMenu(menu),
			returnVal;


		_yuitest_coverline("build/node-menunav/node-menunav.js", 787);
if (!oMenu) {
			_yuitest_coverline("build/node-menunav/node-menunav.js", 788);
returnVal = menu;
		}
		else {_yuitest_coverline("build/node-menunav/node-menunav.js", 790);
if (menuNav._isRoot(oMenu)) {
			_yuitest_coverline("build/node-menunav/node-menunav.js", 791);
returnVal = menu;
		}
		else {
			_yuitest_coverline("build/node-menunav/node-menunav.js", 794);
returnVal = menuNav._getTopmostSubmenu(oMenu);
		}}
	
		_yuitest_coverline("build/node-menunav/node-menunav.js", 797);
return returnVal;
	
	},


	/**
	* @method _clearActiveItem
	* @description Clears the menu's active descendent.
	* @protected
	*/
	_clearActiveItem: function () {

		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "_clearActiveItem", 807);
_yuitest_coverline("build/node-menunav/node-menunav.js", 809);
var menuNav = this,
			oActiveItem = menuNav._activeItem;
		
		_yuitest_coverline("build/node-menunav/node-menunav.js", 812);
if (oActiveItem) {
			_yuitest_coverline("build/node-menunav/node-menunav.js", 813);
oActiveItem.removeClass(getActiveClass(oActiveItem));
		}

		_yuitest_coverline("build/node-menunav/node-menunav.js", 816);
menuNav._activeItem = null;
	
	},


	/**
	* @method _setActiveItem
	* @description Sets the specified menuitem or menu label as the menu's 
	* active descendent.
	* @protected
	* @param {Node} item Node instance representing a menuitem or menu label.
	*/
	_setActiveItem: function (item) {

		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "_setActiveItem", 828);
_yuitest_coverline("build/node-menunav/node-menunav.js", 830);
var menuNav = this;
	
		_yuitest_coverline("build/node-menunav/node-menunav.js", 832);
if (item) {
			
			_yuitest_coverline("build/node-menunav/node-menunav.js", 834);
menuNav._clearActiveItem();
	
			_yuitest_coverline("build/node-menunav/node-menunav.js", 836);
item.addClass(getActiveClass(item));
			
			_yuitest_coverline("build/node-menunav/node-menunav.js", 838);
menuNav._activeItem = item;
		
		}
	
	},


	/**
	* @method _focusItem
	* @description Focuses the specified menuitem or menu label.
	* @protected
	* @param {Node} item Node instance representing a menuitem or menu label.
	*/
	_focusItem: function (item) {
	
		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "_focusItem", 851);
_yuitest_coverline("build/node-menunav/node-menunav.js", 853);
var menuNav = this,
			oMenu,
			oItem;
	
		_yuitest_coverline("build/node-menunav/node-menunav.js", 857);
if (item && menuNav._hasFocus) {

			_yuitest_coverline("build/node-menunav/node-menunav.js", 859);
oMenu = getParentMenu(item);
			_yuitest_coverline("build/node-menunav/node-menunav.js", 860);
oItem = getItemAnchor(item);

			_yuitest_coverline("build/node-menunav/node-menunav.js", 862);
if (oMenu && !oMenu.compareTo(menuNav._activeMenu)) {
				_yuitest_coverline("build/node-menunav/node-menunav.js", 863);
menuNav._activeMenu = oMenu;
				_yuitest_coverline("build/node-menunav/node-menunav.js", 864);
menuNav._initFocusManager();
			}
		
			_yuitest_coverline("build/node-menunav/node-menunav.js", 867);
menuNav._focusManager.focus(oItem);

		}
	
	},


	/**
	* @method _showMenu
	* @description Shows the specified menu.
	* @protected
	* @param {Node} menu Node instance representing a menu.
	*/
	_showMenu: function (menu) {

		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "_showMenu", 880);
_yuitest_coverline("build/node-menunav/node-menunav.js", 882);
var oParentMenu = getParentMenu(menu),
			oLI = menu.get(PARENT_NODE),
			aXY = oLI.getXY();


		_yuitest_coverline("build/node-menunav/node-menunav.js", 887);
if (this.get(USE_ARIA)) {
			_yuitest_coverline("build/node-menunav/node-menunav.js", 888);
menu.set(ARIA_HIDDEN, false);
		}


		_yuitest_coverline("build/node-menunav/node-menunav.js", 892);
if (isHorizontalMenu(oParentMenu)) {
			_yuitest_coverline("build/node-menunav/node-menunav.js", 893);
aXY[1] = aXY[1] + oLI.get(OFFSET_HEIGHT);
		}
		else {
			_yuitest_coverline("build/node-menunav/node-menunav.js", 896);
aXY[0] = aXY[0] + oLI.get(OFFSET_WIDTH);
		}
		
		_yuitest_coverline("build/node-menunav/node-menunav.js", 899);
menu.setXY(aXY);

		_yuitest_coverline("build/node-menunav/node-menunav.js", 901);
if (UA.ie < 8) {

			_yuitest_coverline("build/node-menunav/node-menunav.js", 903);
if (UA.ie === 6 && !menu.hasIFrameShim) {
	
				_yuitest_coverline("build/node-menunav/node-menunav.js", 905);
menu.appendChild(Y.Node.create(NodeMenuNav.SHIM_TEMPLATE));
				_yuitest_coverline("build/node-menunav/node-menunav.js", 906);
menu.hasIFrameShim = true;

			}

			//	Clear previous values for height and width

			_yuitest_coverline("build/node-menunav/node-menunav.js", 912);
menu.setStyles({ height: EMPTY_STRING, width: EMPTY_STRING });

			//	Set the width and height of the menu's bounding box - this is 
			//	necessary for IE 6 so that the CSS for the <iframe> shim can 
			//	simply set the <iframe>'s width and height to 100% to ensure 
			//	that dimensions of an <iframe> shim are always sync'd to the 
			//	that of its parent menu.  Specifying a width and height also 
			//	helps when positioning decorator elements (for creating effects 
			//	like rounded corners) inside a menu's bounding box in IE 7.
			
			_yuitest_coverline("build/node-menunav/node-menunav.js", 922);
menu.setStyles({ 
				height: (menu.get(OFFSET_HEIGHT) + PX), 
				width: (menu.get(OFFSET_WIDTH) + PX) });

		}

		_yuitest_coverline("build/node-menunav/node-menunav.js", 928);
menu.previous().addClass(CSS_MENU_LABEL_MENUVISIBLE);
		_yuitest_coverline("build/node-menunav/node-menunav.js", 929);
menu.removeClass(CSS_MENU_HIDDEN);

	},
	

	/**
	* @method _hideMenu 
	* @description Hides the specified menu.
	* @protected
	* @param {Node} menu Node instance representing a menu.
	* @param {Boolean} activateAndFocusLabel Boolean indicating if the label 
	* for the specified 
	* menu should be focused and set as active.
	*/
	_hideMenu: function (menu, activateAndFocusLabel) {

		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "_hideMenu", 943);
_yuitest_coverline("build/node-menunav/node-menunav.js", 945);
var menuNav = this,
			oLabel = menu.previous(),
			oActiveItem;

		_yuitest_coverline("build/node-menunav/node-menunav.js", 949);
oLabel.removeClass(CSS_MENU_LABEL_MENUVISIBLE);


		_yuitest_coverline("build/node-menunav/node-menunav.js", 952);
if (activateAndFocusLabel) {
			_yuitest_coverline("build/node-menunav/node-menunav.js", 953);
menuNav._focusItem(oLabel);
			_yuitest_coverline("build/node-menunav/node-menunav.js", 954);
menuNav._setActiveItem(oLabel);			
		}

		_yuitest_coverline("build/node-menunav/node-menunav.js", 957);
oActiveItem = menu.one((PERIOD + CSS_MENUITEM_ACTIVE));

		_yuitest_coverline("build/node-menunav/node-menunav.js", 959);
if (oActiveItem) {
			_yuitest_coverline("build/node-menunav/node-menunav.js", 960);
oActiveItem.removeClass(CSS_MENUITEM_ACTIVE);
		}

		//	Clear the values for top and left that were set by the call to 
		//	"setXY" when the menu was shown so that the hidden position 
		//	specified in the core CSS file will take affect.

		_yuitest_coverline("build/node-menunav/node-menunav.js", 967);
menu.setStyles({ left: EMPTY_STRING, top: EMPTY_STRING });
		
		_yuitest_coverline("build/node-menunav/node-menunav.js", 969);
menu.addClass(CSS_MENU_HIDDEN);

		_yuitest_coverline("build/node-menunav/node-menunav.js", 971);
if (menuNav.get(USE_ARIA)) {
			_yuitest_coverline("build/node-menunav/node-menunav.js", 972);
menu.set(ARIA_HIDDEN, true);
		}	
		
	},


	/**
	* @method _hideAllSubmenus
	* @description Hides all submenus of the specified menu.
	* @protected
	* @param {Node} menu Node instance representing a menu.
	*/
	_hideAllSubmenus: function (menu) {

		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "_hideAllSubmenus", 984);
_yuitest_coverline("build/node-menunav/node-menunav.js", 986);
var menuNav = this;

		_yuitest_coverline("build/node-menunav/node-menunav.js", 988);
menu.all(MENU_SELECTOR).each(Y.bind(function (submenuNode) {
		
			_yuitest_coverfunc("build/node-menunav/node-menunav.js", "(anonymous 4)", 988);
_yuitest_coverline("build/node-menunav/node-menunav.js", 990);
menuNav._hideMenu(submenuNode);
		
		}, menuNav));
	
	},


	/**
	* @method _cancelShowSubmenuTimer
	* @description Cancels the timer used to show a submenu.
	* @protected
	*/
	_cancelShowSubmenuTimer: function () {

		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "_cancelShowSubmenuTimer", 1002);
_yuitest_coverline("build/node-menunav/node-menunav.js", 1004);
var menuNav = this,
			oShowSubmenuTimer = menuNav._showSubmenuTimer;

		_yuitest_coverline("build/node-menunav/node-menunav.js", 1007);
if (oShowSubmenuTimer) {
			_yuitest_coverline("build/node-menunav/node-menunav.js", 1008);
oShowSubmenuTimer.cancel();
			_yuitest_coverline("build/node-menunav/node-menunav.js", 1009);
menuNav._showSubmenuTimer = null;
		}
	
	},


	/**
	* @method _cancelHideSubmenuTimer
	* @description Cancels the timer used to hide a submenu.
	* @protected
	*/
	_cancelHideSubmenuTimer: function () {

		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "_cancelHideSubmenuTimer", 1020);
_yuitest_coverline("build/node-menunav/node-menunav.js", 1022);
var menuNav = this,
			oHideSubmenuTimer = menuNav._hideSubmenuTimer;


		_yuitest_coverline("build/node-menunav/node-menunav.js", 1026);
if (oHideSubmenuTimer) {
			_yuitest_coverline("build/node-menunav/node-menunav.js", 1027);
oHideSubmenuTimer.cancel();
			_yuitest_coverline("build/node-menunav/node-menunav.js", 1028);
menuNav._hideSubmenuTimer = null;
		}
	
	},


	/**
	* @method _initFocusManager
	* @description Initializes and updates the Focus Manager so that is is 
	* always managing descendants of the active menu.
	* @protected
	*/
	_initFocusManager: function () {

		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "_initFocusManager", 1040);
_yuitest_coverline("build/node-menunav/node-menunav.js", 1042);
var menuNav = this,
			oRootMenu = menuNav._rootMenu,
			oMenu = menuNav._activeMenu || oRootMenu,
			sSelectorBase = 
				menuNav._isRoot(oMenu) ? EMPTY_STRING : ("#" + oMenu.get("id")),
			oFocusManager = menuNav._focusManager,
			sKeysVal,
			sDescendantSelector,
			sQuery;

		_yuitest_coverline("build/node-menunav/node-menunav.js", 1052);
if (isHorizontalMenu(oMenu)) {

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1054);
sDescendantSelector = sSelectorBase + STANDARD_QUERY + "," + 
				sSelectorBase + EXTENDED_QUERY;
			
			_yuitest_coverline("build/node-menunav/node-menunav.js", 1057);
sKeysVal = { next: "down:39", previous: "down:37" };
			
		}
		else {

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1062);
sDescendantSelector = sSelectorBase + STANDARD_QUERY;
			_yuitest_coverline("build/node-menunav/node-menunav.js", 1063);
sKeysVal = { next: "down:40", previous: "down:38" };

		}


		_yuitest_coverline("build/node-menunav/node-menunav.js", 1068);
if (!oFocusManager) {

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1070);
oRootMenu.plug(Y.Plugin.NodeFocusManager, { 
				descendants: sDescendantSelector,
				keys: sKeysVal,
				circular: true
			});

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1076);
oFocusManager = oRootMenu.focusManager;

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1078);
sQuery = "#" + oRootMenu.get("id") + MENU_SELECTOR + " a," + 
							MENU_TOGGLE_SELECTOR;

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1081);
oRootMenu.all(sQuery).set("tabIndex", -1);

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1083);
oFocusManager.on(ACTIVE_DESCENDANT_CHANGE, 
				this._onActiveDescendantChange, oFocusManager, this);

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1086);
oFocusManager.after(ACTIVE_DESCENDANT_CHANGE, 
				this._afterActiveDescendantChange, oFocusManager, this);
			
			_yuitest_coverline("build/node-menunav/node-menunav.js", 1089);
menuNav._focusManager = oFocusManager;
			
		}
		else {

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1094);
oFocusManager.set(ACTIVE_DESCENDANT, -1);
			_yuitest_coverline("build/node-menunav/node-menunav.js", 1095);
oFocusManager.set(DESCENDANTS, sDescendantSelector);
			_yuitest_coverline("build/node-menunav/node-menunav.js", 1096);
oFocusManager.set("keys", sKeysVal);
			
		}

	},


	//	Event handlers for discrete pieces of pieces of the menu


	/**
	* @method _onActiveDescendantChange
	* @description "activeDescendantChange" event handler for menu's 
	* Focus Manager.
	* @protected
	* @param {Object} event Object representing the Attribute change event.
	* @param {NodeMenuNav} menuNav Object representing the NodeMenuNav instance.
	*/
	_onActiveDescendantChange: function (event, menuNav) {

		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "_onActiveDescendantChange", 1114);
_yuitest_coverline("build/node-menunav/node-menunav.js", 1116);
if (event.src === UI && menuNav._activeMenu && 
				!menuNav._movingToSubmenu) {

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1119);
menuNav._hideAllSubmenus(menuNav._activeMenu);

		}
		
	},


	/**
	* @method _afterActiveDescendantChange
	* @description "activeDescendantChange" event handler for menu's 
	* Focus Manager.
	* @protected
	* @param {Object} event Object representing the Attribute change event.
	* @param {NodeMenuNav} menuNav Object representing the NodeMenuNav instance.
	*/
	_afterActiveDescendantChange: function (event, menuNav) {

		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "_afterActiveDescendantChange", 1134);
_yuitest_coverline("build/node-menunav/node-menunav.js", 1136);
var oItem;

		_yuitest_coverline("build/node-menunav/node-menunav.js", 1138);
if (event.src === UI) {
			_yuitest_coverline("build/node-menunav/node-menunav.js", 1139);
oItem = getItem(this.get(DESCENDANTS).item(event.newVal), true);
			_yuitest_coverline("build/node-menunav/node-menunav.js", 1140);
menuNav._setActiveItem(oItem);
		}
	
	},


	/**
	* @method _onDocFocus
	* @description "focus" event handler for the owner document of the MenuNav.
	* @protected
	* @param {Object} event Object representing the DOM event.
	*/
	_onDocFocus: function (event) {
	
		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "_onDocFocus", 1152);
_yuitest_coverline("build/node-menunav/node-menunav.js", 1154);
var menuNav = this,
			oActiveItem = menuNav._activeItem,
			oTarget = event.target,
			oMenu;
	

		_yuitest_coverline("build/node-menunav/node-menunav.js", 1160);
if (menuNav._rootMenu.contains(oTarget)) {	//	The menu has focus

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1162);
if (menuNav._hasFocus) {	

				_yuitest_coverline("build/node-menunav/node-menunav.js", 1164);
oMenu = getParentMenu(oTarget);

				//	If the element that was focused is a descendant of the 
				//	root menu, but is in a submenu not currently being 
				//	managed by the Focus Manager, update the Focus Manager so 
				//	that it is now managing the submenu that is the parent of  
				//	the element that was focused.
				
				_yuitest_coverline("build/node-menunav/node-menunav.js", 1172);
if (!menuNav._activeMenu.compareTo(oMenu)) {

					_yuitest_coverline("build/node-menunav/node-menunav.js", 1174);
menuNav._activeMenu = oMenu;
					_yuitest_coverline("build/node-menunav/node-menunav.js", 1175);
menuNav._initFocusManager();
					_yuitest_coverline("build/node-menunav/node-menunav.js", 1176);
menuNav._focusManager.set(ACTIVE_DESCENDANT, oTarget);
					_yuitest_coverline("build/node-menunav/node-menunav.js", 1177);
menuNav._setActiveItem(getItem(oTarget, true));
					
				}
			
			}
			else { //	Initial focus

				//	First time the menu has been focused, need to setup focused 
				//	state and established active active descendant
	
				_yuitest_coverline("build/node-menunav/node-menunav.js", 1187);
menuNav._hasFocus = true;
	
				_yuitest_coverline("build/node-menunav/node-menunav.js", 1189);
oActiveItem = getItem(oTarget, true);
	
				_yuitest_coverline("build/node-menunav/node-menunav.js", 1191);
if (oActiveItem) {	
					_yuitest_coverline("build/node-menunav/node-menunav.js", 1192);
menuNav._setActiveItem(oActiveItem);
				}
				
			}
		
		}
		else {	//	The menu has lost focus

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1200);
menuNav._clearActiveItem();

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1202);
menuNav._cancelShowSubmenuTimer();
			_yuitest_coverline("build/node-menunav/node-menunav.js", 1203);
menuNav._hideAllSubmenus(menuNav._rootMenu);

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1205);
menuNav._activeMenu = menuNav._rootMenu;
			_yuitest_coverline("build/node-menunav/node-menunav.js", 1206);
menuNav._initFocusManager();
			
			_yuitest_coverline("build/node-menunav/node-menunav.js", 1208);
menuNav._focusManager.set(ACTIVE_DESCENDANT, 0);
			
			_yuitest_coverline("build/node-menunav/node-menunav.js", 1210);
menuNav._hasFocus = false;

		}
	
	},


	/**
	* @method _onMenuMouseOver
	* @description "mouseover" event handler for a menu.
	* @protected
	* @param {Node} menu Node instance representing a menu.
	* @param {Object} event Object representing the DOM event.
	*/
	_onMenuMouseOver: function (menu, event) {

		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "_onMenuMouseOver", 1224);
_yuitest_coverline("build/node-menunav/node-menunav.js", 1226);
var menuNav = this,
			oHideAllSubmenusTimer = menuNav._hideAllSubmenusTimer;

		_yuitest_coverline("build/node-menunav/node-menunav.js", 1229);
if (oHideAllSubmenusTimer) {
			_yuitest_coverline("build/node-menunav/node-menunav.js", 1230);
oHideAllSubmenusTimer.cancel();
			_yuitest_coverline("build/node-menunav/node-menunav.js", 1231);
menuNav._hideAllSubmenusTimer = null;
		}

		_yuitest_coverline("build/node-menunav/node-menunav.js", 1234);
menuNav._cancelHideSubmenuTimer();

		//	Need to update the FocusManager in advance of focus a new 
		//	Menu in order to avoid the FocusManager thinking that 
		//	it has lost focus
		
		_yuitest_coverline("build/node-menunav/node-menunav.js", 1240);
if (menu && !menu.compareTo(menuNav._activeMenu)) {
			_yuitest_coverline("build/node-menunav/node-menunav.js", 1241);
menuNav._activeMenu = menu;

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1243);
if (menuNav._hasFocus) {
				_yuitest_coverline("build/node-menunav/node-menunav.js", 1244);
menuNav._initFocusManager();
			}

		}

		_yuitest_coverline("build/node-menunav/node-menunav.js", 1249);
if (menuNav._movingToSubmenu && isHorizontalMenu(menu)) {
			_yuitest_coverline("build/node-menunav/node-menunav.js", 1250);
menuNav._movingToSubmenu = false;
		}

	},


	/**
	* @method _hideAndFocusLabel
	* @description Hides all of the submenus of the root menu and focuses the 
	* label of the topmost submenu
	* @protected
	*/
	_hideAndFocusLabel: function () {

		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "_hideAndFocusLabel", 1262);
_yuitest_coverline("build/node-menunav/node-menunav.js", 1264);
var	menuNav = this,
			oActiveMenu = menuNav._activeMenu,
			oSubmenu;
	
		_yuitest_coverline("build/node-menunav/node-menunav.js", 1268);
menuNav._hideAllSubmenus(menuNav._rootMenu);

		_yuitest_coverline("build/node-menunav/node-menunav.js", 1270);
if (oActiveMenu) {

			//	Focus the label element for the topmost submenu
			_yuitest_coverline("build/node-menunav/node-menunav.js", 1273);
oSubmenu = menuNav._getTopmostSubmenu(oActiveMenu);
			_yuitest_coverline("build/node-menunav/node-menunav.js", 1274);
menuNav._focusItem(oSubmenu.previous());

		}
	
	},


	/**
	* @method _onMenuMouseOut
	* @description "mouseout" event handler for a menu.
	* @protected
	* @param {Node} menu Node instance representing a menu.
	* @param {Object} event Object representing the DOM event.
	*/
	_onMenuMouseOut: function (menu, event) {

		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "_onMenuMouseOut", 1288);
_yuitest_coverline("build/node-menunav/node-menunav.js", 1290);
var menuNav = this,
			oActiveMenu = menuNav._activeMenu,
			oRelatedTarget = event.relatedTarget,
			oActiveItem = menuNav._activeItem,
			oParentMenu,
			oMenu;


		_yuitest_coverline("build/node-menunav/node-menunav.js", 1298);
if (oActiveMenu && !oActiveMenu.contains(oRelatedTarget)) {
		
			_yuitest_coverline("build/node-menunav/node-menunav.js", 1300);
oParentMenu = getParentMenu(oActiveMenu);
			

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1303);
if (oParentMenu && !oParentMenu.contains(oRelatedTarget)) {

				_yuitest_coverline("build/node-menunav/node-menunav.js", 1305);
if (menuNav.get(MOUSEOUT_HIDE_DELAY) > 0) {

					_yuitest_coverline("build/node-menunav/node-menunav.js", 1307);
menuNav._cancelShowSubmenuTimer();

					_yuitest_coverline("build/node-menunav/node-menunav.js", 1309);
menuNav._hideAllSubmenusTimer = 

						later(menuNav.get(MOUSEOUT_HIDE_DELAY), 
							menuNav, menuNav._hideAndFocusLabel);
						
				}
			
			}
			else {
			
				_yuitest_coverline("build/node-menunav/node-menunav.js", 1319);
if (oActiveItem) {
				
					_yuitest_coverline("build/node-menunav/node-menunav.js", 1321);
oMenu = getParentMenu(oActiveItem);

					_yuitest_coverline("build/node-menunav/node-menunav.js", 1323);
if (!menuNav._isRoot(oMenu)) { 
						_yuitest_coverline("build/node-menunav/node-menunav.js", 1324);
menuNav._focusItem(oMenu.previous());
					}
				
				}
			
			}

		}

	},


	/**
	* @method _onMenuLabelMouseOver
	* @description "mouseover" event handler for a menu label.
	* @protected
	* @param {Node} menuLabel Node instance representing a menu label.
	* @param {Object} event Object representing the DOM event.
	*/
	_onMenuLabelMouseOver: function (menuLabel, event) {

		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "_onMenuLabelMouseOver", 1343);
_yuitest_coverline("build/node-menunav/node-menunav.js", 1345);
var menuNav = this,
			oActiveMenu = menuNav._activeMenu,
			bIsRoot = menuNav._isRoot(oActiveMenu),
			bUseAutoSubmenuDisplay = 
				(menuNav.get(AUTO_SUBMENU_DISPLAY) && bIsRoot || !bIsRoot),
            submenuShowDelay = menuNav.get("submenuShowDelay"),	
			oSubmenu;
				

        _yuitest_coverline("build/node-menunav/node-menunav.js", 1354);
var showSubmenu = function (delay) {

			_yuitest_coverfunc("build/node-menunav/node-menunav.js", "showSubmenu", 1354);
_yuitest_coverline("build/node-menunav/node-menunav.js", 1356);
menuNav._cancelHideSubmenuTimer();
			_yuitest_coverline("build/node-menunav/node-menunav.js", 1357);
menuNav._cancelShowSubmenuTimer();

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1359);
if (!hasVisibleSubmenu(menuLabel)) {

				_yuitest_coverline("build/node-menunav/node-menunav.js", 1361);
oSubmenu = menuLabel.next();

				_yuitest_coverline("build/node-menunav/node-menunav.js", 1363);
if (oSubmenu) {
					_yuitest_coverline("build/node-menunav/node-menunav.js", 1364);
menuNav._hideAllSubmenus(oActiveMenu);
					_yuitest_coverline("build/node-menunav/node-menunav.js", 1365);
menuNav._showSubmenuTimer = later(delay, menuNav, menuNav._showMenu, oSubmenu);
				}

			}
            
        };


		_yuitest_coverline("build/node-menunav/node-menunav.js", 1373);
menuNav._focusItem(menuLabel);
		_yuitest_coverline("build/node-menunav/node-menunav.js", 1374);
menuNav._setActiveItem(menuLabel);


		_yuitest_coverline("build/node-menunav/node-menunav.js", 1377);
if (bUseAutoSubmenuDisplay) {
	
	        _yuitest_coverline("build/node-menunav/node-menunav.js", 1379);
if (menuNav._movingToSubmenu) {
	            
	            //  If the user is moving diagonally from a submenu to 
	            //  another submenu and they then stop and pause on a
	            //  menu label for an amount of time equal to the amount of 
	            //  time defined for the display of a submenu then show the 
	            //  submenu immediately.
	            //  http://yuilibrary.com/projects/yui3/ticket/2528316
	            
	            //Y.message("Pause path");
	            
	            _yuitest_coverline("build/node-menunav/node-menunav.js", 1390);
menuNav._hoverTimer = later(submenuShowDelay, menuNav, function () {
                    _yuitest_coverfunc("build/node-menunav/node-menunav.js", "(anonymous 5)", 1390);
_yuitest_coverline("build/node-menunav/node-menunav.js", 1391);
showSubmenu(0);
	            });
	            
	        }
	        else {
                _yuitest_coverline("build/node-menunav/node-menunav.js", 1396);
showSubmenu(submenuShowDelay);
	        }
		
		}

	},


	/**
	* @method _onMenuLabelMouseOut
	* @description "mouseout" event handler for a menu label.
	* @protected
	* @param {Node} menuLabel Node instance representing a menu label.
	* @param {Object} event Object representing the DOM event.
	*/
	_onMenuLabelMouseOut: function (menuLabel, event) {

		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "_onMenuLabelMouseOut", 1411);
_yuitest_coverline("build/node-menunav/node-menunav.js", 1413);
var menuNav = this,
			bIsRoot = menuNav._isRoot(menuNav._activeMenu),
			bUseAutoSubmenuDisplay = 
				(menuNav.get(AUTO_SUBMENU_DISPLAY) && bIsRoot || !bIsRoot),

			oRelatedTarget = event.relatedTarget,
			oSubmenu = menuLabel.next(),
			hoverTimer = menuNav._hoverTimer;

        _yuitest_coverline("build/node-menunav/node-menunav.js", 1422);
if (hoverTimer) {
            _yuitest_coverline("build/node-menunav/node-menunav.js", 1423);
hoverTimer.cancel();
        }

		_yuitest_coverline("build/node-menunav/node-menunav.js", 1426);
menuNav._clearActiveItem();

		_yuitest_coverline("build/node-menunav/node-menunav.js", 1428);
if (bUseAutoSubmenuDisplay) {

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1430);
if (menuNav._movingToSubmenu && 
					!menuNav._showSubmenuTimer && oSubmenu) {

				//	If the mouse is moving diagonally toward the submenu and 
				//	another submenu isn't in the process of being displayed 
				//	(via a timer), then hide the submenu via a timer to give
				//	the user some time to reach the submenu.
			
				_yuitest_coverline("build/node-menunav/node-menunav.js", 1438);
menuNav._hideSubmenuTimer = 
					later(menuNav.get("submenuHideDelay"), menuNav, 
						menuNav._hideMenu, oSubmenu);
			
			}
			else {_yuitest_coverline("build/node-menunav/node-menunav.js", 1443);
if (!menuNav._movingToSubmenu && oSubmenu && (!oRelatedTarget || 
			        (oRelatedTarget && 
			            !oSubmenu.contains(oRelatedTarget) && 
			            !oRelatedTarget.compareTo(oSubmenu)))) {

				//	If the mouse is not moving toward the submenu, cancel any 
				//	submenus that might be in the process of being displayed 
				//	(via a timer) and hide this submenu immediately.

				_yuitest_coverline("build/node-menunav/node-menunav.js", 1452);
menuNav._cancelShowSubmenuTimer();

				_yuitest_coverline("build/node-menunav/node-menunav.js", 1454);
menuNav._hideMenu(oSubmenu);

			}}

		}

	},
	

	/**
	* @method _onMenuItemMouseOver
	* @description "mouseover" event handler for a menuitem.
	* @protected
	* @param {Node} menuItem Node instance representing a menuitem.
	* @param {Object} event Object representing the DOM event.
	*/
	_onMenuItemMouseOver: function (menuItem, event) {

		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "_onMenuItemMouseOver", 1470);
_yuitest_coverline("build/node-menunav/node-menunav.js", 1472);
var menuNav = this,
			oActiveMenu = menuNav._activeMenu,
			bIsRoot = menuNav._isRoot(oActiveMenu),
			bUseAutoSubmenuDisplay = 
				(menuNav.get(AUTO_SUBMENU_DISPLAY) && bIsRoot || !bIsRoot);


		_yuitest_coverline("build/node-menunav/node-menunav.js", 1479);
menuNav._focusItem(menuItem);
		_yuitest_coverline("build/node-menunav/node-menunav.js", 1480);
menuNav._setActiveItem(menuItem);


		_yuitest_coverline("build/node-menunav/node-menunav.js", 1483);
if (bUseAutoSubmenuDisplay && !menuNav._movingToSubmenu) {

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1485);
menuNav._hideAllSubmenus(oActiveMenu);

		}

	},
	

	/**
	* @method _onMenuItemMouseOut
	* @description "mouseout" event handler for a menuitem.
	* @protected
	* @param {Node} menuItem Node instance representing a menuitem.
	* @param {Object} event Object representing the DOM event.
	*/
	_onMenuItemMouseOut: function (menuItem, event) {

		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "_onMenuItemMouseOut", 1499);
_yuitest_coverline("build/node-menunav/node-menunav.js", 1501);
this._clearActiveItem();

	},


	/**
	* @method _onVerticalMenuKeyDown
	* @description "keydown" event handler for vertical menus.
	* @protected
	* @param {Object} event Object representing the DOM event.
	*/
	_onVerticalMenuKeyDown: function (event) {

		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "_onVerticalMenuKeyDown", 1512);
_yuitest_coverline("build/node-menunav/node-menunav.js", 1514);
var menuNav = this,
			oActiveMenu = menuNav._activeMenu,
			oRootMenu = menuNav._rootMenu,
			oTarget = event.target,
			bPreventDefault = false,
			nKeyCode = event.keyCode,
			oSubmenu,
			oParentMenu,
			oLI,
			oItem;


		_yuitest_coverline("build/node-menunav/node-menunav.js", 1526);
switch (nKeyCode) {

			case 37:	//	left arrow

				_yuitest_coverline("build/node-menunav/node-menunav.js", 1530);
oParentMenu = getParentMenu(oActiveMenu);

				_yuitest_coverline("build/node-menunav/node-menunav.js", 1532);
if (oParentMenu && isHorizontalMenu(oParentMenu)) {
				
					_yuitest_coverline("build/node-menunav/node-menunav.js", 1534);
menuNav._hideMenu(oActiveMenu);
					_yuitest_coverline("build/node-menunav/node-menunav.js", 1535);
oLI = getPreviousSibling(oActiveMenu.get(PARENT_NODE));
					_yuitest_coverline("build/node-menunav/node-menunav.js", 1536);
oItem = getItem(oLI);
					
					_yuitest_coverline("build/node-menunav/node-menunav.js", 1538);
if (oItem) {

						_yuitest_coverline("build/node-menunav/node-menunav.js", 1540);
if (isMenuLabel(oItem)) {	//	Menu label
						
							_yuitest_coverline("build/node-menunav/node-menunav.js", 1542);
oSubmenu = oItem.next();
						

							_yuitest_coverline("build/node-menunav/node-menunav.js", 1545);
if (oSubmenu) {

								_yuitest_coverline("build/node-menunav/node-menunav.js", 1547);
menuNav._showMenu(oSubmenu);
								_yuitest_coverline("build/node-menunav/node-menunav.js", 1548);
menuNav._focusItem(getFirstItem(oSubmenu));
								_yuitest_coverline("build/node-menunav/node-menunav.js", 1549);
menuNav._setActiveItem(getFirstItem(oSubmenu));

							}
							else {
	
								_yuitest_coverline("build/node-menunav/node-menunav.js", 1554);
menuNav._focusItem(oItem);
								_yuitest_coverline("build/node-menunav/node-menunav.js", 1555);
menuNav._setActiveItem(oItem);
	
							}
						
						}
						else {	//	MenuItem

							_yuitest_coverline("build/node-menunav/node-menunav.js", 1562);
menuNav._focusItem(oItem);
							_yuitest_coverline("build/node-menunav/node-menunav.js", 1563);
menuNav._setActiveItem(oItem);

						}
					
					}

				}
				else {_yuitest_coverline("build/node-menunav/node-menunav.js", 1570);
if (!menuNav._isRoot(oActiveMenu)) {
					_yuitest_coverline("build/node-menunav/node-menunav.js", 1571);
menuNav._hideMenu(oActiveMenu, true);
				}}


				_yuitest_coverline("build/node-menunav/node-menunav.js", 1575);
bPreventDefault = true;

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1577);
break;

			case 39:	//	right arrow

				_yuitest_coverline("build/node-menunav/node-menunav.js", 1581);
if (isMenuLabel(oTarget)) {
					
					_yuitest_coverline("build/node-menunav/node-menunav.js", 1583);
oSubmenu = oTarget.next();

					_yuitest_coverline("build/node-menunav/node-menunav.js", 1585);
if (oSubmenu) {

						_yuitest_coverline("build/node-menunav/node-menunav.js", 1587);
menuNav._showMenu(oSubmenu);
						_yuitest_coverline("build/node-menunav/node-menunav.js", 1588);
menuNav._focusItem(getFirstItem(oSubmenu));
						_yuitest_coverline("build/node-menunav/node-menunav.js", 1589);
menuNav._setActiveItem(getFirstItem(oSubmenu));

					}
				
				}
				else {_yuitest_coverline("build/node-menunav/node-menunav.js", 1594);
if (isHorizontalMenu(oRootMenu)) {

					_yuitest_coverline("build/node-menunav/node-menunav.js", 1596);
oSubmenu = menuNav._getTopmostSubmenu(oActiveMenu);
					_yuitest_coverline("build/node-menunav/node-menunav.js", 1597);
oLI = getNextSibling(oSubmenu.get(PARENT_NODE));
					_yuitest_coverline("build/node-menunav/node-menunav.js", 1598);
oItem = getItem(oLI);

					_yuitest_coverline("build/node-menunav/node-menunav.js", 1600);
menuNav._hideAllSubmenus(oRootMenu);

					_yuitest_coverline("build/node-menunav/node-menunav.js", 1602);
if (oItem) {

						_yuitest_coverline("build/node-menunav/node-menunav.js", 1604);
if (isMenuLabel(oItem)) {	//	Menu label

							_yuitest_coverline("build/node-menunav/node-menunav.js", 1606);
oSubmenu = oItem.next();

							_yuitest_coverline("build/node-menunav/node-menunav.js", 1608);
if (oSubmenu) {

								_yuitest_coverline("build/node-menunav/node-menunav.js", 1610);
menuNav._showMenu(oSubmenu);
								_yuitest_coverline("build/node-menunav/node-menunav.js", 1611);
menuNav._focusItem(getFirstItem(oSubmenu));
								_yuitest_coverline("build/node-menunav/node-menunav.js", 1612);
menuNav._setActiveItem(getFirstItem(oSubmenu));

							}
							else {

								_yuitest_coverline("build/node-menunav/node-menunav.js", 1617);
menuNav._focusItem(oItem);
								_yuitest_coverline("build/node-menunav/node-menunav.js", 1618);
menuNav._setActiveItem(oItem);	

							}
						
						}
						else {	//	MenuItem

							_yuitest_coverline("build/node-menunav/node-menunav.js", 1625);
menuNav._focusItem(oItem);
							_yuitest_coverline("build/node-menunav/node-menunav.js", 1626);
menuNav._setActiveItem(oItem);

						}							

					}
				
				}}

				_yuitest_coverline("build/node-menunav/node-menunav.js", 1634);
bPreventDefault = true;

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1636);
break;

		}	


		_yuitest_coverline("build/node-menunav/node-menunav.js", 1641);
if (bPreventDefault) {

			//	Prevent the browser from scrolling the window

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1645);
event.preventDefault();			

		}
	
	},
	

	/**
	* @method _onHorizontalMenuKeyDown
	* @description "keydown" event handler for horizontal menus.
	* @protected
	* @param {Object} event Object representing the DOM event.
	*/
	_onHorizontalMenuKeyDown: function (event) {

		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "_onHorizontalMenuKeyDown", 1658);
_yuitest_coverline("build/node-menunav/node-menunav.js", 1660);
var menuNav = this,
			oActiveMenu = menuNav._activeMenu,
			oTarget = event.target,
			oFocusedItem = getItem(oTarget, true),
			bPreventDefault = false,
			nKeyCode = event.keyCode,
			oSubmenu;


		_yuitest_coverline("build/node-menunav/node-menunav.js", 1669);
if (nKeyCode === 40) {

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1671);
menuNav._hideAllSubmenus(oActiveMenu);

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1673);
if (isMenuLabel(oFocusedItem)) {
			
				_yuitest_coverline("build/node-menunav/node-menunav.js", 1675);
oSubmenu = oFocusedItem.next();

				_yuitest_coverline("build/node-menunav/node-menunav.js", 1677);
if (oSubmenu) {

					_yuitest_coverline("build/node-menunav/node-menunav.js", 1679);
menuNav._showMenu(oSubmenu);
					_yuitest_coverline("build/node-menunav/node-menunav.js", 1680);
menuNav._focusItem(getFirstItem(oSubmenu));
					_yuitest_coverline("build/node-menunav/node-menunav.js", 1681);
menuNav._setActiveItem(getFirstItem(oSubmenu));

				}

				_yuitest_coverline("build/node-menunav/node-menunav.js", 1685);
bPreventDefault = true;
			
			}

		}		


		_yuitest_coverline("build/node-menunav/node-menunav.js", 1692);
if (bPreventDefault) {

			//	Prevent the browser from scrolling the window

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1696);
event.preventDefault();			

		}
	
	},


	//	Generic DOM Event handlers


	/**
	* @method _onMouseMove
	* @description "mousemove" event handler for the menu.
	* @protected
	* @param {Object} event Object representing the DOM event.
	*/
	_onMouseMove: function (event) {

		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "_onMouseMove", 1712);
_yuitest_coverline("build/node-menunav/node-menunav.js", 1714);
var menuNav = this;

		//	Using a timer to set the value of the "_currentMouseX" property 
		//	helps improve the reliability of the calculation used to set the 
		//	value of the "_movingToSubmenu" property - especially in Opera.

		_yuitest_coverline("build/node-menunav/node-menunav.js", 1720);
later(10, menuNav, function () {

			_yuitest_coverfunc("build/node-menunav/node-menunav.js", "(anonymous 6)", 1720);
_yuitest_coverline("build/node-menunav/node-menunav.js", 1722);
menuNav._currentMouseX = event.pageX;
		
		});
	
	},


	/**
	* @method _onMouseOver
	* @description "mouseover" event handler for the menu.
	* @protected
	* @param {Object} event Object representing the DOM event.
	*/
	_onMouseOver: function (event) {

		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "_onMouseOver", 1735);
_yuitest_coverline("build/node-menunav/node-menunav.js", 1737);
var menuNav = this,
			oTarget,
			oMenu,
			oMenuLabel,
			oParentMenu,
			oMenuItem;


		_yuitest_coverline("build/node-menunav/node-menunav.js", 1745);
if (menuNav._blockMouseEvent) {
			_yuitest_coverline("build/node-menunav/node-menunav.js", 1746);
menuNav._blockMouseEvent = false;
		}
		else {

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1750);
oTarget = event.target;
			_yuitest_coverline("build/node-menunav/node-menunav.js", 1751);
oMenu = getMenu(oTarget, true);
			_yuitest_coverline("build/node-menunav/node-menunav.js", 1752);
oMenuLabel = getMenuLabel(oTarget, true);
			_yuitest_coverline("build/node-menunav/node-menunav.js", 1753);
oMenuItem = getMenuItem(oTarget, true);


			_yuitest_coverline("build/node-menunav/node-menunav.js", 1756);
if (handleMouseOverForNode(oMenu, oTarget)) {

				_yuitest_coverline("build/node-menunav/node-menunav.js", 1758);
menuNav._onMenuMouseOver(oMenu, event);

				_yuitest_coverline("build/node-menunav/node-menunav.js", 1760);
oMenu[HANDLED_MOUSEOVER] = true;
				_yuitest_coverline("build/node-menunav/node-menunav.js", 1761);
oMenu[HANDLED_MOUSEOUT] = false;

				_yuitest_coverline("build/node-menunav/node-menunav.js", 1763);
oParentMenu = getParentMenu(oMenu);

				_yuitest_coverline("build/node-menunav/node-menunav.js", 1765);
if (oParentMenu) {

					_yuitest_coverline("build/node-menunav/node-menunav.js", 1767);
oParentMenu[HANDLED_MOUSEOUT] = true;
					_yuitest_coverline("build/node-menunav/node-menunav.js", 1768);
oParentMenu[HANDLED_MOUSEOVER] = false;
		
				}
			
			}

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1774);
if (handleMouseOverForNode(oMenuLabel, oTarget)) {

				_yuitest_coverline("build/node-menunav/node-menunav.js", 1776);
menuNav._onMenuLabelMouseOver(oMenuLabel, event);

				_yuitest_coverline("build/node-menunav/node-menunav.js", 1778);
oMenuLabel[HANDLED_MOUSEOVER] = true;
				_yuitest_coverline("build/node-menunav/node-menunav.js", 1779);
oMenuLabel[HANDLED_MOUSEOUT] = false;
	
			}

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1783);
if (handleMouseOverForNode(oMenuItem, oTarget)) {
	
				_yuitest_coverline("build/node-menunav/node-menunav.js", 1785);
menuNav._onMenuItemMouseOver(oMenuItem, event);

				_yuitest_coverline("build/node-menunav/node-menunav.js", 1787);
oMenuItem[HANDLED_MOUSEOVER] = true;
				_yuitest_coverline("build/node-menunav/node-menunav.js", 1788);
oMenuItem[HANDLED_MOUSEOUT] = false;
				
			}

		}

	},


	/**
	* @method _onMouseOut
	* @description "mouseout" event handler for the menu.
	* @protected
	* @param {Object} event Object representing the DOM event.
	*/
	_onMouseOut: function (event) {
			
		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "_onMouseOut", 1803);
_yuitest_coverline("build/node-menunav/node-menunav.js", 1805);
var menuNav = this,
			oActiveMenu = menuNav._activeMenu,
			bMovingToSubmenu = false,
			oTarget,
			oRelatedTarget,
			oMenu,
			oMenuLabel,
			oSubmenu,
			oMenuItem;


		_yuitest_coverline("build/node-menunav/node-menunav.js", 1816);
menuNav._movingToSubmenu = 
					(oActiveMenu && !isHorizontalMenu(oActiveMenu) && 
						((event.pageX - 5) > menuNav._currentMouseX));
		
		_yuitest_coverline("build/node-menunav/node-menunav.js", 1820);
oTarget = event.target;
		_yuitest_coverline("build/node-menunav/node-menunav.js", 1821);
oRelatedTarget = event.relatedTarget;
		_yuitest_coverline("build/node-menunav/node-menunav.js", 1822);
oMenu = getMenu(oTarget, true);
		_yuitest_coverline("build/node-menunav/node-menunav.js", 1823);
oMenuLabel = getMenuLabel(oTarget, true);
		_yuitest_coverline("build/node-menunav/node-menunav.js", 1824);
oMenuItem = getMenuItem(oTarget, true);


		_yuitest_coverline("build/node-menunav/node-menunav.js", 1827);
if (handleMouseOutForNode(oMenuLabel, oRelatedTarget)) {

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1829);
menuNav._onMenuLabelMouseOut(oMenuLabel, event);

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1831);
oMenuLabel[HANDLED_MOUSEOUT] = true;
			_yuitest_coverline("build/node-menunav/node-menunav.js", 1832);
oMenuLabel[HANDLED_MOUSEOVER] = false;

		}

		_yuitest_coverline("build/node-menunav/node-menunav.js", 1836);
if (handleMouseOutForNode(oMenuItem, oRelatedTarget)) {

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1838);
menuNav._onMenuItemMouseOut(oMenuItem, event);

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1840);
oMenuItem[HANDLED_MOUSEOUT] = true;
			_yuitest_coverline("build/node-menunav/node-menunav.js", 1841);
oMenuItem[HANDLED_MOUSEOVER] = false;
			
		}


		_yuitest_coverline("build/node-menunav/node-menunav.js", 1846);
if (oMenuLabel) {

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1848);
oSubmenu = oMenuLabel.next();

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1850);
if (oSubmenu && oRelatedTarget && 
				(oRelatedTarget.compareTo(oSubmenu) || 
					oSubmenu.contains(oRelatedTarget))) {

				_yuitest_coverline("build/node-menunav/node-menunav.js", 1854);
bMovingToSubmenu = true;

			}
		
		}
		

		_yuitest_coverline("build/node-menunav/node-menunav.js", 1861);
if (handleMouseOutForNode(oMenu, oRelatedTarget) || bMovingToSubmenu) {

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1863);
menuNav._onMenuMouseOut(oMenu, event);				

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1865);
oMenu[HANDLED_MOUSEOUT] = true;
			_yuitest_coverline("build/node-menunav/node-menunav.js", 1866);
oMenu[HANDLED_MOUSEOVER] = false;
		
		}
	
	},


	/**
	* @method _toggleSubmenuDisplay
	* @description "mousedown," "keydown," and "click" event handler for the 
	* menu used to toggle the display of a submenu.
	* @protected
	* @param {Object} event Object representing the DOM event.
	*/
	_toggleSubmenuDisplay: function (event) {

		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "_toggleSubmenuDisplay", 1880);
_yuitest_coverline("build/node-menunav/node-menunav.js", 1882);
var menuNav = this,
			oTarget = event.target,
			oMenuLabel = getMenuLabel(oTarget, true),
			sType = event.type,
			oAnchor,
			oSubmenu,
			sHref,
			nHashPos,
			nLen,
			sId;


		_yuitest_coverline("build/node-menunav/node-menunav.js", 1894);
if (oMenuLabel) {

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1896);
oAnchor = isAnchor(oTarget) ? oTarget : oTarget.ancestor(isAnchor);
			

			_yuitest_coverline("build/node-menunav/node-menunav.js", 1899);
if (oAnchor) {

				//	Need to pass "2" as a second argument to "getAttribute" for 
				//	IE otherwise IE will return a fully qualified URL for the 
				//	value of the "href" attribute.
				//	http://msdn.microsoft.com/en-us/library/ms536429(VS.85).aspx

				_yuitest_coverline("build/node-menunav/node-menunav.js", 1906);
sHref = oAnchor.getAttribute("href", 2);
				_yuitest_coverline("build/node-menunav/node-menunav.js", 1907);
nHashPos = sHref.indexOf("#");
				_yuitest_coverline("build/node-menunav/node-menunav.js", 1908);
nLen = sHref.length;

				_yuitest_coverline("build/node-menunav/node-menunav.js", 1910);
if (nHashPos === 0 && nLen > 1) {

					_yuitest_coverline("build/node-menunav/node-menunav.js", 1912);
sId = sHref.substr(1, nLen);
					_yuitest_coverline("build/node-menunav/node-menunav.js", 1913);
oSubmenu = oMenuLabel.next();

					_yuitest_coverline("build/node-menunav/node-menunav.js", 1915);
if (oSubmenu && (oSubmenu.get(ID) === sId)) {

						_yuitest_coverline("build/node-menunav/node-menunav.js", 1917);
if (sType === MOUSEDOWN || sType === KEYDOWN) {
							
							_yuitest_coverline("build/node-menunav/node-menunav.js", 1919);
if ((UA.opera || UA.gecko || UA.ie) && sType === KEYDOWN && !menuNav._preventClickHandle) {

								//	Prevent the browser from following the URL of 
								//	the anchor element

								_yuitest_coverline("build/node-menunav/node-menunav.js", 1924);
menuNav._preventClickHandle = menuNav._rootMenu.on("click", function (event) {

									_yuitest_coverfunc("build/node-menunav/node-menunav.js", "(anonymous 7)", 1924);
_yuitest_coverline("build/node-menunav/node-menunav.js", 1926);
event.preventDefault();

									_yuitest_coverline("build/node-menunav/node-menunav.js", 1928);
menuNav._preventClickHandle.detach();
									_yuitest_coverline("build/node-menunav/node-menunav.js", 1929);
menuNav._preventClickHandle = null;

								});

							}
							
							_yuitest_coverline("build/node-menunav/node-menunav.js", 1935);
if (sType == MOUSEDOWN) {

								//	Prevent the target from getting focused by 
								//	default, since the element to be focused will
								//	be determined by weather or not the submenu
								//	is visible.
								_yuitest_coverline("build/node-menunav/node-menunav.js", 1941);
event.preventDefault();

								//	FocusManager will attempt to focus any 
								//	descendant that is the target of the mousedown
								//	event.  Since we want to explicitly control 
	 							//	where focus is going, we need to call 
								//	"stopImmediatePropagation" to stop the 
								//	FocusManager from doing its thing.
								_yuitest_coverline("build/node-menunav/node-menunav.js", 1949);
event.stopImmediatePropagation();	

								//	The "_focusItem" method relies on the 
								//	"_hasFocus" property being set to true.  The
								//	"_hasFocus" property is normally set via a 
								//	"focus" event listener, but since we've 
								//	blocked focus from happening, we need to set 
								//	this property manually.
								_yuitest_coverline("build/node-menunav/node-menunav.js", 1957);
menuNav._hasFocus = true;

							}

								
							_yuitest_coverline("build/node-menunav/node-menunav.js", 1962);
if (menuNav._isRoot(getParentMenu(oTarget))) {	//	Event target is a submenu label in the root menu
							
								//	Menu label toggle functionality
							
								_yuitest_coverline("build/node-menunav/node-menunav.js", 1966);
if (hasVisibleSubmenu(oMenuLabel)) {
							
									_yuitest_coverline("build/node-menunav/node-menunav.js", 1968);
menuNav._hideMenu(oSubmenu);
									_yuitest_coverline("build/node-menunav/node-menunav.js", 1969);
menuNav._focusItem(oMenuLabel);	
									_yuitest_coverline("build/node-menunav/node-menunav.js", 1970);
menuNav._setActiveItem(oMenuLabel);
									
								}
								else {
							
									_yuitest_coverline("build/node-menunav/node-menunav.js", 1975);
menuNav._hideAllSubmenus(menuNav._rootMenu);
									_yuitest_coverline("build/node-menunav/node-menunav.js", 1976);
menuNav._showMenu(oSubmenu);

									_yuitest_coverline("build/node-menunav/node-menunav.js", 1978);
menuNav._focusItem(getFirstItem(oSubmenu));
									_yuitest_coverline("build/node-menunav/node-menunav.js", 1979);
menuNav._setActiveItem(getFirstItem(oSubmenu));
									
								}
							
							}
							else {	//	Event target is a submenu label within a submenu
							
								_yuitest_coverline("build/node-menunav/node-menunav.js", 1986);
if (menuNav._activeItem == oMenuLabel) {
							
									_yuitest_coverline("build/node-menunav/node-menunav.js", 1988);
menuNav._showMenu(oSubmenu);
									_yuitest_coverline("build/node-menunav/node-menunav.js", 1989);
menuNav._focusItem(getFirstItem(oSubmenu));
									_yuitest_coverline("build/node-menunav/node-menunav.js", 1990);
menuNav._setActiveItem(getFirstItem(oSubmenu));										
							
								}
								else {
							
									_yuitest_coverline("build/node-menunav/node-menunav.js", 1995);
if (!oMenuLabel._clickHandle) {

										_yuitest_coverline("build/node-menunav/node-menunav.js", 1997);
oMenuLabel._clickHandle = oMenuLabel.on("click", function () {

											_yuitest_coverfunc("build/node-menunav/node-menunav.js", "(anonymous 8)", 1997);
_yuitest_coverline("build/node-menunav/node-menunav.js", 1999);
menuNav._hideAllSubmenus(menuNav._rootMenu);

											_yuitest_coverline("build/node-menunav/node-menunav.js", 2001);
menuNav._hasFocus = false;
											_yuitest_coverline("build/node-menunav/node-menunav.js", 2002);
menuNav._clearActiveItem();


											_yuitest_coverline("build/node-menunav/node-menunav.js", 2005);
oMenuLabel._clickHandle.detach();
											
											_yuitest_coverline("build/node-menunav/node-menunav.js", 2007);
oMenuLabel._clickHandle = null;

										});
										
									}
									
								}
								
							}

						}


						_yuitest_coverline("build/node-menunav/node-menunav.js", 2020);
if (sType === CLICK) {
						
							//	Prevent the browser from following the URL of 
							//	the anchor element
							
							_yuitest_coverline("build/node-menunav/node-menunav.js", 2025);
event.preventDefault();
						
						}
					
					}
				
				}				


			}
		
		}
	
	},
	

	/**
	* @method _onKeyPress
	* @description "keypress" event handler for the menu.
	* @protected
	* @param {Object} event Object representing the DOM event.
	*/
	_onKeyPress: function (event) {
	
		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "_onKeyPress", 2047);
_yuitest_coverline("build/node-menunav/node-menunav.js", 2049);
switch (event.keyCode) {

			case 37:	//	left arrow
			case 38:	//	up arrow
			case 39:	//	right arrow
			case 40:	//	down arrow

				//	Prevent the browser from scrolling the window

				_yuitest_coverline("build/node-menunav/node-menunav.js", 2058);
event.preventDefault();

			_yuitest_coverline("build/node-menunav/node-menunav.js", 2060);
break;

		}						

	},	


	/**
	* @method _onKeyDown
	* @description "keydown" event handler for the menu.
	* @protected
	* @param {Object} event Object representing the DOM event.
	*/
	_onKeyDown: function (event) {

		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "_onKeyDown", 2073);
_yuitest_coverline("build/node-menunav/node-menunav.js", 2075);
var menuNav = this,
			oActiveItem = menuNav._activeItem,
			oTarget = event.target,
			oActiveMenu = getParentMenu(oTarget),
			oSubmenu;

		_yuitest_coverline("build/node-menunav/node-menunav.js", 2081);
if (oActiveMenu) {

			_yuitest_coverline("build/node-menunav/node-menunav.js", 2083);
menuNav._activeMenu = oActiveMenu;

			_yuitest_coverline("build/node-menunav/node-menunav.js", 2085);
if (isHorizontalMenu(oActiveMenu)) {
				_yuitest_coverline("build/node-menunav/node-menunav.js", 2086);
menuNav._onHorizontalMenuKeyDown(event);
			}
			else {
				_yuitest_coverline("build/node-menunav/node-menunav.js", 2089);
menuNav._onVerticalMenuKeyDown(event);
			}


			_yuitest_coverline("build/node-menunav/node-menunav.js", 2093);
if (event.keyCode === 27) {

				_yuitest_coverline("build/node-menunav/node-menunav.js", 2095);
if (!menuNav._isRoot(oActiveMenu)) {

					_yuitest_coverline("build/node-menunav/node-menunav.js", 2097);
if (UA.opera) {
						_yuitest_coverline("build/node-menunav/node-menunav.js", 2098);
later(0, menuNav, function () {
							_yuitest_coverfunc("build/node-menunav/node-menunav.js", "(anonymous 9)", 2098);
_yuitest_coverline("build/node-menunav/node-menunav.js", 2099);
menuNav._hideMenu(oActiveMenu, true);
						});						
					}
					else {
						_yuitest_coverline("build/node-menunav/node-menunav.js", 2103);
menuNav._hideMenu(oActiveMenu, true);						
					}

					_yuitest_coverline("build/node-menunav/node-menunav.js", 2106);
event.stopPropagation();
					_yuitest_coverline("build/node-menunav/node-menunav.js", 2107);
menuNav._blockMouseEvent = UA.gecko ? true : false;

				}
				else {_yuitest_coverline("build/node-menunav/node-menunav.js", 2110);
if (oActiveItem) {

					_yuitest_coverline("build/node-menunav/node-menunav.js", 2112);
if (isMenuLabel(oActiveItem) && 
							hasVisibleSubmenu(oActiveItem)) {
					
						_yuitest_coverline("build/node-menunav/node-menunav.js", 2115);
oSubmenu = oActiveItem.next();

						_yuitest_coverline("build/node-menunav/node-menunav.js", 2117);
if (oSubmenu) {
							_yuitest_coverline("build/node-menunav/node-menunav.js", 2118);
menuNav._hideMenu(oSubmenu);
						}

					}
					else {

						_yuitest_coverline("build/node-menunav/node-menunav.js", 2124);
menuNav._focusManager.blur();

						//	This is necessary for Webkit since blurring the 
						//	active menuitem won't result in the document 
						//	gaining focus, meaning the that _onDocFocus 
						//	listener won't clear the active menuitem.

						_yuitest_coverline("build/node-menunav/node-menunav.js", 2131);
menuNav._clearActiveItem();	
						
						_yuitest_coverline("build/node-menunav/node-menunav.js", 2133);
menuNav._hasFocus = false;

					}

				}}
			
			}
		
		}
	
	},
	
	/**
	* @method _onDocMouseDown
	* @description "mousedown" event handler for the owner document of 
	* the menu.
	* @protected
	* @param {Object} event Object representing the DOM event.
	*/
	_onDocMouseDown: function (event) {

		_yuitest_coverfunc("build/node-menunav/node-menunav.js", "_onDocMouseDown", 2152);
_yuitest_coverline("build/node-menunav/node-menunav.js", 2154);
var menuNav = this,
			oRoot = menuNav._rootMenu,
			oTarget = event.target;


		_yuitest_coverline("build/node-menunav/node-menunav.js", 2159);
if (!(oRoot.compareTo(oTarget) || oRoot.contains(oTarget))) {

			_yuitest_coverline("build/node-menunav/node-menunav.js", 2161);
menuNav._hideAllSubmenus(oRoot);

			//	Document doesn't receive focus in Webkit when the user mouses 
			//	down on it, so the "_hasFocus" property won't get set to the 
			//	correct value.  The following line corrects the problem.

			_yuitest_coverline("build/node-menunav/node-menunav.js", 2167);
if (UA.webkit) {
				_yuitest_coverline("build/node-menunav/node-menunav.js", 2168);
menuNav._hasFocus = false;
				_yuitest_coverline("build/node-menunav/node-menunav.js", 2169);
menuNav._clearActiveItem();
			}

		}

	}
	
});


_yuitest_coverline("build/node-menunav/node-menunav.js", 2179);
Y.namespace('Plugin');

_yuitest_coverline("build/node-menunav/node-menunav.js", 2181);
Y.Plugin.NodeMenuNav = NodeMenuNav;


}, '3.7.3', {"requires": ["node", "classnamemanager", "plugin", "node-focusmanager"], "skinnable": true});