<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html xmlns:yui="http://yuilibrary.com/rdf/1.0/yui.rdf#">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>API: node-menunav node-menunav.js (YUI Library)</title>
<link rel="stylesheet" type="text/css" href="assets/reset-fonts-grids-min.css" />
<link rel="stylesheet" type="text/css" href="assets/api.css" />
<script type="text/javascript" src="assets/api-js"></script>
<script type="text/javascript" src="assets/ac-js"></script>
</head>
<body id="yahoo-com">
<div id="doc3" class="yui-t2">
<div id="hd">
<h1><a href="http://developer.yahoo.com/yui/" title="Yahoo! UI Library">Yahoo! UI Library</a></h1>
<h3>node-menunav <span class="subtitle">3.0.0</span></h3>
<a href="./index.html" title="Yahoo! UI Library">Yahoo! UI Library</a>
> <a href="./module_node-menunav.html" title="node-menunav">node-menunav</a>
> node-menunav.js (source view)
<form onsubmit="return false">
<div id="propertysearch">
Search: <input autocomplete="off" id="searchinput" />
<div id="searchresults">
</div>
</div>
</form>
</div>
<div id="bd">
<div id="yui-main">
<div class="yui-b">
<form action="#" name="yui-classopts-form" method="get" id="yui-classopts-form">
<fieldset>
<legend>Filters</legend>
<span class="classopts"><input type="checkbox" name="show_private" id="show_private" /> <label for="show_private">Show Private</label></span>
<span class="classopts"><input type="checkbox" name="show_protected" id="show_protected" /> <label for="show_protected">Show Protected</label></span>
<span class="classopts"><input type="checkbox" name="show_deprecated" id="show_deprecated" /> <label for="show_deprecated">Show Deprecated</label></span>
</fieldset>
</form>
<div id="srcout">
<style>
#doc3 .classopts { display:none; }
</style>
<div class="highlight" ><pre><span class="c">/**</span>
<span class="c">* <p>The MenuNav Node Plugin makes it easy to transform existing list-based </span>
<span class="c">* markup into traditional, drop down navigational menus that are both accessible </span>
<span class="c">* and easy to customize, and only require a small set of dependencies.</p></span>
<span class="c">* </span>
<span class="c">* </span>
<span class="c">* <p>To use the MenuNav Node Plugin, simply pass a reference to the plugin to a </span>
<span class="c">* Node instance's <code>plug</code> method.</p></span>
<span class="c">* </span>
<span class="c">* <p></span>
<span class="c">* <code></span>
<span class="c">* &#60;script type="text/javascript"&#62; <br></span>
<span class="c">* <br></span>
<span class="c">* // Call the "use" method, passing in "node-menunav". This will <br></span>
<span class="c">* // load the script and CSS for the MenuNav Node Plugin and all of <br></span>
<span class="c">* // the required dependencies. <br></span>
<span class="c">* <br></span>
<span class="c">* YUI().use("node-menunav", function(Y) { <br></span>
<span class="c">* <br></span>
<span class="c">* // Use the "contentready" event to initialize the menu when <br></span>
<span class="c">* // the subtree of element representing the root menu <br></span>
<span class="c">* // (&#60;div id="menu-1"&#62;) is ready to be scripted. <br></span>
<span class="c">* <br></span>
<span class="c">* Y.on("contentready", function () { <br></span>
<span class="c">* <br></span>
<span class="c">* // The scope of the callback will be a Node instance <br></span>
<span class="c">* // representing the root menu (&#60;div id="menu-1"&#62;). <br></span>
<span class="c">* // Therefore, since "this" represents a Node instance, it <br></span>
<span class="c">* // is possible to just call "this.plug" passing in a <br></span>
<span class="c">* // reference to the MenuNav Node Plugin. <br></span>
<span class="c">* <br></span>
<span class="c">* this.plug(Y.Plugin.NodeMenuNav); <br></span>
<span class="c">* <br></span>
<span class="c">* }, "#menu-1"); <br></span>
<span class="c">* <br> </span>
<span class="c">* }); <br></span>
<span class="c">* <br> </span>
<span class="c">* &#60;/script&#62; <br></span>
<span class="c">* </code></span>
<span class="c">* </p></span>
<span class="c">*</span>
<span class="c">* <p>The MenuNav Node Plugin has several configuration properties that can be </span>
<span class="c">* set via an object literal that is passed as a second argument to a Node </span>
<span class="c">* instance's <code>plug</code> method.</span>
<span class="c">* </p></span>
<span class="c">*</span>
<span class="c">* <p></span>
<span class="c">* <code></span>
<span class="c">* &#60;script type="text/javascript"&#62; <br></span>
<span class="c">* <br></span>
<span class="c">* // Call the "use" method, passing in "node-menunav". This will <br></span>
<span class="c">* // load the script and CSS for the MenuNav Node Plugin and all of <br></span>
<span class="c">* // the required dependencies. <br></span>
<span class="c">* <br></span>
<span class="c">* YUI().use("node-menunav", function(Y) { <br></span>
<span class="c">* <br></span>
<span class="c">* // Use the "contentready" event to initialize the menu when <br></span>
<span class="c">* // the subtree of element representing the root menu <br></span>
<span class="c">* // (&#60;div id="menu-1"&#62;) is ready to be scripted. <br></span>
<span class="c">* <br></span>
<span class="c">* Y.on("contentready", function () { <br></span>
<span class="c">* <br></span>
<span class="c">* // The scope of the callback will be a Node instance <br></span>
<span class="c">* // representing the root menu (&#60;div id="menu-1"&#62;). <br></span>
<span class="c">* // Therefore, since "this" represents a Node instance, it <br></span>
<span class="c">* // is possible to just call "this.plug" passing in a <br></span>
<span class="c">* // reference to the MenuNav Node Plugin. <br></span>
<span class="c">* <br></span>
<span class="c">* this.plug(Y.Plugin.NodeMenuNav, { mouseOutHideDelay: 1000 });</span>
<span class="c">* <br><br></span>
<span class="c">* }, "#menu-1"); <br></span>
<span class="c">* <br> </span>
<span class="c">* }); <br></span>
<span class="c">* <br> </span>
<span class="c">* &#60;/script&#62; <br></span>
<span class="c">* </code></span>
<span class="c">* </p></span>
<span class="c">* </span>
<span class="c">* @module node-menunav</span>
<span class="c">*/</span>
<span class="c">// Util shortcuts</span>
<span class="c"></span>
<span class="k">var</span> <span class="nx">UA</span> <span class="o">=</span> <span class="nx">Y</span><span class="o">.</span><span class="nx">UA</span><span class="o">,</span>
<span class="nx">later</span> <span class="o">=</span> <span class="nx">Y</span><span class="o">.</span><span class="nx">later</span><span class="o">,</span>
<span class="nx">getClassName</span> <span class="o">=</span> <span class="nx">Y</span><span class="o">.</span><span class="nx">ClassNameManager</span><span class="o">.</span><span class="nx">getClassName</span><span class="o">,</span>
<span class="c">// Frequently used strings</span>
<span class="c"></span>
<span class="nx">MENU</span> <span class="o">=</span> <span class="s2">"menu"</span><span class="o">,</span>
<span class="nx">MENUITEM</span> <span class="o">=</span> <span class="s2">"menuitem"</span><span class="o">,</span>
<span class="nx">HIDDEN</span> <span class="o">=</span> <span class="s2">"hidden"</span><span class="o">,</span>
<span class="nx">PARENT_NODE</span> <span class="o">=</span> <span class="s2">"parentNode"</span><span class="o">,</span>
<span class="nx">CHILDREN</span> <span class="o">=</span> <span class="s2">"children"</span><span class="o">,</span>
<span class="nx">OFFSET_HEIGHT</span> <span class="o">=</span> <span class="s2">"offsetHeight"</span><span class="o">,</span>
<span class="nx">OFFSET_WIDTH</span> <span class="o">=</span> <span class="s2">"offsetWidth"</span><span class="o">,</span>
<span class="nx">PX</span> <span class="o">=</span> <span class="s2">"px"</span><span class="o">,</span>
<span class="nx">ID</span> <span class="o">=</span> <span class="s2">"id"</span><span class="o">,</span>
<span class="nx">PERIOD</span> <span class="o">=</span> <span class="s2">"."</span><span class="o">,</span>
<span class="nx">HANDLED_MOUSEOUT</span> <span class="o">=</span> <span class="s2">"handledMouseOut"</span><span class="o">,</span>
<span class="nx">HANDLED_MOUSEOVER</span> <span class="o">=</span> <span class="s2">"handledMouseOver"</span><span class="o">,</span>
<span class="nx">ACTIVE</span> <span class="o">=</span> <span class="s2">"active"</span><span class="o">,</span>
<span class="nx">LABEL</span> <span class="o">=</span> <span class="s2">"label"</span><span class="o">,</span>
<span class="nx">LOWERCASE_A</span> <span class="o">=</span> <span class="s2">"a"</span><span class="o">,</span>
<span class="nx">MOUSEDOWN</span> <span class="o">=</span> <span class="s2">"mousedown"</span><span class="o">,</span>
<span class="nx">KEYDOWN</span> <span class="o">=</span> <span class="s2">"keydown"</span><span class="o">,</span>
<span class="nx">CLICK</span> <span class="o">=</span> <span class="s2">"click"</span><span class="o">,</span>
<span class="nx">EMPTY_STRING</span> <span class="o">=</span> <span class="s2">""</span><span class="o">,</span>
<span class="nx">FIRST_OF_TYPE</span> <span class="o">=</span> <span class="s2">"first-of-type"</span><span class="o">,</span>
<span class="nx">ROLE</span> <span class="o">=</span> <span class="s2">"role"</span><span class="o">,</span>
<span class="nx">PRESENTATION</span> <span class="o">=</span> <span class="s2">"presentation"</span><span class="o">,</span>
<span class="nx">DESCENDANTS</span> <span class="o">=</span> <span class="s2">"descendants"</span><span class="o">,</span>
<span class="nx">UI</span> <span class="o">=</span> <span class="s2">"UI"</span><span class="o">,</span>
<span class="nx">ACTIVE_DESCENDANT</span> <span class="o">=</span> <span class="s2">"activeDescendant"</span><span class="o">,</span>
<span class="nx">USE_ARIA</span> <span class="o">=</span> <span class="s2">"useARIA"</span><span class="o">,</span>
<span class="nx">ARIA_HIDDEN</span> <span class="o">=</span> <span class="s2">"aria-hidden"</span><span class="o">,</span>
<span class="nx">CONTENT</span> <span class="o">=</span> <span class="s2">"content"</span><span class="o">,</span>
<span class="nx">HOST</span> <span class="o">=</span> <span class="s2">"host"</span><span class="o">,</span>
<span class="nx">ACTIVE_DESCENDANT_CHANGE</span> <span class="o">=</span> <span class="nx">ACTIVE_DESCENDANT</span> <span class="o">+</span> <span class="s2">"Change"</span><span class="o">,</span>
<span class="nx">STANDARD_QUERY</span> <span class="o">=</span> <span class="s2">">.yui-menu-content>ul>li>a"</span><span class="o">,</span>
<span class="nx">EXTENDED_QUERY</span> <span class="o">=</span> <span class="s2">">.yui-menu-content>ul>li>.yui-menu-label>a:first-child"</span><span class="o">,</span>
<span class="c">// Attribute keys</span>
<span class="c"></span>
<span class="nx">AUTO_SUBMENU_DISPLAY</span> <span class="o">=</span> <span class="s2">"autoSubmenuDisplay"</span><span class="o">,</span>
<span class="nx">MOUSEOUT_HIDE_DELAY</span> <span class="o">=</span> <span class="s2">"mouseOutHideDelay"</span><span class="o">,</span>
<span class="c">// CSS class names</span>
<span class="c"></span>
<span class="nx">CSS_MENU</span> <span class="o">=</span> <span class="nx">getClassName</span><span class="o">(</span><span class="nx">MENU</span><span class="o">),</span>
<span class="nx">CSS_MENU_HIDDEN</span> <span class="o">=</span> <span class="nx">getClassName</span><span class="o">(</span><span class="nx">MENU</span><span class="o">,</span> <span class="nx">HIDDEN</span><span class="o">),</span>
<span class="nx">CSS_MENU_HORIZONTAL</span> <span class="o">=</span> <span class="nx">getClassName</span><span class="o">(</span><span class="nx">MENU</span><span class="o">,</span> <span class="s2">"horizontal"</span><span class="o">),</span>
<span class="nx">CSS_MENU_LABEL</span> <span class="o">=</span> <span class="nx">getClassName</span><span class="o">(</span><span class="nx">MENU</span><span class="o">,</span> <span class="nx">LABEL</span><span class="o">),</span>
<span class="nx">CSS_MENU_LABEL_ACTIVE</span> <span class="o">=</span> <span class="nx">getClassName</span><span class="o">(</span><span class="nx">MENU</span><span class="o">,</span> <span class="nx">LABEL</span><span class="o">,</span> <span class="nx">ACTIVE</span><span class="o">),</span>
<span class="nx">CSS_MENU_LABEL_MENUVISIBLE</span> <span class="o">=</span> <span class="nx">getClassName</span><span class="o">(</span><span class="nx">MENU</span><span class="o">,</span> <span class="nx">LABEL</span><span class="o">,</span> <span class="o">(</span><span class="nx">MENU</span> <span class="o">+</span> <span class="s2">"visible"</span><span class="o">)),</span>
<span class="nx">CSS_MENUITEM</span> <span class="o">=</span> <span class="nx">getClassName</span><span class="o">(</span><span class="nx">MENUITEM</span><span class="o">),</span>
<span class="nx">CSS_MENUITEM_ACTIVE</span> <span class="o">=</span> <span class="nx">getClassName</span><span class="o">(</span><span class="nx">MENUITEM</span><span class="o">,</span> <span class="nx">ACTIVE</span><span class="o">),</span>
<span class="c">// CSS selectors</span>
<span class="c"></span>
<span class="nx">MENU_SELECTOR</span> <span class="o">=</span> <span class="nx">PERIOD</span> <span class="o">+</span> <span class="nx">CSS_MENU</span><span class="o">,</span>
<span class="nx">MENU_TOGGLE_SELECTOR</span> <span class="o">=</span> <span class="o">(</span><span class="nx">PERIOD</span> <span class="o">+</span> <span class="nx">getClassName</span><span class="o">(</span><span class="nx">MENU</span><span class="o">,</span> <span class="s2">"toggle"</span><span class="o">));</span>
<span class="c">// Utility functions</span>
<span class="c"></span>
<span class="k">var</span> <span class="nx">getPreviousSibling</span> <span class="o">=</span> <span class="k">function</span> <span class="o">(</span><span class="nx">node</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oPrevious</span> <span class="o">=</span> <span class="nx">node</span><span class="o">.</span><span class="nx">previous</span><span class="o">(),</span>
<span class="nx">oChildren</span><span class="o">;</span>
<span class="k">if</span> <span class="o">(!</span><span class="nx">oPrevious</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oChildren</span> <span class="o">=</span> <span class="nx">node</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">PARENT_NODE</span><span class="o">).</span><span class="nx">get</span><span class="o">(</span><span class="nx">CHILDREN</span><span class="o">);</span>
<span class="nx">oPrevious</span> <span class="o">=</span> <span class="nx">oChildren</span><span class="o">.</span><span class="nx">item</span><span class="o">(</span><span class="nx">oChildren</span><span class="o">.</span><span class="nx">size</span><span class="o">()</span> <span class="o">-</span> <span class="m">1</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">return</span> <span class="nx">oPrevious</span><span class="o">;</span>
<span class="o">};</span>
<span class="k">var</span> <span class="nx">getNextSibling</span> <span class="o">=</span> <span class="k">function</span> <span class="o">(</span><span class="nx">node</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oNext</span> <span class="o">=</span> <span class="nx">node</span><span class="o">.</span><span class="nx">next</span><span class="o">();</span>
<span class="k">if</span> <span class="o">(!</span><span class="nx">oNext</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oNext</span> <span class="o">=</span> <span class="nx">node</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">PARENT_NODE</span><span class="o">).</span><span class="nx">get</span><span class="o">(</span><span class="nx">CHILDREN</span><span class="o">).</span><span class="nx">item</span><span class="o">(</span><span class="m">0</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">return</span> <span class="nx">oNext</span><span class="o">;</span>
<span class="o">};</span>
<span class="k">var</span> <span class="nx">isAnchor</span> <span class="o">=</span> <span class="k">function</span> <span class="o">(</span><span class="nx">node</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">bReturnVal</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">node</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">bReturnVal</span> <span class="o">=</span> <span class="nx">node</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">"nodeName"</span><span class="o">).</span><span class="nx">toLowerCase</span><span class="o">()</span> <span class="o">===</span> <span class="nx">LOWERCASE_A</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">return</span> <span class="nx">bReturnVal</span><span class="o">;</span>
<span class="o">};</span>
<span class="k">var</span> <span class="nx">isMenuItem</span> <span class="o">=</span> <span class="k">function</span> <span class="o">(</span><span class="nx">node</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">node</span><span class="o">.</span><span class="nx">hasClass</span><span class="o">(</span><span class="nx">CSS_MENUITEM</span><span class="o">);</span>
<span class="o">};</span>
<span class="k">var</span> <span class="nx">isMenuLabel</span> <span class="o">=</span> <span class="k">function</span> <span class="o">(</span><span class="nx">node</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">node</span><span class="o">.</span><span class="nx">hasClass</span><span class="o">(</span><span class="nx">CSS_MENU_LABEL</span><span class="o">);</span>
<span class="o">};</span>
<span class="k">var</span> <span class="nx">isHorizontalMenu</span> <span class="o">=</span> <span class="k">function</span> <span class="o">(</span><span class="nx">menu</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">menu</span><span class="o">.</span><span class="nx">hasClass</span><span class="o">(</span><span class="nx">CSS_MENU_HORIZONTAL</span><span class="o">);</span>
<span class="o">};</span>
<span class="k">var</span> <span class="nx">hasVisibleSubmenu</span> <span class="o">=</span> <span class="k">function</span> <span class="o">(</span><span class="nx">menuLabel</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">menuLabel</span><span class="o">.</span><span class="nx">hasClass</span><span class="o">(</span><span class="nx">CSS_MENU_LABEL_MENUVISIBLE</span><span class="o">);</span>
<span class="o">};</span>
<span class="k">var</span> <span class="nx">getItemAnchor</span> <span class="o">=</span> <span class="k">function</span> <span class="o">(</span><span class="nx">node</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">isAnchor</span><span class="o">(</span><span class="nx">node</span><span class="o">)</span> <span class="o">?</span> <span class="nx">node</span> <span class="o">:</span> <span class="nx">node</span><span class="o">.</span><span class="nx">one</span><span class="o">(</span><span class="nx">LOWERCASE_A</span><span class="o">);</span>
<span class="o">};</span>
<span class="k">var</span> <span class="nx">getNodeWithClass</span> <span class="o">=</span> <span class="k">function</span> <span class="o">(</span><span class="nx">node</span><span class="o">,</span> <span class="nx">className</span><span class="o">,</span> <span class="nx">searchAncestors</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oItem</span><span class="o">;</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">node</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">node</span><span class="o">.</span><span class="nx">hasClass</span><span class="o">(</span><span class="nx">className</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">oItem</span> <span class="o">=</span> <span class="nx">node</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">if</span> <span class="o">(!</span><span class="nx">oItem</span> <span class="o">&&</span> <span class="nx">searchAncestors</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oItem</span> <span class="o">=</span> <span class="nx">node</span><span class="o">.</span><span class="nx">ancestor</span><span class="o">((</span><span class="nx">PERIOD</span> <span class="o">+</span> <span class="nx">className</span><span class="o">));</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">return</span> <span class="nx">oItem</span><span class="o">;</span>
<span class="o">};</span>
<span class="k">var</span> <span class="nx">getParentMenu</span> <span class="o">=</span> <span class="k">function</span> <span class="o">(</span><span class="nx">node</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">node</span><span class="o">.</span><span class="nx">ancestor</span><span class="o">(</span><span class="nx">MENU_SELECTOR</span><span class="o">);</span>
<span class="o">};</span>
<span class="k">var</span> <span class="nx">getMenu</span> <span class="o">=</span> <span class="k">function</span> <span class="o">(</span><span class="nx">node</span><span class="o">,</span> <span class="nx">searchAncestors</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">getNodeWithClass</span><span class="o">(</span><span class="nx">node</span><span class="o">,</span> <span class="nx">CSS_MENU</span><span class="o">,</span> <span class="nx">searchAncestors</span><span class="o">);</span>
<span class="o">};</span>
<span class="k">var</span> <span class="nx">getMenuItem</span> <span class="o">=</span> <span class="k">function</span> <span class="o">(</span><span class="nx">node</span><span class="o">,</span> <span class="nx">searchAncestors</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oItem</span><span class="o">;</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">node</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oItem</span> <span class="o">=</span> <span class="nx">getNodeWithClass</span><span class="o">(</span><span class="nx">node</span><span class="o">,</span> <span class="nx">CSS_MENUITEM</span><span class="o">,</span> <span class="nx">searchAncestors</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">return</span> <span class="nx">oItem</span><span class="o">;</span>
<span class="o">};</span>
<span class="k">var</span> <span class="nx">getMenuLabel</span> <span class="o">=</span> <span class="k">function</span> <span class="o">(</span><span class="nx">node</span><span class="o">,</span> <span class="nx">searchAncestors</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oItem</span><span class="o">;</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">node</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">searchAncestors</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oItem</span> <span class="o">=</span> <span class="nx">getNodeWithClass</span><span class="o">(</span><span class="nx">node</span><span class="o">,</span> <span class="nx">CSS_MENU_LABEL</span><span class="o">,</span> <span class="nx">searchAncestors</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">oItem</span> <span class="o">=</span> <span class="nx">getNodeWithClass</span><span class="o">(</span><span class="nx">node</span><span class="o">,</span> <span class="nx">CSS_MENU_LABEL</span><span class="o">)</span> <span class="o">||</span>
<span class="nx">node</span><span class="o">.</span><span class="nx">one</span><span class="o">((</span><span class="nx">PERIOD</span> <span class="o">+</span> <span class="nx">CSS_MENU_LABEL</span><span class="o">));</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">return</span> <span class="nx">oItem</span><span class="o">;</span>
<span class="o">};</span>
<span class="k">var</span> <span class="nx">getItem</span> <span class="o">=</span> <span class="k">function</span> <span class="o">(</span><span class="nx">node</span><span class="o">,</span> <span class="nx">searchAncestors</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oItem</span><span class="o">;</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">node</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oItem</span> <span class="o">=</span> <span class="nx">getMenuItem</span><span class="o">(</span><span class="nx">node</span><span class="o">,</span> <span class="nx">searchAncestors</span><span class="o">)</span> <span class="o">||</span>
<span class="nx">getMenuLabel</span><span class="o">(</span><span class="nx">node</span><span class="o">,</span> <span class="nx">searchAncestors</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">return</span> <span class="nx">oItem</span><span class="o">;</span>
<span class="o">};</span>
<span class="k">var</span> <span class="nx">getFirstItem</span> <span class="o">=</span> <span class="k">function</span> <span class="o">(</span><span class="nx">menu</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">getItem</span><span class="o">(</span><span class="nx">menu</span><span class="o">.</span><span class="nx">one</span><span class="o">(</span><span class="s2">"li"</span><span class="o">));</span>
<span class="o">};</span>
<span class="k">var</span> <span class="nx">getActiveClass</span> <span class="o">=</span> <span class="k">function</span> <span class="o">(</span><span class="nx">node</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">isMenuItem</span><span class="o">(</span><span class="nx">node</span><span class="o">)</span> <span class="o">?</span> <span class="nx">CSS_MENUITEM_ACTIVE</span> <span class="o">:</span> <span class="nx">CSS_MENU_LABEL_ACTIVE</span><span class="o">;</span>
<span class="o">};</span>
<span class="k">var</span> <span class="nx">handleMouseOverForNode</span> <span class="o">=</span> <span class="k">function</span> <span class="o">(</span><span class="nx">node</span><span class="o">,</span> <span class="nx">target</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">node</span> <span class="o">&&</span> <span class="o">!</span><span class="nx">node</span><span class="o">[</span><span class="nx">HANDLED_MOUSEOVER</span><span class="o">]</span> <span class="o">&&</span>
<span class="o">(</span><span class="nx">node</span><span class="o">.</span><span class="nx">compareTo</span><span class="o">(</span><span class="nx">target</span><span class="o">)</span> <span class="o">||</span> <span class="nx">node</span><span class="o">.</span><span class="nx">contains</span><span class="o">(</span><span class="nx">target</span><span class="o">));</span>
<span class="o">};</span>
<span class="k">var</span> <span class="nx">handleMouseOutForNode</span> <span class="o">=</span> <span class="k">function</span> <span class="o">(</span><span class="nx">node</span><span class="o">,</span> <span class="nx">relatedTarget</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="nx">node</span> <span class="o">&&</span> <span class="o">!</span><span class="nx">node</span><span class="o">[</span><span class="nx">HANDLED_MOUSEOUT</span><span class="o">]</span> <span class="o">&&</span>
<span class="o">(!</span><span class="nx">node</span><span class="o">.</span><span class="nx">compareTo</span><span class="o">(</span><span class="nx">relatedTarget</span><span class="o">)</span> <span class="o">&&</span> <span class="o">!</span><span class="nx">node</span><span class="o">.</span><span class="nx">contains</span><span class="o">(</span><span class="nx">relatedTarget</span><span class="o">));</span>
<span class="o">};</span>
<span class="c">/**</span>
<span class="c">* The NodeMenuNav class is a plugin for a Node instance. The class is used via </span>
<span class="c">* the <a href="Node.html#method_plug"><code>plug</code></a> method of Node and </span>
<span class="c">* should not be instantiated directly.</span>
<span class="c">* @namespace plugin</span>
<span class="c">* @class NodeMenuNav</span>
<span class="c">*/</span>
<span class="k">var</span> <span class="nx">NodeMenuNav</span> <span class="o">=</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
<span class="nx">NodeMenuNav</span><span class="o">.</span><span class="nx">superclass</span><span class="o">.</span><span class="nx">constructor</span><span class="o">.</span><span class="nx">apply</span><span class="o">(</span><span class="k">this</span><span class="o">,</span> <span class="nx">arguments</span><span class="o">);</span>
<span class="o">};</span>
<span class="nx">NodeMenuNav</span><span class="o">.</span><span class="nx">NAME</span> <span class="o">=</span> <span class="s2">"nodeMenuNav"</span><span class="o">;</span>
<span class="nx">NodeMenuNav</span><span class="o">.</span><span class="nx">NS</span> <span class="o">=</span> <span class="s2">"menuNav"</span><span class="o">;</span>
<span class="c">/** </span>
<span class="c">* @property NodeMenuNav.SHIM_TEMPLATE_TITLE</span>
<span class="c">* @description String representing the value for the <code>title</code> </span>
<span class="c">* attribute for the shim used to prevent <code>&#60;select&#62;</code> elements </span>
<span class="c">* from poking through menus in IE 6.</span>
<span class="c">* @default "Menu Stacking Shim"</span>
<span class="c">* @type String</span>
<span class="c">*/</span>
<span class="nx">NodeMenuNav</span><span class="o">.</span><span class="nx">SHIM_TEMPLATE_TITLE</span> <span class="o">=</span> <span class="s2">"Menu Stacking Shim"</span><span class="o">;</span>
<span class="c">/** </span>
<span class="c">* @property NodeMenuNav.SHIM_TEMPLATE</span>
<span class="c">* @description String representing the HTML used to create the </span>
<span class="c">* <code>&#60;iframe&#62;</code> shim used to prevent </span>
<span class="c">* <code>&#60;select&#62;</code> elements from poking through menus in IE 6.</span>
<span class="c">* @default &#34;&#60;iframe frameborder=&#34;0&#34; tabindex=&#34;-1&#34; </span>
<span class="c">* class=&#34;yui-shim&#34; title=&#34;Menu Stacking Shim&#34; </span>
<span class="c">* src=&#34;javascript:false;&#34;&#62;&#60;/iframe&#62;&#34;</span>
<span class="c">* @type String</span>
<span class="c">*/</span>
<span class="c">// <iframe> shim notes:</span>
<span class="c">//</span>
<span class="c">// 1) Need to set the "frameBorder" property to 0 to suppress the default </span>
<span class="c">// <iframe> border in IE. (Setting the CSS "border" property alone doesn't </span>
<span class="c">// suppress it.) </span>
<span class="c">//</span>
<span class="c">// 2) The "src" attribute of the <iframe> is set to "javascript:false;" so </span>
<span class="c">// that it won't load a page inside it, preventing the secure/nonsecure </span>
<span class="c">// warning in IE when using HTTPS.</span>
<span class="c">//</span>
<span class="c">// 3) Since the role of the <iframe> shim is completely presentational, its </span>
<span class="c">// "tabindex" attribute is set to "-1" and its title attribute is set to </span>
<span class="c">// "Menu Stacking Shim". Both strategies help users of screen readers to </span>
<span class="c">// avoid mistakenly interacting with the <iframe> shim.</span>
<span class="c"></span>
<span class="nx">NodeMenuNav</span><span class="o">.</span><span class="nx">SHIM_TEMPLATE</span> <span class="o">=</span> <span class="s1">'<iframe frameborder="0" tabindex="-1" class="'</span> <span class="o">+</span>
<span class="nx">getClassName</span><span class="o">(</span><span class="s2">"shim"</span><span class="o">)</span> <span class="o">+</span>
<span class="s1">'" title="'</span> <span class="o">+</span> <span class="nx">NodeMenuNav</span><span class="o">.</span><span class="nx">SHIM_TEMPLATE_TITLE</span> <span class="o">+</span>
<span class="s1">'" src="javascript:false;"></iframe>'</span><span class="o">;</span>
<span class="nx">NodeMenuNav</span><span class="o">.</span><span class="nx">ATTRS</span> <span class="o">=</span> <span class="o">{</span>
<span class="c">/**</span>
<span class="c"> * Boolean indicating if use of the WAI-ARIA Roles and States should be </span>
<span class="c"> * enabled for the menu.</span>
<span class="c"> *</span>
<span class="c"> * @attribute useARIA</span>
<span class="c"> * @readOnly</span>
<span class="c"> * @writeOnce </span>
<span class="c"> * @default true</span>
<span class="c"> * @type boolean</span>
<span class="c"> */</span>
<span class="nx">useARIA</span><span class="o">:</span> <span class="o">{</span>
<span class="nx">value</span><span class="o">:</span> <span class="kc">true</span><span class="o">,</span>
<span class="nx">writeOnce</span><span class="o">:</span> <span class="kc">true</span><span class="o">,</span>
<span class="nx">lazyAdd</span><span class="o">:</span> <span class="kc">false</span><span class="o">,</span>
<span class="nx">setter</span><span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">value</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oMenu</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">HOST</span><span class="o">),</span>
<span class="nx">oMenuLabel</span><span class="o">,</span>
<span class="nx">oMenuToggle</span><span class="o">,</span>
<span class="nx">oSubmenu</span><span class="o">,</span>
<span class="nx">sID</span><span class="o">;</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">value</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oMenu</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="nx">ROLE</span><span class="o">,</span> <span class="nx">MENU</span><span class="o">);</span>
<span class="nx">oMenu</span><span class="o">.</span><span class="nx">all</span><span class="o">(</span><span class="s2">"ul,li,."</span> <span class="o">+</span> <span class="nx">getClassName</span><span class="o">(</span><span class="nx">MENU</span><span class="o">,</span> <span class="nx">CONTENT</span><span class="o">)).</span><span class="nx">set</span><span class="o">(</span><span class="nx">ROLE</span><span class="o">,</span> <span class="nx">PRESENTATION</span><span class="o">);</span>
<span class="nx">oMenu</span><span class="o">.</span><span class="nx">all</span><span class="o">((</span><span class="nx">PERIOD</span> <span class="o">+</span> <span class="nx">getClassName</span><span class="o">(</span><span class="nx">MENUITEM</span><span class="o">,</span> <span class="nx">CONTENT</span><span class="o">))).</span><span class="nx">set</span><span class="o">(</span><span class="nx">ROLE</span><span class="o">,</span> <span class="nx">MENUITEM</span><span class="o">);</span>
<span class="nx">oMenu</span><span class="o">.</span><span class="nx">all</span><span class="o">((</span><span class="nx">PERIOD</span> <span class="o">+</span> <span class="nx">CSS_MENU_LABEL</span><span class="o">)).</span><span class="nx">each</span><span class="o">(</span><span class="k">function</span> <span class="o">(</span><span class="nx">node</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oMenuLabel</span> <span class="o">=</span> <span class="nx">node</span><span class="o">;</span>
<span class="nx">oMenuToggle</span> <span class="o">=</span> <span class="nx">node</span><span class="o">.</span><span class="nx">one</span><span class="o">(</span><span class="nx">MENU_TOGGLE_SELECTOR</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oMenuToggle</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oMenuToggle</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="nx">ROLE</span><span class="o">,</span> <span class="nx">PRESENTATION</span><span class="o">);</span>
<span class="nx">oMenuLabel</span> <span class="o">=</span> <span class="nx">oMenuToggle</span><span class="o">.</span><span class="nx">previous</span><span class="o">();</span>
<span class="o">}</span>
<span class="nx">oMenuLabel</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="nx">ROLE</span><span class="o">,</span> <span class="nx">MENUITEM</span><span class="o">);</span>
<span class="nx">oMenuLabel</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="s2">"aria-haspopup"</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="nx">oSubmenu</span> <span class="o">=</span> <span class="nx">node</span><span class="o">.</span><span class="nx">next</span><span class="o">();</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oSubmenu</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oSubmenu</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="nx">ROLE</span><span class="o">,</span> <span class="nx">MENU</span><span class="o">);</span>
<span class="nx">oMenuLabel</span> <span class="o">=</span> <span class="nx">oSubmenu</span><span class="o">.</span><span class="nx">previous</span><span class="o">();</span>
<span class="nx">oMenuToggle</span> <span class="o">=</span> <span class="nx">oMenuLabel</span><span class="o">.</span><span class="nx">one</span><span class="o">(</span><span class="nx">MENU_TOGGLE_SELECTOR</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oMenuToggle</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oMenuLabel</span> <span class="o">=</span> <span class="nx">oMenuToggle</span><span class="o">;</span>
<span class="o">}</span>
<span class="nx">sID</span> <span class="o">=</span> <span class="nx">Y</span><span class="o">.</span><span class="nx">stamp</span><span class="o">(</span><span class="nx">oMenuLabel</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(!</span><span class="nx">oMenuLabel</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">ID</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">oMenuLabel</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="nx">ID</span><span class="o">,</span> <span class="nx">sID</span><span class="o">);</span>
<span class="o">}</span>
<span class="nx">oSubmenu</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="s2">"aria-labelledby"</span><span class="o">,</span> <span class="nx">sID</span><span class="o">);</span>
<span class="nx">oSubmenu</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="nx">ARIA_HIDDEN</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">});</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Boolean indicating if submenus are automatically made visible when the </span>
<span class="c"> * user mouses over the menu's items.</span>
<span class="c"> *</span>
<span class="c"> * @attribute autoSubmenuDisplay</span>
<span class="c"> * @readOnly</span>
<span class="c"> * @writeOnce </span>
<span class="c"> * @default true</span>
<span class="c"> * @type boolean</span>
<span class="c"> */</span>
<span class="nx">autoSubmenuDisplay</span><span class="o">:</span> <span class="o">{</span>
<span class="nx">value</span><span class="o">:</span> <span class="kc">true</span><span class="o">,</span>
<span class="nx">writeOnce</span><span class="o">:</span> <span class="kc">true</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Number indicating the time (in milliseconds) that should expire before a </span>
<span class="c"> * submenu is made visible when the user mouses over the menu's label.</span>
<span class="c"> *</span>
<span class="c"> * @attribute submenuShowDelay</span>
<span class="c"> * @readOnly</span>
<span class="c"> * @writeOnce </span>
<span class="c"> * @default 250</span>
<span class="c"> * @type Number</span>
<span class="c"> */</span>
<span class="nx">submenuShowDelay</span><span class="o">:</span> <span class="o">{</span>
<span class="nx">value</span><span class="o">:</span> <span class="m">250</span><span class="o">,</span>
<span class="nx">writeOnce</span><span class="o">:</span> <span class="kc">true</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Number indicating the time (in milliseconds) that should expire before a </span>
<span class="c"> * submenu is hidden when the user mouses out of a menu label heading in the </span>
<span class="c"> * direction of a submenu. </span>
<span class="c"> *</span>
<span class="c"> * @attribute submenuHideDelay</span>
<span class="c"> * @readOnly</span>
<span class="c"> * @writeOnce </span>
<span class="c"> * @default 250</span>
<span class="c"> * @type Number</span>
<span class="c"> */</span>
<span class="nx">submenuHideDelay</span><span class="o">:</span> <span class="o">{</span>
<span class="nx">value</span><span class="o">:</span> <span class="m">250</span><span class="o">,</span>
<span class="nx">writeOnce</span><span class="o">:</span> <span class="kc">true</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * Number indicating the time (in milliseconds) that should expire before a </span>
<span class="c"> * submenu is hidden when the user mouses out of it.</span>
<span class="c"> * </span>
<span class="c"> * @attribute mouseOutHideDelay</span>
<span class="c"> * @readOnly</span>
<span class="c"> * @writeOnce </span>
<span class="c"> * @default 750</span>
<span class="c"> * @type Number</span>
<span class="c"> */</span>
<span class="nx">mouseOutHideDelay</span><span class="o">:</span> <span class="o">{</span>
<span class="nx">value</span><span class="o">:</span> <span class="m">750</span><span class="o">,</span>
<span class="nx">writeOnce</span><span class="o">:</span> <span class="kc">true</span>
<span class="o">}</span>
<span class="o">};</span>
<span class="nx">Y</span><span class="o">.</span><span class="nx">extend</span><span class="o">(</span><span class="nx">NodeMenuNav</span><span class="o">,</span> <span class="nx">Y</span><span class="o">.</span><span class="nx">Plugin</span><span class="o">.</span><span class="nx">Base</span><span class="o">,</span> <span class="o">{</span>
<span class="c">// Protected properties</span>
<span class="c"></span>
<span class="c">/** </span>
<span class="c"> * @property _rootMenu</span>
<span class="c"> * @description Node instance representing the root menu in the menu.</span>
<span class="c"> * @default null</span>
<span class="c"> * @protected</span>
<span class="c"> * @type Node</span>
<span class="c"> */</span>
<span class="nx">_rootMenu</span><span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/** </span>
<span class="c"> * @property _activeItem</span>
<span class="c"> * @description Node instance representing the menu's active descendent: </span>
<span class="c"> * the menuitem or menu label the user is currently interacting with.</span>
<span class="c"> * @default null</span>
<span class="c"> * @protected</span>
<span class="c"> * @type Node</span>
<span class="c"> */</span>
<span class="nx">_activeItem</span><span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/** </span>
<span class="c"> * @property _activeMenu</span>
<span class="c"> * @description Node instance representing the menu that is the parent of </span>
<span class="c"> * the menu's active descendent.</span>
<span class="c"> * @default null</span>
<span class="c"> * @protected</span>
<span class="c"> * @type Node</span>
<span class="c"> */</span>
<span class="nx">_activeMenu</span><span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/** </span>
<span class="c"> * @property _hasFocus</span>
<span class="c"> * @description Boolean indicating if the menu has focus.</span>
<span class="c"> * @default false</span>
<span class="c"> * @protected</span>
<span class="c"> * @type Boolean</span>
<span class="c"> */</span>
<span class="nx">_hasFocus</span><span class="o">:</span> <span class="kc">false</span><span class="o">,</span>
<span class="c">// In gecko-based browsers a mouseover and mouseout event will fire even </span>
<span class="c"></span> <span class="c">// if a DOM element moves out from under the mouse without the user </span>
<span class="c"></span> <span class="c">// actually moving the mouse. This bug affects NodeMenuNav because the </span>
<span class="c"></span> <span class="c">// user can hit the Esc key to hide a menu, and if the mouse is over the </span>
<span class="c"></span> <span class="c">// menu when the user presses Esc, the _onMenuMouseOut handler will be </span>
<span class="c"></span> <span class="c">// called. To fix this bug the following flag (_blockMouseEvent) is used </span>
<span class="c"></span> <span class="c">// to block the code in the _onMenuMouseOut handler from executing.</span>
<span class="c"></span>
<span class="c">/** </span>
<span class="c"> * @property _blockMouseEvent</span>
<span class="c"> * @description Boolean indicating whether or not to handle the </span>
<span class="c"> * "mouseover" event.</span>
<span class="c"> * @default false</span>
<span class="c"> * @protected</span>
<span class="c"> * @type Boolean</span>
<span class="c"> */</span>
<span class="nx">_blockMouseEvent</span><span class="o">:</span> <span class="kc">false</span><span class="o">,</span>
<span class="c">/** </span>
<span class="c"> * @property _currentMouseX</span>
<span class="c"> * @description Number representing the current x coordinate of the mouse </span>
<span class="c"> * inside the menu.</span>
<span class="c"> * @default 0</span>
<span class="c"> * @protected</span>
<span class="c"> * @type Number</span>
<span class="c"> */</span>
<span class="nx">_currentMouseX</span><span class="o">:</span> <span class="m">0</span><span class="o">,</span>
<span class="c">/** </span>
<span class="c"> * @property _movingToSubmenu</span>
<span class="c"> * @description Boolean indicating if the mouse is moving from a menu </span>
<span class="c"> * label to its corresponding submenu.</span>
<span class="c"> * @default false</span>
<span class="c"> * @protected</span>
<span class="c"> * @type Boolean</span>
<span class="c"> */</span>
<span class="nx">_movingToSubmenu</span><span class="o">:</span> <span class="kc">false</span><span class="o">,</span>
<span class="c">/** </span>
<span class="c"> * @property _showSubmenuTimer</span>
<span class="c"> * @description Timer used to show a submenu.</span>
<span class="c"> * @default null</span>
<span class="c"> * @protected</span>
<span class="c"> * @type Object</span>
<span class="c"> */</span>
<span class="nx">_showSubmenuTimer</span><span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/** </span>
<span class="c"> * @property _hideSubmenuTimer</span>
<span class="c"> * @description Timer used to hide a submenu.</span>
<span class="c"> * @default null</span>
<span class="c"> * @protected</span>
<span class="c"> * @type Object</span>
<span class="c"> */</span>
<span class="nx">_hideSubmenuTimer</span><span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/** </span>
<span class="c"> * @property _hideAllSubmenusTimer</span>
<span class="c"> * @description Timer used to hide a all submenus.</span>
<span class="c"> * @default null</span>
<span class="c"> * @protected</span>
<span class="c"> * @type Object</span>
<span class="c"> */</span>
<span class="nx">_hideAllSubmenusTimer</span><span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">/** </span>
<span class="c"> * @property _firstItem</span>
<span class="c"> * @description Node instance representing the first item (menuitem or menu </span>
<span class="c"> * label) in the root menu of a menu.</span>
<span class="c"> * @default null</span>
<span class="c"> * @protected</span>
<span class="c"> * @type Node</span>
<span class="c"> */</span>
<span class="nx">_firstItem</span><span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
<span class="c">// Public methods</span>
<span class="c"></span>
<span class="nx">initializer</span><span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">config</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">menuNav</span> <span class="o">=</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">oRootMenu</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">HOST</span><span class="o">),</span>
<span class="nx">aHandlers</span> <span class="o">=</span> <span class="o">[],</span>
<span class="nx">oDoc</span><span class="o">;</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oRootMenu</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_rootMenu</span> <span class="o">=</span> <span class="nx">oRootMenu</span><span class="o">;</span>
<span class="nx">oRootMenu</span><span class="o">.</span><span class="nx">all</span><span class="o">(</span><span class="s2">"ul:first-child"</span><span class="o">).</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">FIRST_OF_TYPE</span><span class="o">);</span>
<span class="c">// Hide all visible submenus</span>
<span class="c"></span>
<span class="nx">oRootMenu</span><span class="o">.</span><span class="nx">all</span><span class="o">(</span><span class="nx">MENU_SELECTOR</span><span class="o">).</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">CSS_MENU_HIDDEN</span><span class="o">);</span>
<span class="c">// Wire up all event handlers</span>
<span class="c"></span>
<span class="nx">aHandlers</span><span class="o">.</span><span class="nx">push</span><span class="o">(</span><span class="nx">oRootMenu</span><span class="o">.</span><span class="nx">on</span><span class="o">(</span><span class="s2">"mouseover"</span><span class="o">,</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_onMouseOver</span><span class="o">,</span> <span class="nx">menuNav</span><span class="o">));</span>
<span class="nx">aHandlers</span><span class="o">.</span><span class="nx">push</span><span class="o">(</span><span class="nx">oRootMenu</span><span class="o">.</span><span class="nx">on</span><span class="o">(</span><span class="s2">"mouseout"</span><span class="o">,</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_onMouseOut</span><span class="o">,</span> <span class="nx">menuNav</span><span class="o">));</span>
<span class="nx">aHandlers</span><span class="o">.</span><span class="nx">push</span><span class="o">(</span><span class="nx">oRootMenu</span><span class="o">.</span><span class="nx">on</span><span class="o">(</span><span class="s2">"mousemove"</span><span class="o">,</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_onMouseMove</span><span class="o">,</span> <span class="nx">menuNav</span><span class="o">));</span>
<span class="nx">aHandlers</span><span class="o">.</span><span class="nx">push</span><span class="o">(</span><span class="nx">oRootMenu</span><span class="o">.</span><span class="nx">on</span><span class="o">(</span><span class="nx">MOUSEDOWN</span><span class="o">,</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_toggleSubmenuDisplay</span><span class="o">,</span> <span class="nx">menuNav</span><span class="o">));</span>
<span class="nx">aHandlers</span><span class="o">.</span><span class="nx">push</span><span class="o">(</span><span class="nx">Y</span><span class="o">.</span><span class="nx">on</span><span class="o">(</span><span class="s2">"key"</span><span class="o">,</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_toggleSubmenuDisplay</span><span class="o">,</span> <span class="nx">oRootMenu</span><span class="o">,</span> <span class="s2">"down:13"</span><span class="o">,</span> <span class="nx">menuNav</span><span class="o">));</span>
<span class="nx">aHandlers</span><span class="o">.</span><span class="nx">push</span><span class="o">(</span><span class="nx">oRootMenu</span><span class="o">.</span><span class="nx">on</span><span class="o">(</span><span class="nx">CLICK</span><span class="o">,</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_toggleSubmenuDisplay</span><span class="o">,</span> <span class="nx">menuNav</span><span class="o">));</span>
<span class="nx">aHandlers</span><span class="o">.</span><span class="nx">push</span><span class="o">(</span><span class="nx">oRootMenu</span><span class="o">.</span><span class="nx">on</span><span class="o">(</span><span class="s2">"keypress"</span><span class="o">,</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_onKeyPress</span><span class="o">,</span> <span class="nx">menuNav</span><span class="o">));</span>
<span class="nx">aHandlers</span><span class="o">.</span><span class="nx">push</span><span class="o">(</span><span class="nx">oRootMenu</span><span class="o">.</span><span class="nx">on</span><span class="o">(</span><span class="nx">KEYDOWN</span><span class="o">,</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_onKeyDown</span><span class="o">,</span> <span class="nx">menuNav</span><span class="o">));</span>
<span class="nx">oDoc</span> <span class="o">=</span> <span class="nx">oRootMenu</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">"ownerDocument"</span><span class="o">);</span>
<span class="nx">aHandlers</span><span class="o">.</span><span class="nx">push</span><span class="o">(</span><span class="nx">oDoc</span><span class="o">.</span><span class="nx">on</span><span class="o">(</span><span class="nx">MOUSEDOWN</span><span class="o">,</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_onDocMouseDown</span><span class="o">,</span> <span class="nx">menuNav</span><span class="o">));</span>
<span class="nx">aHandlers</span><span class="o">.</span><span class="nx">push</span><span class="o">(</span><span class="nx">oDoc</span><span class="o">.</span><span class="nx">on</span><span class="o">(</span><span class="s2">"focus"</span><span class="o">,</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_onDocFocus</span><span class="o">,</span> <span class="nx">menuNav</span><span class="o">));</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_eventHandlers</span> <span class="o">=</span> <span class="nx">aHandlers</span><span class="o">;</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_initFocusManager</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="nx">destructor</span><span class="o">:</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">aHandlers</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_eventHandlers</span><span class="o">;</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">aHandlers</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">Y</span><span class="o">.</span><span class="nb">Array</span><span class="o">.</span><span class="nx">each</span><span class="o">(</span><span class="nx">aHandlers</span><span class="o">,</span> <span class="k">function</span> <span class="o">(</span><span class="nx">handle</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">handle</span><span class="o">.</span><span class="nx">detach</span><span class="o">();</span>
<span class="o">});</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_eventHandlers</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">HOST</span><span class="o">).</span><span class="nx">unplug</span><span class="o">(</span><span class="s2">"focusManager"</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">// Protected methods</span>
<span class="c"></span>
<span class="c">/**</span>
<span class="c"> * @method _isRoot</span>
<span class="c"> * @description Returns a boolean indicating if the specified menu is the </span>
<span class="c"> * root menu in the menu.</span>
<span class="c"> * @protected</span>
<span class="c"> * @param {Node} menu Node instance representing a menu.</span>
<span class="c"> * @return {Boolean} Boolean indicating if the specified menu is the root </span>
<span class="c"> * menu in the menu.</span>
<span class="c"> */</span>
<span class="nx">_isRoot</span><span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">menu</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="k">this</span><span class="o">.</span><span class="nx">_rootMenu</span><span class="o">.</span><span class="nx">compareTo</span><span class="o">(</span><span class="nx">menu</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method _getTopmostSubmenu</span>
<span class="c"> * @description Returns the topmost submenu of a submenu hierarchy.</span>
<span class="c"> * @protected</span>
<span class="c"> * @param {Node} menu Node instance representing a menu.</span>
<span class="c"> * @return {Node} Node instance representing a menu.</span>
<span class="c"> */</span>
<span class="nx">_getTopmostSubmenu</span><span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">menu</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">menuNav</span> <span class="o">=</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">oMenu</span> <span class="o">=</span> <span class="nx">getParentMenu</span><span class="o">(</span><span class="nx">menu</span><span class="o">),</span>
<span class="nx">returnVal</span><span class="o">;</span>
<span class="k">if</span> <span class="o">(!</span><span class="nx">oMenu</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">returnVal</span> <span class="o">=</span> <span class="nx">menu</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span> <span class="o">(</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">_isRoot</span><span class="o">(</span><span class="nx">oMenu</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">returnVal</span> <span class="o">=</span> <span class="nx">menu</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">returnVal</span> <span class="o">=</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_getTopmostSubmenu</span><span class="o">(</span><span class="nx">oMenu</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">return</span> <span class="nx">returnVal</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method _clearActiveItem</span>
<span class="c"> * @description Clears the menu's active descendent.</span>
<span class="c"> * @protected</span>
<span class="c"> */</span>
<span class="nx">_clearActiveItem</span><span class="o">:</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">menuNav</span> <span class="o">=</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">oActiveItem</span> <span class="o">=</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_activeItem</span><span class="o">;</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oActiveItem</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oActiveItem</span><span class="o">.</span><span class="nx">removeClass</span><span class="o">(</span><span class="nx">getActiveClass</span><span class="o">(</span><span class="nx">oActiveItem</span><span class="o">));</span>
<span class="o">}</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_activeItem</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method _setActiveItem</span>
<span class="c"> * @description Sets the specified menuitem or menu label as the menu's </span>
<span class="c"> * active descendent.</span>
<span class="c"> * @protected</span>
<span class="c"> * @param {Node} item Node instance representing a menuitem or menu label.</span>
<span class="c"> */</span>
<span class="nx">_setActiveItem</span><span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">item</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">menuNav</span> <span class="o">=</span> <span class="k">this</span><span class="o">;</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">item</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_clearActiveItem</span><span class="o">();</span>
<span class="nx">item</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">getActiveClass</span><span class="o">(</span><span class="nx">item</span><span class="o">));</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_activeItem</span> <span class="o">=</span> <span class="nx">item</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method _focusItem</span>
<span class="c"> * @description Focuses the specified menuitem or menu label.</span>
<span class="c"> * @protected</span>
<span class="c"> * @param {Node} item Node instance representing a menuitem or menu label.</span>
<span class="c"> */</span>
<span class="nx">_focusItem</span><span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">item</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">menuNav</span> <span class="o">=</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">oMenu</span><span class="o">,</span>
<span class="nx">oItem</span><span class="o">;</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">item</span> <span class="o">&&</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hasFocus</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oMenu</span> <span class="o">=</span> <span class="nx">getParentMenu</span><span class="o">(</span><span class="nx">item</span><span class="o">);</span>
<span class="nx">oItem</span> <span class="o">=</span> <span class="nx">getItemAnchor</span><span class="o">(</span><span class="nx">item</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oMenu</span> <span class="o">&&</span> <span class="o">!</span><span class="nx">oMenu</span><span class="o">.</span><span class="nx">compareTo</span><span class="o">(</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">_activeMenu</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_activeMenu</span> <span class="o">=</span> <span class="nx">oMenu</span><span class="o">;</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_initFocusManager</span><span class="o">();</span>
<span class="o">}</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_focusManager</span><span class="o">.</span><span class="nx">focus</span><span class="o">(</span><span class="nx">oItem</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method _showMenu</span>
<span class="c"> * @description Shows the specified menu.</span>
<span class="c"> * @protected</span>
<span class="c"> * @param {Node} menu Node instance representing a menu.</span>
<span class="c"> */</span>
<span class="nx">_showMenu</span><span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">menu</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oParentMenu</span> <span class="o">=</span> <span class="nx">getParentMenu</span><span class="o">(</span><span class="nx">menu</span><span class="o">),</span>
<span class="nx">oLI</span> <span class="o">=</span> <span class="nx">menu</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">PARENT_NODE</span><span class="o">),</span>
<span class="nx">aXY</span> <span class="o">=</span> <span class="nx">oLI</span><span class="o">.</span><span class="nx">getXY</span><span class="o">();</span>
<span class="k">if</span> <span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">USE_ARIA</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">menu</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="nx">ARIA_HIDDEN</span><span class="o">,</span> <span class="kc">false</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">isHorizontalMenu</span><span class="o">(</span><span class="nx">oParentMenu</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">aXY</span><span class="o">[</span><span class="m">1</span><span class="o">]</span> <span class="o">=</span> <span class="nx">aXY</span><span class="o">[</span><span class="m">1</span><span class="o">]</span> <span class="o">+</span> <span class="nx">oLI</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">OFFSET_HEIGHT</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">aXY</span><span class="o">[</span><span class="m">0</span><span class="o">]</span> <span class="o">=</span> <span class="nx">aXY</span><span class="o">[</span><span class="m">0</span><span class="o">]</span> <span class="o">+</span> <span class="nx">oLI</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">OFFSET_WIDTH</span><span class="o">);</span>
<span class="o">}</span>
<span class="nx">menu</span><span class="o">.</span><span class="nx">setXY</span><span class="o">(</span><span class="nx">aXY</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">UA</span><span class="o">.</span><span class="nx">ie</span> <span class="o"><</span> <span class="m">8</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">UA</span><span class="o">.</span><span class="nx">ie</span> <span class="o">===</span> <span class="m">6</span> <span class="o">&&</span> <span class="o">!</span><span class="nx">menu</span><span class="o">.</span><span class="nx">hasIFrameShim</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">menu</span><span class="o">.</span><span class="nx">appendChild</span><span class="o">(</span><span class="nx">Y</span><span class="o">.</span><span class="nx">Node</span><span class="o">.</span><span class="nx">create</span><span class="o">(</span><span class="nx">NodeMenuNav</span><span class="o">.</span><span class="nx">SHIM_TEMPLATE</span><span class="o">));</span>
<span class="nx">menu</span><span class="o">.</span><span class="nx">hasIFrameShim</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="o">}</span>
<span class="c">// Clear previous values for height and width</span>
<span class="c"></span>
<span class="nx">menu</span><span class="o">.</span><span class="nx">setStyles</span><span class="o">({</span> <span class="nx">height</span><span class="o">:</span> <span class="nx">EMPTY_STRING</span><span class="o">,</span> <span class="nx">width</span><span class="o">:</span> <span class="nx">EMPTY_STRING</span> <span class="o">});</span>
<span class="c">// Set the width and height of the menu's bounding box - this is </span>
<span class="c"></span> <span class="c">// necessary for IE 6 so that the CSS for the <iframe> shim can </span>
<span class="c"></span> <span class="c">// simply set the <iframe>'s width and height to 100% to ensure </span>
<span class="c"></span> <span class="c">// that dimensions of an <iframe> shim are always sync'd to the </span>
<span class="c"></span> <span class="c">// that of its parent menu. Specifying a width and height also </span>
<span class="c"></span> <span class="c">// helps when positioning decorator elements (for creating effects </span>
<span class="c"></span> <span class="c">// like rounded corners) inside a menu's bounding box in IE 7.</span>
<span class="c"></span>
<span class="nx">menu</span><span class="o">.</span><span class="nx">setStyles</span><span class="o">({</span>
<span class="nx">height</span><span class="o">:</span> <span class="o">(</span><span class="nx">menu</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">OFFSET_HEIGHT</span><span class="o">)</span> <span class="o">+</span> <span class="nx">PX</span><span class="o">),</span>
<span class="nx">width</span><span class="o">:</span> <span class="o">(</span><span class="nx">menu</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">OFFSET_WIDTH</span><span class="o">)</span> <span class="o">+</span> <span class="nx">PX</span><span class="o">)</span> <span class="o">});</span>
<span class="o">}</span>
<span class="nx">menu</span><span class="o">.</span><span class="nx">previous</span><span class="o">().</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">CSS_MENU_LABEL_MENUVISIBLE</span><span class="o">);</span>
<span class="nx">menu</span><span class="o">.</span><span class="nx">removeClass</span><span class="o">(</span><span class="nx">CSS_MENU_HIDDEN</span><span class="o">);</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method _hideMenu </span>
<span class="c"> * @description Hides the specified menu.</span>
<span class="c"> * @protected</span>
<span class="c"> * @param {Node} menu Node instance representing a menu.</span>
<span class="c"> * @param {Boolean} activateAndFocusLabel Boolean indicating if the label </span>
<span class="c"> * for the specified </span>
<span class="c"> * menu should be focused and set as active.</span>
<span class="c"> */</span>
<span class="nx">_hideMenu</span><span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">menu</span><span class="o">,</span> <span class="nx">activateAndFocusLabel</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">menuNav</span> <span class="o">=</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">oLabel</span> <span class="o">=</span> <span class="nx">menu</span><span class="o">.</span><span class="nx">previous</span><span class="o">(),</span>
<span class="nx">oActiveItem</span><span class="o">;</span>
<span class="nx">oLabel</span><span class="o">.</span><span class="nx">removeClass</span><span class="o">(</span><span class="nx">CSS_MENU_LABEL_MENUVISIBLE</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">activateAndFocusLabel</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_focusItem</span><span class="o">(</span><span class="nx">oLabel</span><span class="o">);</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_setActiveItem</span><span class="o">(</span><span class="nx">oLabel</span><span class="o">);</span>
<span class="o">}</span>
<span class="nx">oActiveItem</span> <span class="o">=</span> <span class="nx">menu</span><span class="o">.</span><span class="nx">one</span><span class="o">((</span><span class="nx">PERIOD</span> <span class="o">+</span> <span class="nx">CSS_MENUITEM_ACTIVE</span><span class="o">));</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oActiveItem</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oActiveItem</span><span class="o">.</span><span class="nx">removeClass</span><span class="o">(</span><span class="nx">CSS_MENUITEM_ACTIVE</span><span class="o">);</span>
<span class="o">}</span>
<span class="c">// Clear the values for top and left that were set by the call to </span>
<span class="c"></span> <span class="c">// "setXY" when the menu was shown so that the hidden position </span>
<span class="c"></span> <span class="c">// specified in the core CSS file will take affect.</span>
<span class="c"></span>
<span class="nx">menu</span><span class="o">.</span><span class="nx">setStyles</span><span class="o">({</span> <span class="nx">left</span><span class="o">:</span> <span class="nx">EMPTY_STRING</span><span class="o">,</span> <span class="nx">top</span><span class="o">:</span> <span class="nx">EMPTY_STRING</span> <span class="o">});</span>
<span class="nx">menu</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">CSS_MENU_HIDDEN</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">USE_ARIA</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">menu</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="nx">ARIA_HIDDEN</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method _hideAllSubmenus</span>
<span class="c"> * @description Hides all submenus of the specified menu.</span>
<span class="c"> * @protected</span>
<span class="c"> * @param {Node} menu Node instance representing a menu.</span>
<span class="c"> */</span>
<span class="nx">_hideAllSubmenus</span><span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">menu</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">menuNav</span> <span class="o">=</span> <span class="k">this</span><span class="o">;</span>
<span class="nx">menu</span><span class="o">.</span><span class="nx">all</span><span class="o">(</span><span class="nx">MENU_SELECTOR</span><span class="o">).</span><span class="nx">each</span><span class="o">(</span><span class="nx">Y</span><span class="o">.</span><span class="nx">bind</span><span class="o">(</span><span class="k">function</span> <span class="o">(</span><span class="nx">submenuNode</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hideMenu</span><span class="o">(</span><span class="nx">submenuNode</span><span class="o">);</span>
<span class="o">},</span> <span class="nx">menuNav</span><span class="o">));</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method _cancelShowSubmenuTimer</span>
<span class="c"> * @description Cancels the timer used to show a submenu.</span>
<span class="c"> * @protected</span>
<span class="c"> */</span>
<span class="nx">_cancelShowSubmenuTimer</span><span class="o">:</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">menuNav</span> <span class="o">=</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">oShowSubmenuTimer</span> <span class="o">=</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_showSubmenuTimer</span><span class="o">;</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oShowSubmenuTimer</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oShowSubmenuTimer</span><span class="o">.</span><span class="nx">cancel</span><span class="o">();</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_showSubmenuTimer</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method _cancelHideSubmenuTimer</span>
<span class="c"> * @description Cancels the timer used to hide a submenu.</span>
<span class="c"> * @protected</span>
<span class="c"> */</span>
<span class="nx">_cancelHideSubmenuTimer</span><span class="o">:</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">menuNav</span> <span class="o">=</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">oHideSubmenuTimer</span> <span class="o">=</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hideSubmenuTimer</span><span class="o">;</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oHideSubmenuTimer</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oHideSubmenuTimer</span><span class="o">.</span><span class="nx">cancel</span><span class="o">();</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hideSubmenuTimer</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method _initFocusManager</span>
<span class="c"> * @description Initializes and updates the Focus Manager so that is is </span>
<span class="c"> * always managing descendants of the active menu.</span>
<span class="c"> * @protected</span>
<span class="c"> */</span>
<span class="nx">_initFocusManager</span><span class="o">:</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">menuNav</span> <span class="o">=</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">oRootMenu</span> <span class="o">=</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_rootMenu</span><span class="o">,</span>
<span class="nx">oMenu</span> <span class="o">=</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_activeMenu</span> <span class="o">||</span> <span class="nx">oRootMenu</span><span class="o">,</span>
<span class="nx">sSelectorBase</span> <span class="o">=</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_isRoot</span><span class="o">(</span><span class="nx">oMenu</span><span class="o">)</span> <span class="o">?</span> <span class="nx">EMPTY_STRING</span> <span class="o">:</span> <span class="o">(</span><span class="s2">"#"</span> <span class="o">+</span> <span class="nx">oMenu</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">"id"</span><span class="o">)),</span>
<span class="nx">oFocusManager</span> <span class="o">=</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_focusManager</span><span class="o">,</span>
<span class="nx">sKeysVal</span><span class="o">,</span>
<span class="nx">sDescendantSelector</span><span class="o">,</span>
<span class="nx">sQuery</span><span class="o">;</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">isHorizontalMenu</span><span class="o">(</span><span class="nx">oMenu</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">sDescendantSelector</span> <span class="o">=</span> <span class="nx">sSelectorBase</span> <span class="o">+</span> <span class="nx">STANDARD_QUERY</span> <span class="o">+</span> <span class="s2">","</span> <span class="o">+</span>
<span class="nx">sSelectorBase</span> <span class="o">+</span> <span class="nx">EXTENDED_QUERY</span><span class="o">;</span>
<span class="nx">sKeysVal</span> <span class="o">=</span> <span class="o">{</span> <span class="nx">next</span><span class="o">:</span> <span class="s2">"down:39"</span><span class="o">,</span> <span class="nx">previous</span><span class="o">:</span> <span class="s2">"down:37"</span> <span class="o">};</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">sDescendantSelector</span> <span class="o">=</span> <span class="nx">sSelectorBase</span> <span class="o">+</span> <span class="nx">STANDARD_QUERY</span><span class="o">;</span>
<span class="nx">sKeysVal</span> <span class="o">=</span> <span class="o">{</span> <span class="nx">next</span><span class="o">:</span> <span class="s2">"down:40"</span><span class="o">,</span> <span class="nx">previous</span><span class="o">:</span> <span class="s2">"down:38"</span> <span class="o">};</span>
<span class="o">}</span>
<span class="k">if</span> <span class="o">(!</span><span class="nx">oFocusManager</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oRootMenu</span><span class="o">.</span><span class="nx">plug</span><span class="o">(</span><span class="nx">Y</span><span class="o">.</span><span class="nx">Plugin</span><span class="o">.</span><span class="nx">NodeFocusManager</span><span class="o">,</span> <span class="o">{</span>
<span class="nx">descendants</span><span class="o">:</span> <span class="nx">sDescendantSelector</span><span class="o">,</span>
<span class="nx">keys</span><span class="o">:</span> <span class="nx">sKeysVal</span><span class="o">,</span>
<span class="nx">circular</span><span class="o">:</span> <span class="kc">true</span>
<span class="o">});</span>
<span class="nx">oFocusManager</span> <span class="o">=</span> <span class="nx">oRootMenu</span><span class="o">.</span><span class="nx">focusManager</span><span class="o">;</span>
<span class="nx">sQuery</span> <span class="o">=</span> <span class="s2">"#"</span> <span class="o">+</span> <span class="nx">oRootMenu</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">"id"</span><span class="o">)</span> <span class="o">+</span> <span class="s2">" .yui-menu a,"</span> <span class="o">+</span>
<span class="nx">MENU_TOGGLE_SELECTOR</span><span class="o">;</span>
<span class="nx">oRootMenu</span><span class="o">.</span><span class="nx">all</span><span class="o">(</span><span class="nx">sQuery</span><span class="o">).</span><span class="nx">set</span><span class="o">(</span><span class="s2">"tabIndex"</span><span class="o">,</span> <span class="o">-</span><span class="m">1</span><span class="o">);</span>
<span class="nx">oFocusManager</span><span class="o">.</span><span class="nx">on</span><span class="o">(</span><span class="nx">ACTIVE_DESCENDANT_CHANGE</span><span class="o">,</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_onActiveDescendantChange</span><span class="o">,</span> <span class="nx">oFocusManager</span><span class="o">,</span> <span class="k">this</span><span class="o">);</span>
<span class="nx">oFocusManager</span><span class="o">.</span><span class="nx">after</span><span class="o">(</span><span class="nx">ACTIVE_DESCENDANT_CHANGE</span><span class="o">,</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_afterActiveDescendantChange</span><span class="o">,</span> <span class="nx">oFocusManager</span><span class="o">,</span> <span class="k">this</span><span class="o">);</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_focusManager</span> <span class="o">=</span> <span class="nx">oFocusManager</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">oFocusManager</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="nx">ACTIVE_DESCENDANT</span><span class="o">,</span> <span class="o">-</span><span class="m">1</span><span class="o">);</span>
<span class="nx">oFocusManager</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="nx">DESCENDANTS</span><span class="o">,</span> <span class="nx">sDescendantSelector</span><span class="o">);</span>
<span class="nx">oFocusManager</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="s2">"keys"</span><span class="o">,</span> <span class="nx">sKeysVal</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">// Event handlers for discrete pieces of pieces of the menu</span>
<span class="c"></span>
<span class="c">/**</span>
<span class="c"> * @method _onActiveDescendantChange</span>
<span class="c"> * @description "activeDescendantChange" event handler for menu's </span>
<span class="c"> * Focus Manager.</span>
<span class="c"> * @protected</span>
<span class="c"> * @param {Object} event Object representing the Attribute change event.</span>
<span class="c"> * @param {NodeMenuNav} menuNav Object representing the NodeMenuNav instance.</span>
<span class="c"> */</span>
<span class="nx">_onActiveDescendantChange</span><span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">event</span><span class="o">,</span> <span class="nx">menuNav</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">event</span><span class="o">.</span><span class="nx">src</span> <span class="o">===</span> <span class="nx">UI</span> <span class="o">&&</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_activeMenu</span> <span class="o">&&</span>
<span class="o">!</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">_movingToSubmenu</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hideAllSubmenus</span><span class="o">(</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">_activeMenu</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method _afterActiveDescendantChange</span>
<span class="c"> * @description "activeDescendantChange" event handler for menu's </span>
<span class="c"> * Focus Manager.</span>
<span class="c"> * @protected</span>
<span class="c"> * @param {Object} event Object representing the Attribute change event.</span>
<span class="c"> * @param {NodeMenuNav} menuNav Object representing the NodeMenuNav instance.</span>
<span class="c"> */</span>
<span class="nx">_afterActiveDescendantChange</span><span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">event</span><span class="o">,</span> <span class="nx">menuNav</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">oItem</span><span class="o">;</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">event</span><span class="o">.</span><span class="nx">src</span> <span class="o">===</span> <span class="nx">UI</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oItem</span> <span class="o">=</span> <span class="nx">getItem</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">DESCENDANTS</span><span class="o">).</span><span class="nx">item</span><span class="o">(</span><span class="nx">event</span><span class="o">.</span><span class="nx">newVal</span><span class="o">),</span> <span class="kc">true</span><span class="o">);</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_setActiveItem</span><span class="o">(</span><span class="nx">oItem</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method _onDocFocus</span>
<span class="c"> * @description "focus" event handler for the owner document of the MenuNav.</span>
<span class="c"> * @protected</span>
<span class="c"> * @param {Object} event Object representing the DOM event.</span>
<span class="c"> */</span>
<span class="nx">_onDocFocus</span><span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">event</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">menuNav</span> <span class="o">=</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">oActiveItem</span> <span class="o">=</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_activeItem</span><span class="o">,</span>
<span class="nx">oTarget</span> <span class="o">=</span> <span class="nx">event</span><span class="o">.</span><span class="nx">target</span><span class="o">,</span>
<span class="nx">oMenu</span><span class="o">;</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">_rootMenu</span><span class="o">.</span><span class="nx">contains</span><span class="o">(</span><span class="nx">oTarget</span><span class="o">))</span> <span class="o">{</span> <span class="c">// The menu has focus</span>
<span class="c"></span>
<span class="k">if</span> <span class="o">(</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hasFocus</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oMenu</span> <span class="o">=</span> <span class="nx">getParentMenu</span><span class="o">(</span><span class="nx">oTarget</span><span class="o">);</span>
<span class="c">// If the element that was focused is a descendant of the </span>
<span class="c"></span> <span class="c">// root menu, but is in a submenu not currently being </span>
<span class="c"></span> <span class="c">// managed by the Focus Manager, update the Focus Manager so </span>
<span class="c"></span> <span class="c">// that it is now managing the submenu that is the parent of </span>
<span class="c"></span> <span class="c">// the element that was focused.</span>
<span class="c"></span>
<span class="k">if</span> <span class="o">(!</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">_activeMenu</span><span class="o">.</span><span class="nx">compareTo</span><span class="o">(</span><span class="nx">oMenu</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_activeMenu</span> <span class="o">=</span> <span class="nx">oMenu</span><span class="o">;</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_initFocusManager</span><span class="o">();</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_focusManager</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="nx">ACTIVE_DESCENDANT</span><span class="o">,</span> <span class="nx">oTarget</span><span class="o">);</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_setActiveItem</span><span class="o">(</span><span class="nx">getItem</span><span class="o">(</span><span class="nx">oTarget</span><span class="o">,</span> <span class="kc">true</span><span class="o">));</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span> <span class="c">// Initial focus</span>
<span class="c"></span>
<span class="c">// First time the menu has been focused, need to setup focused </span>
<span class="c"></span> <span class="c">// state and established active active descendant</span>
<span class="c"></span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hasFocus</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="nx">oActiveItem</span> <span class="o">=</span> <span class="nx">getItem</span><span class="o">(</span><span class="nx">oTarget</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oActiveItem</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_setActiveItem</span><span class="o">(</span><span class="nx">oActiveItem</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span> <span class="c">// The menu has lost focus</span>
<span class="c"></span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_clearActiveItem</span><span class="o">();</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_cancelShowSubmenuTimer</span><span class="o">();</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hideAllSubmenus</span><span class="o">(</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">_rootMenu</span><span class="o">);</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_activeMenu</span> <span class="o">=</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_rootMenu</span><span class="o">;</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_initFocusManager</span><span class="o">();</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_focusManager</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="nx">ACTIVE_DESCENDANT</span><span class="o">,</span> <span class="m">0</span><span class="o">);</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hasFocus</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method _onMenuMouseOver</span>
<span class="c"> * @description "mouseover" event handler for a menu.</span>
<span class="c"> * @protected</span>
<span class="c"> * @param {Node} menu Node instance representing a menu.</span>
<span class="c"> * @param {Object} event Object representing the DOM event.</span>
<span class="c"> */</span>
<span class="nx">_onMenuMouseOver</span><span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">menu</span><span class="o">,</span> <span class="nx">event</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">menuNav</span> <span class="o">=</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">oHideAllSubmenusTimer</span> <span class="o">=</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hideAllSubmenusTimer</span><span class="o">;</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oHideAllSubmenusTimer</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oHideAllSubmenusTimer</span><span class="o">.</span><span class="nx">cancel</span><span class="o">();</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hideAllSubmenusTimer</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">}</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_cancelHideSubmenuTimer</span><span class="o">();</span>
<span class="c">// Need to update the FocusManager in advance of focus a new </span>
<span class="c"></span> <span class="c">// Menu in order to avoid the FocusManager thinking that </span>
<span class="c"></span> <span class="c">// it has lost focus</span>
<span class="c"></span>
<span class="k">if</span> <span class="o">(</span><span class="nx">menu</span> <span class="o">&&</span> <span class="o">!</span><span class="nx">menu</span><span class="o">.</span><span class="nx">compareTo</span><span class="o">(</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">_activeMenu</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_activeMenu</span> <span class="o">=</span> <span class="nx">menu</span><span class="o">;</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hasFocus</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_initFocusManager</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">_movingToSubmenu</span> <span class="o">&&</span> <span class="nx">isHorizontalMenu</span><span class="o">(</span><span class="nx">menu</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_movingToSubmenu</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method _hideAndFocusLabel</span>
<span class="c"> * @description Hides all of the submenus of the root menu and focuses the </span>
<span class="c"> * label of the topmost submenu</span>
<span class="c"> * @protected</span>
<span class="c"> */</span>
<span class="nx">_hideAndFocusLabel</span><span class="o">:</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">menuNav</span> <span class="o">=</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">oActiveMenu</span> <span class="o">=</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_activeMenu</span><span class="o">,</span>
<span class="nx">oSubmenu</span><span class="o">;</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hideAllSubmenus</span><span class="o">(</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">_rootMenu</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oActiveMenu</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Focus the label element for the topmost submenu</span>
<span class="c"></span> <span class="nx">oSubmenu</span> <span class="o">=</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_getTopmostSubmenu</span><span class="o">(</span><span class="nx">oActiveMenu</span><span class="o">);</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_focusItem</span><span class="o">(</span><span class="nx">oSubmenu</span><span class="o">.</span><span class="nx">previous</span><span class="o">());</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method _onMenuMouseOut</span>
<span class="c"> * @description "mouseout" event handler for a menu.</span>
<span class="c"> * @protected</span>
<span class="c"> * @param {Node} menu Node instance representing a menu.</span>
<span class="c"> * @param {Object} event Object representing the DOM event.</span>
<span class="c"> */</span>
<span class="nx">_onMenuMouseOut</span><span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">menu</span><span class="o">,</span> <span class="nx">event</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">menuNav</span> <span class="o">=</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">oActiveMenu</span> <span class="o">=</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_activeMenu</span><span class="o">,</span>
<span class="nx">oRelatedTarget</span> <span class="o">=</span> <span class="nx">event</span><span class="o">.</span><span class="nx">relatedTarget</span><span class="o">,</span>
<span class="nx">oActiveItem</span> <span class="o">=</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_activeItem</span><span class="o">,</span>
<span class="nx">oParentMenu</span><span class="o">,</span>
<span class="nx">oMenu</span><span class="o">;</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oActiveMenu</span> <span class="o">&&</span> <span class="o">!</span><span class="nx">oActiveMenu</span><span class="o">.</span><span class="nx">contains</span><span class="o">(</span><span class="nx">oRelatedTarget</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">oParentMenu</span> <span class="o">=</span> <span class="nx">getParentMenu</span><span class="o">(</span><span class="nx">oActiveMenu</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oParentMenu</span> <span class="o">&&</span> <span class="o">!</span><span class="nx">oParentMenu</span><span class="o">.</span><span class="nx">contains</span><span class="o">(</span><span class="nx">oRelatedTarget</span><span class="o">))</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">MOUSEOUT_HIDE_DELAY</span><span class="o">)</span> <span class="o">></span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_cancelShowSubmenuTimer</span><span class="o">();</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hideAllSubmenusTimer</span> <span class="o">=</span>
<span class="nx">later</span><span class="o">(</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">MOUSEOUT_HIDE_DELAY</span><span class="o">),</span>
<span class="nx">menuNav</span><span class="o">,</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hideAndFocusLabel</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oActiveItem</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oMenu</span> <span class="o">=</span> <span class="nx">getParentMenu</span><span class="o">(</span><span class="nx">oActiveItem</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(!</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">_isRoot</span><span class="o">(</span><span class="nx">oMenu</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_focusItem</span><span class="o">(</span><span class="nx">oMenu</span><span class="o">.</span><span class="nx">previous</span><span class="o">());</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method _onMenuLabelMouseOver</span>
<span class="c"> * @description "mouseover" event handler for a menu label.</span>
<span class="c"> * @protected</span>
<span class="c"> * @param {Node} menuLabel Node instance representing a menu label.</span>
<span class="c"> * @param {Object} event Object representing the DOM event.</span>
<span class="c"> */</span>
<span class="nx">_onMenuLabelMouseOver</span><span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">menuLabel</span><span class="o">,</span> <span class="nx">event</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">menuNav</span> <span class="o">=</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">oActiveMenu</span> <span class="o">=</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_activeMenu</span><span class="o">,</span>
<span class="nx">bIsRoot</span> <span class="o">=</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_isRoot</span><span class="o">(</span><span class="nx">oActiveMenu</span><span class="o">),</span>
<span class="nx">bUseAutoSubmenuDisplay</span> <span class="o">=</span>
<span class="o">(</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">AUTO_SUBMENU_DISPLAY</span><span class="o">)</span> <span class="o">&&</span> <span class="nx">bIsRoot</span> <span class="o">||</span> <span class="o">!</span><span class="nx">bIsRoot</span><span class="o">),</span>
<span class="nx">oSubmenu</span><span class="o">;</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_focusItem</span><span class="o">(</span><span class="nx">menuLabel</span><span class="o">);</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_setActiveItem</span><span class="o">(</span><span class="nx">menuLabel</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">bUseAutoSubmenuDisplay</span> <span class="o">&&</span> <span class="o">!</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">_movingToSubmenu</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_cancelHideSubmenuTimer</span><span class="o">();</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_cancelShowSubmenuTimer</span><span class="o">();</span>
<span class="k">if</span> <span class="o">(!</span><span class="nx">hasVisibleSubmenu</span><span class="o">(</span><span class="nx">menuLabel</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">oSubmenu</span> <span class="o">=</span> <span class="nx">menuLabel</span><span class="o">.</span><span class="nx">next</span><span class="o">();</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oSubmenu</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hideAllSubmenus</span><span class="o">(</span><span class="nx">oActiveMenu</span><span class="o">);</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_showSubmenuTimer</span> <span class="o">=</span>
<span class="nx">later</span><span class="o">(</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">"submenuShowDelay"</span><span class="o">),</span> <span class="nx">menuNav</span><span class="o">,</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_showMenu</span><span class="o">,</span> <span class="nx">oSubmenu</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method _onMenuLabelMouseOut</span>
<span class="c"> * @description "mouseout" event handler for a menu label.</span>
<span class="c"> * @protected</span>
<span class="c"> * @param {Node} menuLabel Node instance representing a menu label.</span>
<span class="c"> * @param {Object} event Object representing the DOM event.</span>
<span class="c"> */</span>
<span class="nx">_onMenuLabelMouseOut</span><span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">menuLabel</span><span class="o">,</span> <span class="nx">event</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">menuNav</span> <span class="o">=</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">bIsRoot</span> <span class="o">=</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_isRoot</span><span class="o">(</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">_activeMenu</span><span class="o">),</span>
<span class="nx">bUseAutoSubmenuDisplay</span> <span class="o">=</span>
<span class="o">(</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">AUTO_SUBMENU_DISPLAY</span><span class="o">)</span> <span class="o">&&</span> <span class="nx">bIsRoot</span> <span class="o">||</span> <span class="o">!</span><span class="nx">bIsRoot</span><span class="o">),</span>
<span class="nx">oRelatedTarget</span> <span class="o">=</span> <span class="nx">event</span><span class="o">.</span><span class="nx">relatedTarget</span><span class="o">,</span>
<span class="nx">oSubmenu</span> <span class="o">=</span> <span class="nx">menuLabel</span><span class="o">.</span><span class="nx">next</span><span class="o">();</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_clearActiveItem</span><span class="o">();</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">bUseAutoSubmenuDisplay</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">_movingToSubmenu</span> <span class="o">&&</span>
<span class="o">!</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">_showSubmenuTimer</span> <span class="o">&&</span> <span class="nx">oSubmenu</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// If the mouse is moving diagonally toward the submenu and </span>
<span class="c"></span> <span class="c">// another submenu isn't in the process of being displayed </span>
<span class="c"></span> <span class="c">// (via a timer), then hide the submenu via a timer to give</span>
<span class="c"></span> <span class="c">// the user some time to reach the submenu.</span>
<span class="c"></span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hideSubmenuTimer</span> <span class="o">=</span>
<span class="nx">later</span><span class="o">(</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">"submenuHideDelay"</span><span class="o">),</span> <span class="nx">menuNav</span><span class="o">,</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hideMenu</span><span class="o">,</span> <span class="nx">oSubmenu</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span> <span class="o">(!</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">_movingToSubmenu</span> <span class="o">&&</span> <span class="nx">oSubmenu</span> <span class="o">&&</span>
<span class="o">!</span><span class="nx">oSubmenu</span><span class="o">.</span><span class="nx">contains</span><span class="o">(</span><span class="nx">oRelatedTarget</span><span class="o">)</span> <span class="o">&&</span>
<span class="o">!</span><span class="nx">oRelatedTarget</span><span class="o">.</span><span class="nx">compareTo</span><span class="o">(</span><span class="nx">oSubmenu</span><span class="o">))</span> <span class="o">{</span>
<span class="c">// If the mouse is not moving toward the submenu, cancel any </span>
<span class="c"></span> <span class="c">// submenus that might be in the process of being displayed </span>
<span class="c"></span> <span class="c">// (via a timer) and hide this submenu immediately.</span>
<span class="c"></span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_cancelShowSubmenuTimer</span><span class="o">();</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hideMenu</span><span class="o">(</span><span class="nx">oSubmenu</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method _onMenuItemMouseOver</span>
<span class="c"> * @description "mouseover" event handler for a menuitem.</span>
<span class="c"> * @protected</span>
<span class="c"> * @param {Node} menuItem Node instance representing a menuitem.</span>
<span class="c"> * @param {Object} event Object representing the DOM event.</span>
<span class="c"> */</span>
<span class="nx">_onMenuItemMouseOver</span><span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">menuItem</span><span class="o">,</span> <span class="nx">event</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">menuNav</span> <span class="o">=</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">oActiveMenu</span> <span class="o">=</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_activeMenu</span><span class="o">,</span>
<span class="nx">bIsRoot</span> <span class="o">=</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_isRoot</span><span class="o">(</span><span class="nx">oActiveMenu</span><span class="o">),</span>
<span class="nx">bUseAutoSubmenuDisplay</span> <span class="o">=</span>
<span class="o">(</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">AUTO_SUBMENU_DISPLAY</span><span class="o">)</span> <span class="o">&&</span> <span class="nx">bIsRoot</span> <span class="o">||</span> <span class="o">!</span><span class="nx">bIsRoot</span><span class="o">);</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_focusItem</span><span class="o">(</span><span class="nx">menuItem</span><span class="o">);</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_setActiveItem</span><span class="o">(</span><span class="nx">menuItem</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">bUseAutoSubmenuDisplay</span> <span class="o">&&</span> <span class="o">!</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">_movingToSubmenu</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hideAllSubmenus</span><span class="o">(</span><span class="nx">oActiveMenu</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method _onMenuItemMouseOut</span>
<span class="c"> * @description "mouseout" event handler for a menuitem.</span>
<span class="c"> * @protected</span>
<span class="c"> * @param {Node} menuItem Node instance representing a menuitem.</span>
<span class="c"> * @param {Object} event Object representing the DOM event.</span>
<span class="c"> */</span>
<span class="nx">_onMenuItemMouseOut</span><span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">menuItem</span><span class="o">,</span> <span class="nx">event</span><span class="o">)</span> <span class="o">{</span>
<span class="k">this</span><span class="o">.</span><span class="nx">_clearActiveItem</span><span class="o">();</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method _onVerticalMenuKeyDown</span>
<span class="c"> * @description "keydown" event handler for vertical menus.</span>
<span class="c"> * @protected</span>
<span class="c"> * @param {Object} event Object representing the DOM event.</span>
<span class="c"> */</span>
<span class="nx">_onVerticalMenuKeyDown</span><span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">event</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">menuNav</span> <span class="o">=</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">oActiveMenu</span> <span class="o">=</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_activeMenu</span><span class="o">,</span>
<span class="nx">oRootMenu</span> <span class="o">=</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_rootMenu</span><span class="o">,</span>
<span class="nx">oTarget</span> <span class="o">=</span> <span class="nx">event</span><span class="o">.</span><span class="nx">target</span><span class="o">,</span>
<span class="nx">bPreventDefault</span> <span class="o">=</span> <span class="kc">false</span><span class="o">,</span>
<span class="nx">nKeyCode</span> <span class="o">=</span> <span class="nx">event</span><span class="o">.</span><span class="nx">keyCode</span><span class="o">,</span>
<span class="nx">oSubmenu</span><span class="o">,</span>
<span class="nx">oParentMenu</span><span class="o">,</span>
<span class="nx">oLI</span><span class="o">,</span>
<span class="nx">oItem</span><span class="o">;</span>
<span class="nx">switch</span> <span class="o">(</span><span class="nx">nKeyCode</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">case</span> <span class="m">37</span><span class="o">:</span> <span class="c">// left arrow</span>
<span class="c"></span>
<span class="nx">oParentMenu</span> <span class="o">=</span> <span class="nx">getParentMenu</span><span class="o">(</span><span class="nx">oActiveMenu</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oParentMenu</span> <span class="o">&&</span> <span class="nx">isHorizontalMenu</span><span class="o">(</span><span class="nx">oParentMenu</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hideMenu</span><span class="o">(</span><span class="nx">oActiveMenu</span><span class="o">);</span>
<span class="nx">oLI</span> <span class="o">=</span> <span class="nx">getPreviousSibling</span><span class="o">(</span><span class="nx">oActiveMenu</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">PARENT_NODE</span><span class="o">));</span>
<span class="nx">oItem</span> <span class="o">=</span> <span class="nx">getItem</span><span class="o">(</span><span class="nx">oLI</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oItem</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">isMenuLabel</span><span class="o">(</span><span class="nx">oItem</span><span class="o">))</span> <span class="o">{</span> <span class="c">// Menu label</span>
<span class="c"></span>
<span class="nx">oSubmenu</span> <span class="o">=</span> <span class="nx">oItem</span><span class="o">.</span><span class="nx">next</span><span class="o">();</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oSubmenu</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_showMenu</span><span class="o">(</span><span class="nx">oSubmenu</span><span class="o">);</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_focusItem</span><span class="o">(</span><span class="nx">getFirstItem</span><span class="o">(</span><span class="nx">oSubmenu</span><span class="o">));</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_setActiveItem</span><span class="o">(</span><span class="nx">getFirstItem</span><span class="o">(</span><span class="nx">oSubmenu</span><span class="o">));</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_focusItem</span><span class="o">(</span><span class="nx">oItem</span><span class="o">);</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_setActiveItem</span><span class="o">(</span><span class="nx">oItem</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span> <span class="c">// MenuItem</span>
<span class="c"></span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_focusItem</span><span class="o">(</span><span class="nx">oItem</span><span class="o">);</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_setActiveItem</span><span class="o">(</span><span class="nx">oItem</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span> <span class="o">(!</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">_isRoot</span><span class="o">(</span><span class="nx">oActiveMenu</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hideMenu</span><span class="o">(</span><span class="nx">oActiveMenu</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="o">}</span>
<span class="nx">bPreventDefault</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="k">break</span><span class="o">;</span>
<span class="nx">case</span> <span class="m">39</span><span class="o">:</span> <span class="c">// right arrow</span>
<span class="c"></span>
<span class="k">if</span> <span class="o">(</span><span class="nx">isMenuLabel</span><span class="o">(</span><span class="nx">oTarget</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">oSubmenu</span> <span class="o">=</span> <span class="nx">oTarget</span><span class="o">.</span><span class="nx">next</span><span class="o">();</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oSubmenu</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_showMenu</span><span class="o">(</span><span class="nx">oSubmenu</span><span class="o">);</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_focusItem</span><span class="o">(</span><span class="nx">getFirstItem</span><span class="o">(</span><span class="nx">oSubmenu</span><span class="o">));</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_setActiveItem</span><span class="o">(</span><span class="nx">getFirstItem</span><span class="o">(</span><span class="nx">oSubmenu</span><span class="o">));</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span> <span class="o">(</span><span class="nx">isHorizontalMenu</span><span class="o">(</span><span class="nx">oRootMenu</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">oSubmenu</span> <span class="o">=</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_getTopmostSubmenu</span><span class="o">(</span><span class="nx">oActiveMenu</span><span class="o">);</span>
<span class="nx">oLI</span> <span class="o">=</span> <span class="nx">getNextSibling</span><span class="o">(</span><span class="nx">oSubmenu</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">PARENT_NODE</span><span class="o">));</span>
<span class="nx">oItem</span> <span class="o">=</span> <span class="nx">getItem</span><span class="o">(</span><span class="nx">oLI</span><span class="o">);</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hideAllSubmenus</span><span class="o">(</span><span class="nx">oRootMenu</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oItem</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">isMenuLabel</span><span class="o">(</span><span class="nx">oItem</span><span class="o">))</span> <span class="o">{</span> <span class="c">// Menu label</span>
<span class="c"></span>
<span class="nx">oSubmenu</span> <span class="o">=</span> <span class="nx">oItem</span><span class="o">.</span><span class="nx">next</span><span class="o">();</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oSubmenu</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_showMenu</span><span class="o">(</span><span class="nx">oSubmenu</span><span class="o">);</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_focusItem</span><span class="o">(</span><span class="nx">getFirstItem</span><span class="o">(</span><span class="nx">oSubmenu</span><span class="o">));</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_setActiveItem</span><span class="o">(</span><span class="nx">getFirstItem</span><span class="o">(</span><span class="nx">oSubmenu</span><span class="o">));</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_focusItem</span><span class="o">(</span><span class="nx">oItem</span><span class="o">);</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_setActiveItem</span><span class="o">(</span><span class="nx">oItem</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span> <span class="c">// MenuItem</span>
<span class="c"></span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_focusItem</span><span class="o">(</span><span class="nx">oItem</span><span class="o">);</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_setActiveItem</span><span class="o">(</span><span class="nx">oItem</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="nx">bPreventDefault</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="k">break</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">bPreventDefault</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Prevent the browser from scrolling the window</span>
<span class="c"></span>
<span class="nx">event</span><span class="o">.</span><span class="nx">preventDefault</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method _onHorizontalMenuKeyDown</span>
<span class="c"> * @description "keydown" event handler for horizontal menus.</span>
<span class="c"> * @protected</span>
<span class="c"> * @param {Object} event Object representing the DOM event.</span>
<span class="c"> */</span>
<span class="nx">_onHorizontalMenuKeyDown</span><span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">event</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">menuNav</span> <span class="o">=</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">oActiveMenu</span> <span class="o">=</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_activeMenu</span><span class="o">,</span>
<span class="nx">oTarget</span> <span class="o">=</span> <span class="nx">event</span><span class="o">.</span><span class="nx">target</span><span class="o">,</span>
<span class="nx">oFocusedItem</span> <span class="o">=</span> <span class="nx">getItem</span><span class="o">(</span><span class="nx">oTarget</span><span class="o">,</span> <span class="kc">true</span><span class="o">),</span>
<span class="nx">bPreventDefault</span> <span class="o">=</span> <span class="kc">false</span><span class="o">,</span>
<span class="nx">nKeyCode</span> <span class="o">=</span> <span class="nx">event</span><span class="o">.</span><span class="nx">keyCode</span><span class="o">,</span>
<span class="nx">oSubmenu</span><span class="o">;</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">nKeyCode</span> <span class="o">===</span> <span class="m">40</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hideAllSubmenus</span><span class="o">(</span><span class="nx">oActiveMenu</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">isMenuLabel</span><span class="o">(</span><span class="nx">oFocusedItem</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">oSubmenu</span> <span class="o">=</span> <span class="nx">oFocusedItem</span><span class="o">.</span><span class="nx">next</span><span class="o">();</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oSubmenu</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_showMenu</span><span class="o">(</span><span class="nx">oSubmenu</span><span class="o">);</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_focusItem</span><span class="o">(</span><span class="nx">getFirstItem</span><span class="o">(</span><span class="nx">oSubmenu</span><span class="o">));</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_setActiveItem</span><span class="o">(</span><span class="nx">getFirstItem</span><span class="o">(</span><span class="nx">oSubmenu</span><span class="o">));</span>
<span class="o">}</span>
<span class="nx">bPreventDefault</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">bPreventDefault</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Prevent the browser from scrolling the window</span>
<span class="c"></span>
<span class="nx">event</span><span class="o">.</span><span class="nx">preventDefault</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">// Generic DOM Event handlers</span>
<span class="c"></span>
<span class="c">/**</span>
<span class="c"> * @method _onMouseMove</span>
<span class="c"> * @description "mousemove" event handler for the menu.</span>
<span class="c"> * @protected</span>
<span class="c"> * @param {Object} event Object representing the DOM event.</span>
<span class="c"> */</span>
<span class="nx">_onMouseMove</span><span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">event</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">menuNav</span> <span class="o">=</span> <span class="k">this</span><span class="o">;</span>
<span class="c">// Using a timer to set the value of the "_currentMouseX" property </span>
<span class="c"></span> <span class="c">// helps improve the reliability of the calculation used to set the </span>
<span class="c"></span> <span class="c">// value of the "_movingToSubmenu" property - especially in Opera.</span>
<span class="c"></span>
<span class="nx">later</span><span class="o">(</span><span class="m">10</span><span class="o">,</span> <span class="nx">menuNav</span><span class="o">,</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_currentMouseX</span> <span class="o">=</span> <span class="nx">event</span><span class="o">.</span><span class="nx">pageX</span><span class="o">;</span>
<span class="o">});</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method _onMouseOver</span>
<span class="c"> * @description "mouseover" event handler for the menu.</span>
<span class="c"> * @protected</span>
<span class="c"> * @param {Object} event Object representing the DOM event.</span>
<span class="c"> */</span>
<span class="nx">_onMouseOver</span><span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">event</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">menuNav</span> <span class="o">=</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">oTarget</span><span class="o">,</span>
<span class="nx">oMenu</span><span class="o">,</span>
<span class="nx">oMenuLabel</span><span class="o">,</span>
<span class="nx">oParentMenu</span><span class="o">,</span>
<span class="nx">oMenuItem</span><span class="o">;</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">_blockMouseEvent</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_blockMouseEvent</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">oTarget</span> <span class="o">=</span> <span class="nx">event</span><span class="o">.</span><span class="nx">target</span><span class="o">;</span>
<span class="nx">oMenu</span> <span class="o">=</span> <span class="nx">getMenu</span><span class="o">(</span><span class="nx">oTarget</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="nx">oMenuLabel</span> <span class="o">=</span> <span class="nx">getMenuLabel</span><span class="o">(</span><span class="nx">oTarget</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="nx">oMenuItem</span> <span class="o">=</span> <span class="nx">getMenuItem</span><span class="o">(</span><span class="nx">oTarget</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">handleMouseOverForNode</span><span class="o">(</span><span class="nx">oMenu</span><span class="o">,</span> <span class="nx">oTarget</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_onMenuMouseOver</span><span class="o">(</span><span class="nx">oMenu</span><span class="o">,</span> <span class="nx">event</span><span class="o">);</span>
<span class="nx">oMenu</span><span class="o">[</span><span class="nx">HANDLED_MOUSEOVER</span><span class="o">]</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="nx">oMenu</span><span class="o">[</span><span class="nx">HANDLED_MOUSEOUT</span><span class="o">]</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>
<span class="nx">oParentMenu</span> <span class="o">=</span> <span class="nx">getParentMenu</span><span class="o">(</span><span class="nx">oMenu</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oParentMenu</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oParentMenu</span><span class="o">[</span><span class="nx">HANDLED_MOUSEOUT</span><span class="o">]</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="nx">oParentMenu</span><span class="o">[</span><span class="nx">HANDLED_MOUSEOVER</span><span class="o">]</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">handleMouseOverForNode</span><span class="o">(</span><span class="nx">oMenuLabel</span><span class="o">,</span> <span class="nx">oTarget</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_onMenuLabelMouseOver</span><span class="o">(</span><span class="nx">oMenuLabel</span><span class="o">,</span> <span class="nx">event</span><span class="o">);</span>
<span class="nx">oMenuLabel</span><span class="o">[</span><span class="nx">HANDLED_MOUSEOVER</span><span class="o">]</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="nx">oMenuLabel</span><span class="o">[</span><span class="nx">HANDLED_MOUSEOUT</span><span class="o">]</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">handleMouseOverForNode</span><span class="o">(</span><span class="nx">oMenuItem</span><span class="o">,</span> <span class="nx">oTarget</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_onMenuItemMouseOver</span><span class="o">(</span><span class="nx">oMenuItem</span><span class="o">,</span> <span class="nx">event</span><span class="o">);</span>
<span class="nx">oMenuItem</span><span class="o">[</span><span class="nx">HANDLED_MOUSEOVER</span><span class="o">]</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="nx">oMenuItem</span><span class="o">[</span><span class="nx">HANDLED_MOUSEOUT</span><span class="o">]</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method _onMouseOut</span>
<span class="c"> * @description "mouseout" event handler for the menu.</span>
<span class="c"> * @protected</span>
<span class="c"> * @param {Object} event Object representing the DOM event.</span>
<span class="c"> */</span>
<span class="nx">_onMouseOut</span><span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">event</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">menuNav</span> <span class="o">=</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">oActiveMenu</span> <span class="o">=</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_activeMenu</span><span class="o">,</span>
<span class="nx">bMovingToSubmenu</span> <span class="o">=</span> <span class="kc">false</span><span class="o">,</span>
<span class="nx">oTarget</span><span class="o">,</span>
<span class="nx">oRelatedTarget</span><span class="o">,</span>
<span class="nx">oMenu</span><span class="o">,</span>
<span class="nx">oMenuLabel</span><span class="o">,</span>
<span class="nx">oSubmenu</span><span class="o">,</span>
<span class="nx">oMenuItem</span><span class="o">;</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_movingToSubmenu</span> <span class="o">=</span>
<span class="o">(</span><span class="nx">oActiveMenu</span> <span class="o">&&</span> <span class="o">!</span><span class="nx">isHorizontalMenu</span><span class="o">(</span><span class="nx">oActiveMenu</span><span class="o">)</span> <span class="o">&&</span>
<span class="o">((</span><span class="nx">event</span><span class="o">.</span><span class="nx">pageX</span> <span class="o">-</span> <span class="m">5</span><span class="o">)</span> <span class="o">></span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_currentMouseX</span><span class="o">));</span>
<span class="nx">oTarget</span> <span class="o">=</span> <span class="nx">event</span><span class="o">.</span><span class="nx">target</span><span class="o">;</span>
<span class="nx">oRelatedTarget</span> <span class="o">=</span> <span class="nx">event</span><span class="o">.</span><span class="nx">relatedTarget</span><span class="o">;</span>
<span class="nx">oMenu</span> <span class="o">=</span> <span class="nx">getMenu</span><span class="o">(</span><span class="nx">oTarget</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="nx">oMenuLabel</span> <span class="o">=</span> <span class="nx">getMenuLabel</span><span class="o">(</span><span class="nx">oTarget</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="nx">oMenuItem</span> <span class="o">=</span> <span class="nx">getMenuItem</span><span class="o">(</span><span class="nx">oTarget</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">handleMouseOutForNode</span><span class="o">(</span><span class="nx">oMenuLabel</span><span class="o">,</span> <span class="nx">oRelatedTarget</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_onMenuLabelMouseOut</span><span class="o">(</span><span class="nx">oMenuLabel</span><span class="o">,</span> <span class="nx">event</span><span class="o">);</span>
<span class="nx">oMenuLabel</span><span class="o">[</span><span class="nx">HANDLED_MOUSEOUT</span><span class="o">]</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="nx">oMenuLabel</span><span class="o">[</span><span class="nx">HANDLED_MOUSEOVER</span><span class="o">]</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">handleMouseOutForNode</span><span class="o">(</span><span class="nx">oMenuItem</span><span class="o">,</span> <span class="nx">oRelatedTarget</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_onMenuItemMouseOut</span><span class="o">(</span><span class="nx">oMenuItem</span><span class="o">,</span> <span class="nx">event</span><span class="o">);</span>
<span class="nx">oMenuItem</span><span class="o">[</span><span class="nx">HANDLED_MOUSEOUT</span><span class="o">]</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="nx">oMenuItem</span><span class="o">[</span><span class="nx">HANDLED_MOUSEOVER</span><span class="o">]</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oMenuLabel</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oSubmenu</span> <span class="o">=</span> <span class="nx">oMenuLabel</span><span class="o">.</span><span class="nx">next</span><span class="o">();</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oSubmenu</span> <span class="o">&&</span>
<span class="o">(</span><span class="nx">oRelatedTarget</span><span class="o">.</span><span class="nx">compareTo</span><span class="o">(</span><span class="nx">oSubmenu</span><span class="o">)</span> <span class="o">||</span>
<span class="nx">oSubmenu</span><span class="o">.</span><span class="nx">contains</span><span class="o">(</span><span class="nx">oRelatedTarget</span><span class="o">)))</span> <span class="o">{</span>
<span class="nx">bMovingToSubmenu</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">handleMouseOutForNode</span><span class="o">(</span><span class="nx">oMenu</span><span class="o">,</span> <span class="nx">oRelatedTarget</span><span class="o">)</span> <span class="o">||</span> <span class="nx">bMovingToSubmenu</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_onMenuMouseOut</span><span class="o">(</span><span class="nx">oMenu</span><span class="o">,</span> <span class="nx">event</span><span class="o">);</span>
<span class="nx">oMenu</span><span class="o">[</span><span class="nx">HANDLED_MOUSEOUT</span><span class="o">]</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="nx">oMenu</span><span class="o">[</span><span class="nx">HANDLED_MOUSEOVER</span><span class="o">]</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method _toggleSubmenuDisplay</span>
<span class="c"> * @description "mousedown," "keydown," and "click" event handler for the </span>
<span class="c"> * menu used to toggle the display of a submenu.</span>
<span class="c"> * @protected</span>
<span class="c"> * @param {Object} event Object representing the DOM event.</span>
<span class="c"> */</span>
<span class="nx">_toggleSubmenuDisplay</span><span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">event</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">menuNav</span> <span class="o">=</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">oTarget</span> <span class="o">=</span> <span class="nx">event</span><span class="o">.</span><span class="nx">target</span><span class="o">,</span>
<span class="nx">oMenuLabel</span> <span class="o">=</span> <span class="nx">getMenuLabel</span><span class="o">(</span><span class="nx">oTarget</span><span class="o">,</span> <span class="kc">true</span><span class="o">),</span>
<span class="nx">sType</span> <span class="o">=</span> <span class="nx">event</span><span class="o">.</span><span class="nx">type</span><span class="o">,</span>
<span class="nx">oAnchor</span><span class="o">,</span>
<span class="nx">oSubmenu</span><span class="o">,</span>
<span class="nx">sHref</span><span class="o">,</span>
<span class="nx">nHashPos</span><span class="o">,</span>
<span class="nx">nLen</span><span class="o">,</span>
<span class="nx">sId</span><span class="o">;</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oMenuLabel</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oAnchor</span> <span class="o">=</span> <span class="nx">isAnchor</span><span class="o">(</span><span class="nx">oTarget</span><span class="o">)</span> <span class="o">?</span> <span class="nx">oTarget</span> <span class="o">:</span> <span class="nx">oTarget</span><span class="o">.</span><span class="nx">ancestor</span><span class="o">(</span><span class="nx">isAnchor</span><span class="o">);</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oAnchor</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Need to pass "2" as a second argument to "getAttribute" for </span>
<span class="c"></span> <span class="c">// IE otherwise IE will return a fully qualified URL for the </span>
<span class="c"></span> <span class="c">// value of the "href" attribute.</span>
<span class="c"></span> <span class="c">// http://msdn.microsoft.com/en-us/library/ms536429(VS.85).aspx</span>
<span class="c"></span>
<span class="nx">sHref</span> <span class="o">=</span> <span class="nx">oAnchor</span><span class="o">.</span><span class="nx">getAttribute</span><span class="o">(</span><span class="s2">"href"</span><span class="o">,</span> <span class="m">2</span><span class="o">);</span>
<span class="nx">nHashPos</span> <span class="o">=</span> <span class="nx">sHref</span><span class="o">.</span><span class="nx">indexOf</span><span class="o">(</span><span class="s2">"#"</span><span class="o">);</span>
<span class="nx">nLen</span> <span class="o">=</span> <span class="nx">sHref</span><span class="o">.</span><span class="nx">length</span><span class="o">;</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">nHashPos</span> <span class="o">===</span> <span class="m">0</span> <span class="o">&&</span> <span class="nx">nLen</span> <span class="o">></span> <span class="m">1</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">sId</span> <span class="o">=</span> <span class="nx">sHref</span><span class="o">.</span><span class="nx">substr</span><span class="o">(</span><span class="m">1</span><span class="o">,</span> <span class="nx">nLen</span><span class="o">);</span>
<span class="nx">oSubmenu</span> <span class="o">=</span> <span class="nx">oMenuLabel</span><span class="o">.</span><span class="nx">next</span><span class="o">();</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oSubmenu</span> <span class="o">&&</span> <span class="o">(</span><span class="nx">oSubmenu</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">ID</span><span class="o">)</span> <span class="o">===</span> <span class="nx">sId</span><span class="o">))</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">sType</span> <span class="o">===</span> <span class="nx">MOUSEDOWN</span> <span class="o">||</span> <span class="nx">sType</span> <span class="o">===</span> <span class="nx">KEYDOWN</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">((</span><span class="nx">UA</span><span class="o">.</span><span class="nx">opera</span> <span class="o">||</span> <span class="nx">UA</span><span class="o">.</span><span class="nx">gecko</span> <span class="o">||</span> <span class="nx">UA</span><span class="o">.</span><span class="nx">ie</span><span class="o">)</span> <span class="o">&&</span> <span class="nx">sType</span> <span class="o">===</span> <span class="nx">KEYDOWN</span> <span class="o">&&</span> <span class="o">!</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">_preventClickHandle</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Prevent the browser from following the URL of </span>
<span class="c"></span> <span class="c">// the anchor element</span>
<span class="c"></span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_preventClickHandle</span> <span class="o">=</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_rootMenu</span><span class="o">.</span><span class="nx">on</span><span class="o">(</span><span class="s2">"click"</span><span class="o">,</span> <span class="k">function</span> <span class="o">(</span><span class="nx">event</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">event</span><span class="o">.</span><span class="nx">preventDefault</span><span class="o">();</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_preventClickHandle</span><span class="o">.</span><span class="nx">detach</span><span class="o">();</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_preventClickHandle</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">});</span>
<span class="o">}</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">sType</span> <span class="o">==</span> <span class="nx">MOUSEDOWN</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Prevent the target from getting focused by </span>
<span class="c"></span> <span class="c">// default, since the element to be focused will</span>
<span class="c"></span> <span class="c">// be determined by weather or not the submenu</span>
<span class="c"></span> <span class="c">// is visible.</span>
<span class="c"></span> <span class="nx">event</span><span class="o">.</span><span class="nx">preventDefault</span><span class="o">();</span>
<span class="c">// FocusManager will attempt to focus any </span>
<span class="c"></span> <span class="c">// descendant that is the target of the mousedown</span>
<span class="c"></span> <span class="c">// event. Since we want to explicitly control </span>
<span class="c"></span> <span class="c">// where focus is going, we need to call </span>
<span class="c"></span> <span class="c">// "stopImmediatePropagation" to stop the </span>
<span class="c"></span> <span class="c">// FocusManager from doing its thing.</span>
<span class="c"></span> <span class="nx">event</span><span class="o">.</span><span class="nx">stopImmediatePropagation</span><span class="o">();</span>
<span class="c">// The "_focusItem" method relies on the </span>
<span class="c"></span> <span class="c">// "_hasFocus" property being set to true. The</span>
<span class="c"></span> <span class="c">// "_hasFocus" property is normally set via a </span>
<span class="c"></span> <span class="c">// "focus" event listener, but since we've </span>
<span class="c"></span> <span class="c">// blocked focus from happening, we need to set </span>
<span class="c"></span> <span class="c">// this property manually.</span>
<span class="c"></span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hasFocus</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">_isRoot</span><span class="o">(</span><span class="nx">getParentMenu</span><span class="o">(</span><span class="nx">oTarget</span><span class="o">)))</span> <span class="o">{</span> <span class="c">// Event target is a submenu label in the root menu</span>
<span class="c"></span>
<span class="c">// Menu label toggle functionality</span>
<span class="c"></span>
<span class="k">if</span> <span class="o">(</span><span class="nx">hasVisibleSubmenu</span><span class="o">(</span><span class="nx">oMenuLabel</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hideMenu</span><span class="o">(</span><span class="nx">oSubmenu</span><span class="o">);</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_focusItem</span><span class="o">(</span><span class="nx">oMenuLabel</span><span class="o">);</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_setActiveItem</span><span class="o">(</span><span class="nx">oMenuLabel</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hideAllSubmenus</span><span class="o">(</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">_rootMenu</span><span class="o">);</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_showMenu</span><span class="o">(</span><span class="nx">oSubmenu</span><span class="o">);</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_focusItem</span><span class="o">(</span><span class="nx">getFirstItem</span><span class="o">(</span><span class="nx">oSubmenu</span><span class="o">));</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_setActiveItem</span><span class="o">(</span><span class="nx">getFirstItem</span><span class="o">(</span><span class="nx">oSubmenu</span><span class="o">));</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span> <span class="c">// Event target is a submenu label within a submenu</span>
<span class="c"></span>
<span class="k">if</span> <span class="o">(</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">_activeItem</span> <span class="o">==</span> <span class="nx">oMenuLabel</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_showMenu</span><span class="o">(</span><span class="nx">oSubmenu</span><span class="o">);</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_focusItem</span><span class="o">(</span><span class="nx">getFirstItem</span><span class="o">(</span><span class="nx">oSubmenu</span><span class="o">));</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_setActiveItem</span><span class="o">(</span><span class="nx">getFirstItem</span><span class="o">(</span><span class="nx">oSubmenu</span><span class="o">));</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(!</span><span class="nx">oMenuLabel</span><span class="o">.</span><span class="nx">_clickHandle</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">oMenuLabel</span><span class="o">.</span><span class="nx">_clickHandle</span> <span class="o">=</span> <span class="nx">oMenuLabel</span><span class="o">.</span><span class="nx">on</span><span class="o">(</span><span class="s2">"click"</span><span class="o">,</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hideAllSubmenus</span><span class="o">(</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">_rootMenu</span><span class="o">);</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hasFocus</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_clearActiveItem</span><span class="o">();</span>
<span class="nx">oMenuLabel</span><span class="o">.</span><span class="nx">_clickHandle</span><span class="o">.</span><span class="nx">detach</span><span class="o">();</span>
<span class="nx">oMenuLabel</span><span class="o">.</span><span class="nx">_clickHandle</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
<span class="o">});</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">sType</span> <span class="o">===</span> <span class="nx">CLICK</span><span class="o">)</span> <span class="o">{</span>
<span class="c">// Prevent the browser from following the URL of </span>
<span class="c"></span> <span class="c">// the anchor element</span>
<span class="c"></span>
<span class="nx">event</span><span class="o">.</span><span class="nx">preventDefault</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method _onKeyPress</span>
<span class="c"> * @description "keypress" event handler for the menu.</span>
<span class="c"> * @protected</span>
<span class="c"> * @param {Object} event Object representing the DOM event.</span>
<span class="c"> */</span>
<span class="nx">_onKeyPress</span><span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">event</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">switch</span> <span class="o">(</span><span class="nx">event</span><span class="o">.</span><span class="nx">keyCode</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">case</span> <span class="m">37</span><span class="o">:</span> <span class="c">// left arrow</span>
<span class="c"></span> <span class="nx">case</span> <span class="m">38</span><span class="o">:</span> <span class="c">// up arrow</span>
<span class="c"></span> <span class="nx">case</span> <span class="m">39</span><span class="o">:</span> <span class="c">// right arrow</span>
<span class="c"></span> <span class="nx">case</span> <span class="m">40</span><span class="o">:</span> <span class="c">// down arrow</span>
<span class="c"></span>
<span class="c">// Prevent the browser from scrolling the window</span>
<span class="c"></span>
<span class="nx">event</span><span class="o">.</span><span class="nx">preventDefault</span><span class="o">();</span>
<span class="k">break</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method _onKeyDown</span>
<span class="c"> * @description "keydown" event handler for the menu.</span>
<span class="c"> * @protected</span>
<span class="c"> * @param {Object} event Object representing the DOM event.</span>
<span class="c"> */</span>
<span class="nx">_onKeyDown</span><span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">event</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">menuNav</span> <span class="o">=</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">oActiveItem</span> <span class="o">=</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_activeItem</span><span class="o">,</span>
<span class="nx">oTarget</span> <span class="o">=</span> <span class="nx">event</span><span class="o">.</span><span class="nx">target</span><span class="o">,</span>
<span class="nx">oActiveMenu</span> <span class="o">=</span> <span class="nx">getParentMenu</span><span class="o">(</span><span class="nx">oTarget</span><span class="o">),</span>
<span class="nx">oSubmenu</span><span class="o">;</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oActiveMenu</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_activeMenu</span> <span class="o">=</span> <span class="nx">oActiveMenu</span><span class="o">;</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">isHorizontalMenu</span><span class="o">(</span><span class="nx">oActiveMenu</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_onHorizontalMenuKeyDown</span><span class="o">(</span><span class="nx">event</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_onVerticalMenuKeyDown</span><span class="o">(</span><span class="nx">event</span><span class="o">);</span>
<span class="o">}</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">event</span><span class="o">.</span><span class="nx">keyCode</span> <span class="o">===</span> <span class="m">27</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(!</span><span class="nx">menuNav</span><span class="o">.</span><span class="nx">_isRoot</span><span class="o">(</span><span class="nx">oActiveMenu</span><span class="o">))</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">UA</span><span class="o">.</span><span class="nx">opera</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">later</span><span class="o">(</span><span class="m">0</span><span class="o">,</span> <span class="nx">menuNav</span><span class="o">,</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hideMenu</span><span class="o">(</span><span class="nx">oActiveMenu</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="o">});</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hideMenu</span><span class="o">(</span><span class="nx">oActiveMenu</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span>
<span class="o">}</span>
<span class="nx">event</span><span class="o">.</span><span class="nx">stopPropagation</span><span class="o">();</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_blockMouseEvent</span> <span class="o">=</span> <span class="nx">UA</span><span class="o">.</span><span class="nx">gecko</span> <span class="o">?</span> <span class="kc">true</span> <span class="o">:</span> <span class="kc">false</span><span class="o">;</span>
<span class="o">}</span>
<span class="k">else</span> <span class="k">if</span> <span class="o">(</span><span class="nx">oActiveItem</span><span class="o">)</span> <span class="o">{</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">isMenuLabel</span><span class="o">(</span><span class="nx">oActiveItem</span><span class="o">)</span> <span class="o">&&</span>
<span class="nx">hasVisibleSubmenu</span><span class="o">(</span><span class="nx">oActiveItem</span><span class="o">))</span> <span class="o">{</span>
<span class="nx">oSubmenu</span> <span class="o">=</span> <span class="nx">oActiveItem</span><span class="o">.</span><span class="nx">next</span><span class="o">();</span>
<span class="k">if</span> <span class="o">(</span><span class="nx">oSubmenu</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hideMenu</span><span class="o">(</span><span class="nx">oSubmenu</span><span class="o">);</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="k">else</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_focusManager</span><span class="o">.</span><span class="nx">blur</span><span class="o">();</span>
<span class="c">// This is necessary for Webkit since blurring the </span>
<span class="c"></span> <span class="c">// active menuitem won't result in the document </span>
<span class="c"></span> <span class="c">// gaining focus, meaning the that _onDocFocus </span>
<span class="c"></span> <span class="c">// listener won't clear the active menuitem.</span>
<span class="c"></span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_clearActiveItem</span><span class="o">();</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hasFocus</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">},</span>
<span class="c">/**</span>
<span class="c"> * @method _onDocMouseDown</span>
<span class="c"> * @description "mousedown" event handler for the owner document of </span>
<span class="c"> * the menu.</span>
<span class="c"> * @protected</span>
<span class="c"> * @param {Object} event Object representing the DOM event.</span>
<span class="c"> */</span>
<span class="nx">_onDocMouseDown</span><span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">event</span><span class="o">)</span> <span class="o">{</span>
<span class="k">var</span> <span class="nx">menuNav</span> <span class="o">=</span> <span class="k">this</span><span class="o">,</span>
<span class="nx">oRoot</span> <span class="o">=</span> <span class="nx">menuNav</span><span class="o">.</span><span class="nx">_rootMenu</span><span class="o">,</span>
<span class="nx">oTarget</span> <span class="o">=</span> <span class="nx">event</span><span class="o">.</span><span class="nx">target</span><span class="o">;</span>
<span class="k">if</span> <span class="o">(!(</span><span class="nx">oRoot</span><span class="o">.</span><span class="nx">compareTo</span><span class="o">(</span><span class="nx">oTarget</span><span class="o">)</span> <span class="o">||</span> <span class="nx">oRoot</span><span class="o">.</span><span class="nx">contains</span><span class="o">(</span><span class="nx">oTarget</span><span class="o">)))</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hideAllSubmenus</span><span class="o">(</span><span class="nx">oRoot</span><span class="o">);</span>
<span class="c">// Document doesn't receive focus in Webkit when the user mouses </span>
<span class="c"></span> <span class="c">// down on it, so the "_hasFocus" property won't get set to the </span>
<span class="c"></span> <span class="c">// correct value. The following line corrects the problem.</span>
<span class="c"></span>
<span class="k">if</span> <span class="o">(</span><span class="nx">UA</span><span class="o">.</span><span class="nx">webkit</span><span class="o">)</span> <span class="o">{</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_hasFocus</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>
<span class="nx">menuNav</span><span class="o">.</span><span class="nx">_clearActiveItem</span><span class="o">();</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">}</span>
<span class="o">});</span>
<span class="nx">Y</span><span class="o">.</span><span class="nx">namespace</span><span class="o">(</span><span class="s1">'Plugin'</span><span class="o">);</span>
<span class="nx">Y</span><span class="o">.</span><span class="nx">Plugin</span><span class="o">.</span><span class="nx">NodeMenuNav</span> <span class="o">=</span> <span class="nx">NodeMenuNav</span><span class="o">;</span>
</pre></div>
</div>
</div>
</div>
<div class="yui-b">
<div class="nav">
<div id="moduleList" class="module">
<h4>Modules</h4>
<ul class="content">
<li class=""><a href="module_anim.html" title="anim">anim</a></li>
<li class=""><a href="module_async-queue.html" title="async-queue">async-queue</a></li>
<li class=""><a href="module_attribute.html" title="attribute">attribute</a></li>
<li class=""><a href="module_base.html" title="base">base</a></li>
<li class=""><a href="module_cache.html" title="cache">cache</a></li>
<li class=""><a href="module_classnamemanager.html" title="classnamemanager">classnamemanager</a></li>
<li class=""><a href="module_collection.html" title="collection">collection</a></li>
<li class=""><a href="module_console.html" title="console">console</a></li>
<li class=""><a href="module_console-filters.html" title="console-filters">console-filters</a></li>
<li class=""><a href="module_cookie.html" title="cookie">cookie</a></li>
<li class=""><a href="module_dataschema.html" title="dataschema">dataschema</a></li>
<li class=""><a href="module_datasource.html" title="datasource">datasource</a></li>
<li class=""><a href="module_datatype.html" title="datatype">datatype</a></li>
<li class=""><a href="module_dd.html" title="dd">dd</a></li>
<li class=""><a href="module_dom.html" title="dom">dom</a></li>
<li class=""><a href="module_dump.html" title="dump">dump</a></li>
<li class=""><a href="module_event.html" title="event">event</a></li>
<li class=""><a href="module_event-custom.html" title="event-custom">event-custom</a></li>
<li class=""><a href="module_event-simulate.html" title="event-simulate">event-simulate</a></li>
<li class=""><a href="module_history.html" title="history">history</a></li>
<li class=""><a href="module_imageloader.html" title="imageloader">imageloader</a></li>
<li class=""><a href="module_io.html" title="io">io</a></li>
<li class=""><a href="module_json.html" title="json">json</a></li>
<li class=""><a href="module_node.html" title="node">node</a></li>
<li class=""><a href="module_node-focusmanager.html" title="node-focusmanager">node-focusmanager</a></li>
<li class="selected"><a href="module_node-menunav.html" title="node-menunav">node-menunav</a></li>
<li class=""><a href="module_oop.html" title="oop">oop</a></li>
<li class=""><a href="module_overlay.html" title="overlay">overlay</a></li>
<li class=""><a href="module_plugin.html" title="plugin">plugin</a></li>
<li class=""><a href="module_profiler.html" title="profiler">profiler</a></li>
<li class=""><a href="module_queue-promote.html" title="queue-promote">queue-promote</a></li>
<li class=""><a href="module_slider.html" title="slider">slider</a></li>
<li class=""><a href="module_stylesheet.html" title="stylesheet">stylesheet</a></li>
<li class=""><a href="module_substitute.html" title="substitute">substitute</a></li>
<li class=""><a href="module_test.html" title="test">test</a></li>
<li class=""><a href="module_widget.html" title="widget">widget</a></li>
<li class=""><a href="module_widget-position.html" title="widget-position">widget-position</a></li>
<li class=""><a href="module_widget-position-ext.html" title="widget-position-ext">widget-position-ext</a></li>
<li class=""><a href="module_widget-stack.html" title="widget-stack">widget-stack</a></li>
<li class=""><a href="module_widget-stdmod.html" title="widget-stdmod">widget-stdmod</a></li>
<li class=""><a href="module_yui.html" title="yui">yui</a></li>
</ul>
</div>
<div id="classList" class="module">
<h4>Classes</h4>
<ul class="content">
<li class=""><a href="plugin.NodeMenuNav.html" title="plugin.NodeMenuNav">plugin.NodeMenuNav</a></li>
</ul>
</div>
<div id="fileList" class="module">
<h4>Files</h4>
<ul class="content">
<li class="selected"><a href="node-menunav.js.html" title="node-menunav.js">node-menunav.js</a></li>
</ul>
</div>
</div>
</div>
</div>
<div id="ft">
<hr />
Copyright © 2009 Yahoo! Inc. All rights reserved.
</div>
</div>
<script type="text/javascript">
ALL_YUI_PROPS = [{"access": "protected", "host": "plugin.NodeMenuNav", "name": "_activeItem", "url": "plugin.NodeMenuNav.html#property__activeItem", "type": "property"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_activeMenu", "url": "plugin.NodeMenuNav.html#property__activeMenu", "type": "property"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_afterActiveDescendantChange", "url": "plugin.NodeMenuNav.html#method__afterActiveDescendantChange", "type": "method"}, {"access": "", "host": "plugin.NodeMenuNav", "name": "autoSubmenuDisplay", "url": "plugin.NodeMenuNav.html#config_autoSubmenuDisplay", "type": "config"}, {"access": "", "host": "plugin.NodeMenuNav", "name": "autoSubmenuDisplayChange", "url": "plugin.NodeMenuNav.html#event_autoSubmenuDisplayChange", "type": "event"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_blockMouseEvent", "url": "plugin.NodeMenuNav.html#property__blockMouseEvent", "type": "property"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_cancelHideSubmenuTimer", "url": "plugin.NodeMenuNav.html#method__cancelHideSubmenuTimer", "type": "method"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_cancelShowSubmenuTimer", "url": "plugin.NodeMenuNav.html#method__cancelShowSubmenuTimer", "type": "method"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_clearActiveItem", "url": "plugin.NodeMenuNav.html#method__clearActiveItem", "type": "method"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_currentMouseX", "url": "plugin.NodeMenuNav.html#property__currentMouseX", "type": "property"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_firstItem", "url": "plugin.NodeMenuNav.html#property__firstItem", "type": "property"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_focusItem", "url": "plugin.NodeMenuNav.html#method__focusItem", "type": "method"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_getTopmostSubmenu", "url": "plugin.NodeMenuNav.html#method__getTopmostSubmenu", "type": "method"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_hasFocus", "url": "plugin.NodeMenuNav.html#property__hasFocus", "type": "property"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_hideAllSubmenus", "url": "plugin.NodeMenuNav.html#method__hideAllSubmenus", "type": "method"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_hideAllSubmenusTimer", "url": "plugin.NodeMenuNav.html#property__hideAllSubmenusTimer", "type": "property"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_hideAndFocusLabel", "url": "plugin.NodeMenuNav.html#method__hideAndFocusLabel", "type": "method"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_hideMenu", "url": "plugin.NodeMenuNav.html#method__hideMenu", "type": "method"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_hideSubmenuTimer", "url": "plugin.NodeMenuNav.html#property__hideSubmenuTimer", "type": "property"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_initFocusManager", "url": "plugin.NodeMenuNav.html#method__initFocusManager", "type": "method"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_isRoot", "url": "plugin.NodeMenuNav.html#method__isRoot", "type": "method"}, {"access": "", "host": "plugin.NodeMenuNav", "name": "mouseOutHideDelay", "url": "plugin.NodeMenuNav.html#config_mouseOutHideDelay", "type": "config"}, {"access": "", "host": "plugin.NodeMenuNav", "name": "mouseOutHideDelayChange", "url": "plugin.NodeMenuNav.html#event_mouseOutHideDelayChange", "type": "event"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_movingToSubmenu", "url": "plugin.NodeMenuNav.html#property__movingToSubmenu", "type": "property"}, {"access": "", "host": "plugin.NodeMenuNav", "name": "NodeMenuNav.SHIM_TEMPLATE", "url": "plugin.NodeMenuNav.html#property_NodeMenuNav.SHIM_TEMPLATE", "type": "property"}, {"access": "", "host": "plugin.NodeMenuNav", "name": "NodeMenuNav.SHIM_TEMPLATE_TITLE", "url": "plugin.NodeMenuNav.html#property_NodeMenuNav.SHIM_TEMPLATE_TITLE", "type": "property"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_onActiveDescendantChange", "url": "plugin.NodeMenuNav.html#method__onActiveDescendantChange", "type": "method"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_onDocFocus", "url": "plugin.NodeMenuNav.html#method__onDocFocus", "type": "method"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_onDocMouseDown", "url": "plugin.NodeMenuNav.html#method__onDocMouseDown", "type": "method"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_onHorizontalMenuKeyDown", "url": "plugin.NodeMenuNav.html#method__onHorizontalMenuKeyDown", "type": "method"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_onKeyDown", "url": "plugin.NodeMenuNav.html#method__onKeyDown", "type": "method"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_onKeyPress", "url": "plugin.NodeMenuNav.html#method__onKeyPress", "type": "method"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_onMenuItemMouseOut", "url": "plugin.NodeMenuNav.html#method__onMenuItemMouseOut", "type": "method"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_onMenuItemMouseOver", "url": "plugin.NodeMenuNav.html#method__onMenuItemMouseOver", "type": "method"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_onMenuLabelMouseOut", "url": "plugin.NodeMenuNav.html#method__onMenuLabelMouseOut", "type": "method"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_onMenuLabelMouseOver", "url": "plugin.NodeMenuNav.html#method__onMenuLabelMouseOver", "type": "method"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_onMenuMouseOut", "url": "plugin.NodeMenuNav.html#method__onMenuMouseOut", "type": "method"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_onMenuMouseOver", "url": "plugin.NodeMenuNav.html#method__onMenuMouseOver", "type": "method"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_onMouseMove", "url": "plugin.NodeMenuNav.html#method__onMouseMove", "type": "method"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_onMouseOut", "url": "plugin.NodeMenuNav.html#method__onMouseOut", "type": "method"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_onMouseOver", "url": "plugin.NodeMenuNav.html#method__onMouseOver", "type": "method"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_onVerticalMenuKeyDown", "url": "plugin.NodeMenuNav.html#method__onVerticalMenuKeyDown", "type": "method"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_rootMenu", "url": "plugin.NodeMenuNav.html#property__rootMenu", "type": "property"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_setActiveItem", "url": "plugin.NodeMenuNav.html#method__setActiveItem", "type": "method"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_showMenu", "url": "plugin.NodeMenuNav.html#method__showMenu", "type": "method"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_showSubmenuTimer", "url": "plugin.NodeMenuNav.html#property__showSubmenuTimer", "type": "property"}, {"access": "", "host": "plugin.NodeMenuNav", "name": "submenuHideDelay", "url": "plugin.NodeMenuNav.html#config_submenuHideDelay", "type": "config"}, {"access": "", "host": "plugin.NodeMenuNav", "name": "submenuHideDelayChange", "url": "plugin.NodeMenuNav.html#event_submenuHideDelayChange", "type": "event"}, {"access": "", "host": "plugin.NodeMenuNav", "name": "submenuShowDelay", "url": "plugin.NodeMenuNav.html#config_submenuShowDelay", "type": "config"}, {"access": "", "host": "plugin.NodeMenuNav", "name": "submenuShowDelayChange", "url": "plugin.NodeMenuNav.html#event_submenuShowDelayChange", "type": "event"}, {"access": "protected", "host": "plugin.NodeMenuNav", "name": "_toggleSubmenuDisplay", "url": "plugin.NodeMenuNav.html#method__toggleSubmenuDisplay", "type": "method"}, {"access": "", "host": "plugin.NodeMenuNav", "name": "useARIA", "url": "plugin.NodeMenuNav.html#config_useARIA", "type": "config"}, {"access": "", "host": "plugin.NodeMenuNav", "name": "useARIAChange", "url": "plugin.NodeMenuNav.html#event_useARIAChange", "type": "event"}];
</script>
</body>
</html>