src/cm/media/js/lib/yui/yui_3.0.0b1/api/node-focusmanager.js.html
changeset 0 40c8f766c9b8
equal deleted inserted replaced
-1:000000000000 0:40c8f766c9b8
       
     1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
       
     2 <html xmlns:yui="http://yuilibrary.com/rdf/1.0/yui.rdf#">
       
     3 <head>
       
     4     <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
       
     5 	<title>API: node-focusmanager   node-focusmanager.js  (YUI Library)</title>
       
     6 
       
     7 	<link rel="stylesheet" type="text/css" href="assets/reset-fonts-grids-min.css" />
       
     8 	<link rel="stylesheet" type="text/css" href="assets/api.css" />
       
     9 
       
    10     <script type="text/javascript" src="assets/api-js"></script>
       
    11     <script type="text/javascript" src="assets/ac-js"></script>
       
    12 </head>
       
    13 
       
    14 <body id="yahoo-com">
       
    15 
       
    16 <div id="doc3" class="yui-t2">
       
    17 	<div id="hd">
       
    18         <h1><a href="http://developer.yahoo.com/yui/" title="Yahoo! UI Library">Yahoo! UI Library</a></h1>
       
    19         <h3>node-focusmanager&nbsp; <span class="subtitle">3.0.0b1</span></h3>
       
    20         <a href="./index.html" title="Yahoo! UI Library">Yahoo! UI Library</a> 
       
    21             &gt; <a href="./module_node-focusmanager.html" title="node-focusmanager">node-focusmanager</a>
       
    22                 
       
    23                  &gt; node-focusmanager.js (source view) 
       
    24         <form onsubmit="return false">
       
    25             <div id="propertysearch">
       
    26                 Search: <input autocomplete="off" id="searchinput" />
       
    27                 <div id="searchresults">
       
    28                     &nbsp;
       
    29                 </div>
       
    30             </div>
       
    31         </form>
       
    32 	</div>
       
    33 
       
    34 	<div id="bd">
       
    35 		<div id="yui-main">
       
    36 			<div class="yui-b">
       
    37             <form action="#" name="yui-classopts-form" method="get" id="yui-classopts-form">
       
    38                 <fieldset>
       
    39                     <legend>Filters</legend>
       
    40                 <span class="classopts"><input type="checkbox" name="show_private" id="show_private" /> <label for="show_private">Show Private</label></span>
       
    41                 <span class="classopts"><input type="checkbox" name="show_protected" id="show_protected" /> <label for="show_protected">Show Protected</label></span>
       
    42                 <span class="classopts"><input type="checkbox" name="show_deprecated" id="show_deprecated" /> <label for="show_deprecated">Show Deprecated</label></span>
       
    43                 </fieldset>
       
    44             </form>
       
    45 
       
    46                     <div id="srcout">
       
    47                         <style>
       
    48                             #doc3 .classopts { display:none; }
       
    49                         </style>
       
    50 <div class="highlight" ><pre><span class="c">/**</span>
       
    51 <span class="c">* &lt;p&gt;The Focus Manager Node Plugin makes it easy to manage focus among  </span>
       
    52 <span class="c">* a Node&#39;s descendants.  Primarily intended to help with widget development, </span>
       
    53 <span class="c">* the Focus Manager Node Plugin can be used to improve the keyboard </span>
       
    54 <span class="c">* accessibility of widgets.&lt;/p&gt;</span>
       
    55 <span class="c">* </span>
       
    56 <span class="c">* &lt;p&gt;</span>
       
    57 <span class="c">* When designing widgets that manage a set of descendant controls (i.e. buttons</span>
       
    58 <span class="c">* in a toolbar, tabs in a tablist, menuitems in a menu, etc.) it is important to </span>
       
    59 <span class="c">* limit the number of descendants in the browser&#39;s default tab flow.  The fewer </span>
       
    60 <span class="c">* number of descendants in the default tab flow, the easier it is for keyboard </span>
       
    61 <span class="c">* users to navigate between widgets by pressing the tab key.  When a widget has </span>
       
    62 <span class="c">* focus it should provide a set of shortcut keys (typically the arrow keys) </span>
       
    63 <span class="c">* to move focus among its descendants.</span>
       
    64 <span class="c">* &lt;/p&gt;</span>
       
    65 <span class="c">* </span>
       
    66 <span class="c">* &lt;p&gt;</span>
       
    67 <span class="c">* To this end, the Focus Manager Node Plugin makes it easy to define a Node&#39;s </span>
       
    68 <span class="c">* focusable descendants, define which descendant should be in the default tab </span>
       
    69 <span class="c">* flow, and define the keys that move focus among each descendant.</span>
       
    70 <span class="c">* Additionally, as the CSS </span>
       
    71 <span class="c">* &lt;a href=&quot;http://www.w3.org/TR/CSS21/selector.html#x38&quot;&gt;&lt;code&gt;:focus&lt;/code&gt;&lt;/a&gt; </span>
       
    72 <span class="c">* pseudo class is not supported on all elements in all </span>
       
    73 <span class="c">* &lt;a href=&quot;http://developer.yahoo.com/yui/articles/gbs/&quot;&gt;A-Grade browsers&lt;/a&gt;,</span>
       
    74 <span class="c">* the Focus Manager Node Plugin provides an easy, cross-browser means of </span>
       
    75 <span class="c">* styling focus.</span>
       
    76 <span class="c">* &lt;/p&gt;</span>
       
    77 <span class="c">*  </span>
       
    78 <span class="c">* @module node-focusmanager</span>
       
    79 <span class="c">*/</span>
       
    80 
       
    81 	<span class="c">//	Frequently used strings</span>
       
    82 <span class="c"></span>
       
    83 <span class="k">var</span> <span class="nx">ACTIVE_DESCENDANT</span> <span class="o">=</span> <span class="s2">&quot;activeDescendant&quot;</span><span class="o">,</span>
       
    84 	<span class="nx">ID</span> <span class="o">=</span> <span class="s2">&quot;id&quot;</span><span class="o">,</span>
       
    85 	<span class="nx">DISABLED</span> <span class="o">=</span> <span class="s2">&quot;disabled&quot;</span><span class="o">,</span>
       
    86 	<span class="nx">TAB_INDEX</span> <span class="o">=</span> <span class="s2">&quot;tabIndex&quot;</span><span class="o">,</span>
       
    87 	<span class="nx">FOCUSED</span> <span class="o">=</span> <span class="s2">&quot;focused&quot;</span><span class="o">,</span>
       
    88 	<span class="nx">FOCUS_CLASS</span> <span class="o">=</span> <span class="s2">&quot;focusClass&quot;</span><span class="o">,</span>
       
    89 	<span class="nx">CIRCULAR</span> <span class="o">=</span> <span class="s2">&quot;circular&quot;</span><span class="o">,</span>
       
    90 	<span class="nx">UI</span> <span class="o">=</span> <span class="s2">&quot;UI&quot;</span><span class="o">,</span>
       
    91 	<span class="nx">KEY</span> <span class="o">=</span> <span class="s2">&quot;key&quot;</span><span class="o">,</span>
       
    92 	<span class="nx">ACTIVE_DESCENDANT_CHANGE</span> <span class="o">=</span> <span class="nx">ACTIVE_DESCENDANT</span> <span class="o">+</span> <span class="s2">&quot;Change&quot;</span><span class="o">,</span>
       
    93 	<span class="nx">HOST</span> <span class="o">=</span> <span class="s2">&quot;host&quot;</span><span class="o">,</span>
       
    94 
       
    95 	<span class="c">//	Collection of keys that, when pressed, cause the browser viewport</span>
       
    96 <span class="c"></span>	<span class="c">//	to scroll.</span>
       
    97 <span class="c"></span>	<span class="nx">scrollKeys</span> <span class="o">=</span> <span class="o">{</span>
       
    98 		<span class="m">37</span><span class="o">:</span> <span class="kc">true</span><span class="o">,</span>
       
    99 		<span class="m">38</span><span class="o">:</span> <span class="kc">true</span><span class="o">,</span>
       
   100 		<span class="m">39</span><span class="o">:</span> <span class="kc">true</span><span class="o">,</span>
       
   101 		<span class="m">40</span><span class="o">:</span> <span class="kc">true</span>
       
   102 	<span class="o">},</span>
       
   103 	
       
   104 	<span class="nx">clickableElements</span> <span class="o">=</span> <span class="o">{</span>
       
   105 		<span class="s2">&quot;a&quot;</span><span class="o">:</span> <span class="kc">true</span><span class="o">,</span>
       
   106 		<span class="s2">&quot;button&quot;</span><span class="o">:</span> <span class="kc">true</span><span class="o">,</span>
       
   107 		<span class="s2">&quot;input&quot;</span><span class="o">:</span> <span class="kc">true</span><span class="o">,</span>
       
   108 		<span class="s2">&quot;object&quot;</span><span class="o">:</span> <span class="kc">true</span>
       
   109 	<span class="o">},</span>	
       
   110 
       
   111 	<span class="c">//	Library shortcuts</span>
       
   112 <span class="c"></span>
       
   113 	<span class="nx">Lang</span> <span class="o">=</span> <span class="nx">Y</span><span class="o">.</span><span class="nx">Lang</span><span class="o">,</span>
       
   114  	<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>
       
   115 
       
   116 	<span class="c">/**</span>
       
   117 <span class="c">	* The NodeFocusManager class is a plugin for a Node instance.  The class is used </span>
       
   118 <span class="c">	* via the &lt;a href=&quot;Node.html#method_plug&quot;&gt;&lt;code&gt;plug&lt;/code&gt;&lt;/a&gt; method of Node </span>
       
   119 <span class="c">	* and should not be instantiated directly.</span>
       
   120 <span class="c">	* @namespace plugin</span>
       
   121 <span class="c">	* @class NodeFocusManager</span>
       
   122 <span class="c">	*/</span>	
       
   123 	<span class="nx">NodeFocusManager</span> <span class="o">=</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
       
   124 
       
   125 		<span class="nx">NodeFocusManager</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>
       
   126 
       
   127 	<span class="o">};</span>
       
   128 
       
   129 
       
   130 <span class="nx">NodeFocusManager</span><span class="o">.</span><span class="nx">ATTRS</span> <span class="o">=</span> <span class="o">{</span>
       
   131 
       
   132 	<span class="c">/**</span>
       
   133 <span class="c">	* Boolean indicating that one of the descendants is focused.</span>
       
   134 <span class="c">	*</span>
       
   135 <span class="c">	* @attribute focused</span>
       
   136 <span class="c">	* @readOnly</span>
       
   137 <span class="c">	* @default false</span>
       
   138 <span class="c">	* @type boolean</span>
       
   139 <span class="c">	*/</span>
       
   140 	<span class="nx">focused</span><span class="o">:</span> <span class="o">{</span>
       
   141 		
       
   142 		<span class="nx">value</span><span class="o">:</span> <span class="kc">false</span><span class="o">,</span>
       
   143 		<span class="nx">readOnly</span><span class="o">:</span> <span class="kc">true</span>
       
   144 		
       
   145 	<span class="o">},</span>
       
   146 
       
   147 
       
   148 	<span class="c">/**</span>
       
   149 <span class="c">	* String representing the CSS selector used to define the descendant Nodes </span>
       
   150 <span class="c">	* whose focus should be managed.</span>
       
   151 <span class="c">	*</span>
       
   152 <span class="c">	* @attribute descendants</span>
       
   153 <span class="c">	* @type Y.NodeList</span>
       
   154 <span class="c">	*/</span>
       
   155 	<span class="nx">descendants</span><span class="o">:</span> <span class="o">{</span>
       
   156 
       
   157 		<span class="nx">getter</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>
       
   158 
       
   159 			<span class="k">return</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">queryAll</span><span class="o">(</span><span class="nx">value</span><span class="o">);</span>
       
   160 			
       
   161 		<span class="o">}</span>
       
   162 
       
   163 	<span class="o">},</span>
       
   164 
       
   165 
       
   166 	<span class="c">/**</span>
       
   167 <span class="c">	* &lt;p&gt;Node, or index of the Node, representing the descendant that is either </span>
       
   168 <span class="c">	* focused or is focusable (&lt;code&gt;tabIndex&lt;/code&gt; attribute is set to 0).  </span>
       
   169 <span class="c">	* The value cannot represent a disabled descendant Node.  Use a value of -1</span>
       
   170 <span class="c">	* to remove all descendant Nodes from the default tab flow.</span>
       
   171 <span class="c">	* If no value is specified, the active descendant will be inferred using </span>
       
   172 <span class="c">	* the following criteria:&lt;/p&gt;</span>
       
   173 <span class="c">	* &lt;ol&gt;</span>
       
   174 <span class="c">	* &lt;li&gt;Examining the &lt;code&gt;tabIndex&lt;/code&gt; attribute of each descendant and </span>
       
   175 <span class="c">	* using the first descendant whose &lt;code&gt;tabIndex&lt;/code&gt; attribute is set </span>
       
   176 <span class="c">	* to 0&lt;/li&gt;</span>
       
   177 <span class="c">	* &lt;li&gt;If no default can be inferred then the value is set to either 0 or </span>
       
   178 <span class="c">	* the index of the first enabled descendant.&lt;/li&gt;</span>
       
   179 <span class="c">	* &lt;/ol&gt;</span>
       
   180 <span class="c">	* </span>
       
   181 <span class="c">	* @attribute activeDescendant</span>
       
   182 <span class="c">	* @type Number</span>
       
   183 <span class="c">	*/</span>
       
   184 	<span class="nx">activeDescendant</span><span class="o">:</span> <span class="o">{</span>
       
   185 
       
   186 		<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>
       
   187 			
       
   188 			<span class="k">var</span> <span class="nx">isNumber</span> <span class="o">=</span> <span class="nx">Lang</span><span class="o">.</span><span class="nx">isNumber</span><span class="o">,</span>
       
   189 				<span class="nx">INVALID_VALUE</span> <span class="o">=</span> <span class="nx">Y</span><span class="o">.</span><span class="nx">Attribute</span><span class="o">.</span><span class="nx">INVALID_VALUE</span><span class="o">,</span>
       
   190 				<span class="nx">descendantsMap</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_descendantsMap</span><span class="o">,</span>
       
   191 				<span class="nx">descendants</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_descendants</span><span class="o">,</span>
       
   192 				<span class="nx">nodeIndex</span><span class="o">,</span>
       
   193 				<span class="nx">returnValue</span><span class="o">,</span>
       
   194 				<span class="nx">oNode</span><span class="o">;</span>
       
   195 			
       
   196 
       
   197 			<span class="k">if</span> <span class="o">(</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">value</span><span class="o">))</span> <span class="o">{</span>
       
   198 				<span class="nx">nodeIndex</span> <span class="o">=</span> <span class="nx">value</span><span class="o">;</span>
       
   199 				<span class="nx">returnValue</span> <span class="o">=</span> <span class="nx">nodeIndex</span><span class="o">;</span>
       
   200 			<span class="o">}</span>
       
   201 			<span class="k">else</span> <span class="k">if</span> <span class="o">((</span><span class="nx">value</span> <span class="k">instanceof</span> <span class="nx">Y</span><span class="o">.</span><span class="nx">Node</span><span class="o">)</span> <span class="o">&amp;&amp;</span> <span class="nx">descendantsMap</span><span class="o">)</span> <span class="o">{</span>
       
   202 
       
   203 				<span class="nx">nodeIndex</span> <span class="o">=</span> <span class="nx">descendantsMap</span><span class="o">[</span><span class="nx">value</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">ID</span><span class="o">)];</span>
       
   204 
       
   205 				<span class="k">if</span> <span class="o">(</span><span class="nx">isNumber</span><span class="o">(</span><span class="nx">nodeIndex</span><span class="o">))</span> <span class="o">{</span>
       
   206 					<span class="nx">returnValue</span> <span class="o">=</span> <span class="nx">nodeIndex</span><span class="o">;</span>
       
   207 				<span class="o">}</span>
       
   208 				<span class="k">else</span> <span class="o">{</span>
       
   209 
       
   210 					<span class="c">//	The user passed a reference to a Node that wasn&#39;t one</span>
       
   211 <span class="c"></span>					<span class="c">//	of the descendants.</span>
       
   212 <span class="c"></span>					<span class="nx">returnValue</span> <span class="o">=</span> <span class="nx">INVALID_VALUE</span><span class="o">;</span>					
       
   213 
       
   214 				<span class="o">}</span>
       
   215 
       
   216 			<span class="o">}</span>
       
   217 			<span class="k">else</span> <span class="o">{</span>
       
   218 				<span class="nx">returnValue</span> <span class="o">=</span> <span class="nx">INVALID_VALUE</span><span class="o">;</span>
       
   219 			<span class="o">}</span>
       
   220 
       
   221 
       
   222 			<span class="k">if</span> <span class="o">(</span><span class="nx">descendants</span><span class="o">)</span> <span class="o">{</span>
       
   223 
       
   224 				<span class="nx">oNode</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">nodeIndex</span><span class="o">);</span>
       
   225 			
       
   226 				<span class="k">if</span> <span class="o">(</span><span class="nx">oNode</span> <span class="o">&amp;&amp;</span> <span class="nx">oNode</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;disabled&quot;</span><span class="o">))</span> <span class="o">{</span>
       
   227 
       
   228 					<span class="c">//	Setting the &quot;activeDescendant&quot; attribute to the index</span>
       
   229 <span class="c"></span>					<span class="c">//	of a disabled descendant is invalid.</span>
       
   230 <span class="c"></span>					<span class="nx">returnValue</span> <span class="o">=</span> <span class="nx">INVALID_VALUE</span><span class="o">;</span>
       
   231 					
       
   232 				<span class="o">}</span>
       
   233 
       
   234 			<span class="o">}</span>
       
   235 
       
   236 			<span class="k">return</span> <span class="nx">returnValue</span><span class="o">;</span>
       
   237 			
       
   238 		<span class="o">}</span>		
       
   239 
       
   240 	<span class="o">},</span>
       
   241 
       
   242 
       
   243 	<span class="c">/**</span>
       
   244 <span class="c">	* Object literal representing the keys to be used to navigate between the </span>
       
   245 <span class="c">	* next/previous descendant.  The format for the attribute&#39;s value is </span>
       
   246 <span class="c">	* &lt;code&gt;{ next: &quot;down:40&quot;, previous: &quot;down:38&quot; }&lt;/code&gt;.  The value for the </span>
       
   247 <span class="c">	* &quot;next&quot; and &quot;previous&quot; properties are used to attach </span>
       
   248 <span class="c">	* &lt;a href=&quot;event/#keylistener&quot;&gt;&lt;code&gt;key&lt;/code&gt;&lt;/a&gt; event listeners. See </span>
       
   249 <span class="c">	* the &lt;a href=&quot;event/#keylistener&quot;&gt;Using the key Event&lt;/a&gt; section of </span>
       
   250 <span class="c">	* the Event documentation for more information on &quot;key&quot; event listeners.</span>
       
   251 <span class="c">	* </span>
       
   252 <span class="c">	* @attribute keys</span>
       
   253 <span class="c">	* @type Object</span>
       
   254 <span class="c">	*/</span>
       
   255 	<span class="nx">keys</span><span class="o">:</span> <span class="o">{</span>
       
   256 	
       
   257 		<span class="nx">value</span><span class="o">:</span> <span class="o">{</span>
       
   258 
       
   259 			<span class="nx">next</span><span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
       
   260 			<span class="nx">previous</span><span class="o">:</span> <span class="kc">null</span>
       
   261 			
       
   262 		<span class="o">}</span>
       
   263 
       
   264 		
       
   265 	<span class="o">},</span>
       
   266 
       
   267 
       
   268 	<span class="c">/**</span>
       
   269 <span class="c">	* String representing the name of class applied to the focused active  </span>
       
   270 <span class="c">	* descendant Node.  Can also be an object literal used to define both the </span>
       
   271 <span class="c">	* class name, and the Node to which the class should be applied.  If using </span>
       
   272 <span class="c">	* an object literal, the format is:</span>
       
   273 <span class="c">	* &lt;code&gt;{ className: &quot;focus&quot;, fn: myFunction }&lt;/code&gt;.  The function </span>
       
   274 <span class="c">	* referenced by the &lt;code&gt;fn&lt;/code&gt; property in the object literal will be</span>
       
   275 <span class="c">	* passed a reference to the currently focused active descendant Node.</span>
       
   276 <span class="c">	* </span>
       
   277 <span class="c">	* @attribute focusClass</span>
       
   278 <span class="c">	* @type String|Object</span>
       
   279 <span class="c">	*/</span>
       
   280 	<span class="nx">focusClass</span><span class="o">:</span> <span class="o">{</span> <span class="o">},</span>
       
   281 
       
   282 
       
   283 	<span class="c">/**</span>
       
   284 <span class="c">	* Boolean indicating if focus should be set to the first/last descendant </span>
       
   285 <span class="c">	* when the end or beginning of the descendants has been reached.</span>
       
   286 <span class="c">	* </span>
       
   287 <span class="c">	* @attribute circular</span>
       
   288 <span class="c">	* @type Boolean</span>
       
   289 <span class="c">	*/</span>
       
   290 	<span class="nx">circular</span><span class="o">:</span> <span class="o">{</span>
       
   291 		<span class="nx">value</span><span class="o">:</span> <span class="kc">true</span>
       
   292 	<span class="o">}</span>
       
   293 	
       
   294 <span class="o">};</span>
       
   295 
       
   296 <span class="nx">Y</span><span class="o">.</span><span class="nx">extend</span><span class="o">(</span><span class="nx">NodeFocusManager</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>
       
   297 
       
   298 	<span class="c">//	Protected properties</span>
       
   299 <span class="c"></span>
       
   300 	<span class="c">//	Boolean indicating if the NodeFocusManager is active.</span>
       
   301 <span class="c"></span>	<span class="nx">_stopped</span><span class="o">:</span> <span class="kc">true</span><span class="o">,</span>
       
   302 
       
   303 	<span class="c">//	NodeList representing the descendants selected via the </span>
       
   304 <span class="c"></span>	<span class="c">//	&quot;descendants&quot; attribute.</span>
       
   305 <span class="c"></span>	<span class="nx">_descendants</span><span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
       
   306 	
       
   307 	<span class="c">//	Object literal mapping the IDs of each descendant to its index in the </span>
       
   308 <span class="c"></span>	<span class="c">//	&quot;_descendants&quot; NodeList.</span>
       
   309 <span class="c"></span>	<span class="nx">_descendantsMap</span><span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
       
   310 
       
   311 	<span class="c">//	Reference to the Node instance to which the focused class (defined </span>
       
   312 <span class="c"></span>	<span class="c">//	by the &quot;focusClass&quot; attribute) is currently applied.</span>
       
   313 <span class="c"></span>	<span class="nx">_focusedNode</span><span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
       
   314 	
       
   315 	<span class="c">//	Number representing the index of the last descendant Node.</span>
       
   316 <span class="c"></span>	<span class="nx">_lastNodeIndex</span><span class="o">:</span> <span class="m">0</span><span class="o">,</span>
       
   317 
       
   318 	<span class="c">//	Array of handles for event handlers used for a NodeFocusManager instance.</span>
       
   319 <span class="c"></span>	<span class="nx">_eventHandlers</span><span class="o">:</span> <span class="kc">null</span><span class="o">,</span>
       
   320 
       
   321 
       
   322 
       
   323 	<span class="c">//	Protected methods</span>
       
   324 <span class="c"></span>
       
   325 	<span class="c">/**</span>
       
   326 <span class="c">	* @method _initDescendants</span>
       
   327 <span class="c">	* @description Sets the &lt;code&gt;tabIndex&lt;/code&gt; attribute of all of the </span>
       
   328 <span class="c">	* descendants to -1, except the active descendant, whose </span>
       
   329 <span class="c">	* &lt;code&gt;tabIndex&lt;/code&gt; attribute is set to 0.</span>
       
   330 <span class="c">	* @protected</span>
       
   331 <span class="c">	*/</span>
       
   332 	<span class="nx">_initDescendants</span><span class="o">:</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
       
   333 
       
   334 		<span class="k">var</span> <span class="nx">descendants</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="s2">&quot;descendants&quot;</span><span class="o">),</span>
       
   335 			<span class="nx">descendantsMap</span> <span class="o">=</span> <span class="o">{},</span>
       
   336 			<span class="nx">nFirstEnabled</span> <span class="o">=</span> <span class="o">-</span><span class="m">1</span><span class="o">,</span>
       
   337 			<span class="nx">nDescendants</span><span class="o">,</span>
       
   338 			<span class="nx">nActiveDescendant</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">ACTIVE_DESCENDANT</span><span class="o">),</span>
       
   339 			<span class="nx">oNode</span><span class="o">,</span>
       
   340 			<span class="nx">sID</span><span class="o">,</span>
       
   341 			<span class="nx">i</span> <span class="o">=</span> <span class="m">0</span><span class="o">;</span>
       
   342 
       
   343 
       
   344 
       
   345 		<span class="k">if</span> <span class="o">(</span><span class="nx">Lang</span><span class="o">.</span><span class="nx">isUndefined</span><span class="o">(</span><span class="nx">nActiveDescendant</span><span class="o">))</span> <span class="o">{</span>
       
   346 			<span class="nx">nActiveDescendant</span> <span class="o">=</span> <span class="o">-</span><span class="m">1</span><span class="o">;</span>
       
   347 		<span class="o">}</span>
       
   348 
       
   349 
       
   350 		<span class="k">if</span> <span class="o">(</span><span class="nx">descendants</span><span class="o">)</span> <span class="o">{</span>
       
   351 
       
   352 			<span class="nx">nDescendants</span> <span class="o">=</span> <span class="nx">descendants</span><span class="o">.</span><span class="nx">size</span><span class="o">();</span>
       
   353 			
       
   354 
       
   355 			<span class="k">if</span> <span class="o">(</span><span class="nx">nDescendants</span> <span class="o">&gt;</span> <span class="m">1</span><span class="o">)</span> <span class="o">{</span>
       
   356 
       
   357 				<span class="k">for</span> <span class="o">(</span><span class="nx">i</span> <span class="o">=</span> <span class="m">0</span><span class="o">;</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">nDescendants</span><span class="o">;</span> <span class="nx">i</span><span class="o">++)</span> <span class="o">{</span>
       
   358 
       
   359 					<span class="nx">oNode</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">i</span><span class="o">);</span>
       
   360 
       
   361 					<span class="k">if</span> <span class="o">(</span><span class="nx">nFirstEnabled</span> <span class="o">===</span> <span class="o">-</span><span class="m">1</span> <span class="o">&amp;&amp;</span> <span class="o">!</span><span class="nx">oNode</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">DISABLED</span><span class="o">))</span> <span class="o">{</span>
       
   362 						<span class="nx">nFirstEnabled</span> <span class="o">=</span> <span class="nx">i</span><span class="o">;</span>
       
   363 					<span class="o">}</span>
       
   364 
       
   365 
       
   366 					<span class="c">//	If the user didn&#39;t specify a value for the </span>
       
   367 <span class="c"></span>					<span class="c">//	&quot;activeDescendant&quot; attribute try to infer it from </span>
       
   368 <span class="c"></span>					<span class="c">//	the markup.</span>
       
   369 <span class="c"></span>
       
   370 					<span class="k">if</span> <span class="o">(</span><span class="nx">nActiveDescendant</span> <span class="o">&lt;</span> <span class="m">0</span> <span class="o">&amp;&amp;</span> 
       
   371 							<span class="nx">oNode</span><span class="o">.</span><span class="nx">getAttribute</span><span class="o">(</span><span class="nx">TAB_INDEX</span><span class="o">)</span> <span class="o">===</span> <span class="s2">&quot;0&quot;</span><span class="o">)</span> <span class="o">{</span>
       
   372 
       
   373 						<span class="nx">nActiveDescendant</span> <span class="o">=</span> <span class="nx">i</span><span class="o">;</span>
       
   374 
       
   375 					<span class="o">}</span>
       
   376 
       
   377 					<span class="nx">oNode</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="nx">TAB_INDEX</span><span class="o">,</span> <span class="o">-</span><span class="m">1</span><span class="o">);</span>
       
   378 
       
   379 					<span class="nx">sID</span> <span class="o">=</span> <span class="nx">oNode</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">ID</span><span class="o">);</span>
       
   380 
       
   381 					<span class="k">if</span> <span class="o">(!</span><span class="nx">sID</span><span class="o">)</span> <span class="o">{</span>
       
   382 						<span class="nx">sID</span> <span class="o">=</span> <span class="nx">Y</span><span class="o">.</span><span class="nx">guid</span><span class="o">();</span>
       
   383 						<span class="nx">oNode</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>
       
   384 					<span class="o">}</span>
       
   385 					
       
   386 					<span class="nx">descendantsMap</span><span class="o">[</span><span class="nx">sID</span><span class="o">]</span> <span class="o">=</span> <span class="nx">i</span><span class="o">;</span>
       
   387 					
       
   388 				<span class="o">}</span>
       
   389 				
       
   390 
       
   391 				<span class="c">//	If the user didn&#39;t specify a value for the  </span>
       
   392 <span class="c"></span>				<span class="c">//	&quot;activeDescendant&quot; attribute and no default value could be </span>
       
   393 <span class="c"></span>				<span class="c">//	determined from the markup, then default to 0.</span>
       
   394 <span class="c"></span>				
       
   395 				<span class="k">if</span> <span class="o">(</span><span class="nx">nActiveDescendant</span> <span class="o">&lt;</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
       
   396 					<span class="nx">nActiveDescendant</span> <span class="o">=</span> <span class="m">0</span><span class="o">;</span>
       
   397 				<span class="o">}</span>
       
   398 				
       
   399 
       
   400 				<span class="nx">oNode</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">nActiveDescendant</span><span class="o">);</span>
       
   401 
       
   402 				<span class="c">//	Check to make sure the active descendant isn&#39;t disabled, </span>
       
   403 <span class="c"></span>				<span class="c">//	and fall back to the first enabled descendant if it is.</span>
       
   404 <span class="c"></span>
       
   405 				<span class="k">if</span> <span class="o">(!</span><span class="nx">oNode</span> <span class="o">||</span> <span class="nx">oNode</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">DISABLED</span><span class="o">))</span> <span class="o">{</span>
       
   406 					<span class="nx">oNode</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">nFirstEnabled</span><span class="o">);</span>
       
   407 					<span class="nx">nActiveDescendant</span> <span class="o">=</span> <span class="nx">nFirstEnabled</span><span class="o">;</span>
       
   408 				<span class="o">}</span>
       
   409 
       
   410 				<span class="k">this</span><span class="o">.</span><span class="nx">_lastNodeIndex</span> <span class="o">=</span> <span class="nx">nDescendants</span> <span class="o">-</span> <span class="m">1</span><span class="o">;</span>
       
   411 				<span class="k">this</span><span class="o">.</span><span class="nx">_descendants</span> <span class="o">=</span> <span class="nx">descendants</span><span class="o">;</span>
       
   412 				<span class="k">this</span><span class="o">.</span><span class="nx">_descendantsMap</span> <span class="o">=</span> <span class="nx">descendantsMap</span><span class="o">;</span>
       
   413 
       
   414 				<span class="k">this</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">nActiveDescendant</span><span class="o">);</span>
       
   415 
       
   416 				<span class="c">//	Need to set the &quot;tabIndex&quot; attribute here, since the </span>
       
   417 <span class="c"></span>				<span class="c">//	&quot;activeDescendantChange&quot; event handler used to manage</span>
       
   418 <span class="c"></span>				<span class="c">//	the setting of the &quot;tabIndex&quot; attribute isn&#39;t wired up yet.</span>
       
   419 <span class="c"></span>
       
   420 				<span class="nx">oNode</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="nx">TAB_INDEX</span><span class="o">,</span> <span class="m">0</span><span class="o">);</span>
       
   421 
       
   422 			<span class="o">}</span>
       
   423 			
       
   424 		<span class="o">}</span>
       
   425 
       
   426 	<span class="o">},</span>
       
   427 
       
   428 
       
   429 	<span class="c">/**</span>
       
   430 <span class="c">	* @method _isDescendant</span>
       
   431 <span class="c">	* @description Determines if the specified Node instance is a descendant</span>
       
   432 <span class="c">	* managed by the Focus Manager.</span>
       
   433 <span class="c">	* @param node {Node} Node instance to be checked.</span>
       
   434 <span class="c">	* @return {Boolean} Boolean indicating if the specified Node instance is a </span>
       
   435 <span class="c">	* descendant managed by the Focus Manager.</span>
       
   436 <span class="c">	* @protected</span>
       
   437 <span class="c">	*/</span>
       
   438 	<span class="nx">_isDescendant</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>
       
   439 
       
   440 		<span class="k">return</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">ID</span><span class="o">)</span> <span class="k">in</span> <span class="k">this</span><span class="o">.</span><span class="nx">_descendantsMap</span><span class="o">);</span>
       
   441 		
       
   442 	<span class="o">},</span>
       
   443 	
       
   444 
       
   445 	<span class="c">/**</span>
       
   446 <span class="c">	* @method _removeFocusClass</span>
       
   447 <span class="c">	* @description Removes the class name representing focus (as specified by </span>
       
   448 <span class="c">	* the &quot;focusClass&quot; attribute) from the Node instance to which it is </span>
       
   449 <span class="c">	* currently applied.</span>
       
   450 <span class="c">	* @protected</span>
       
   451 <span class="c">	*/</span>
       
   452 	<span class="nx">_removeFocusClass</span><span class="o">:</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
       
   453 
       
   454 		<span class="k">var</span> <span class="nx">oFocusedNode</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_focusedNode</span><span class="o">,</span>
       
   455 			<span class="nx">focusClass</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">FOCUS_CLASS</span><span class="o">),</span>
       
   456 			<span class="nx">sClassName</span><span class="o">;</span>
       
   457 
       
   458 		<span class="k">if</span> <span class="o">(</span><span class="nx">focusClass</span><span class="o">)</span> <span class="o">{</span>
       
   459 			<span class="nx">sClassName</span> <span class="o">=</span> <span class="nx">Lang</span><span class="o">.</span><span class="nx">isString</span><span class="o">(</span><span class="nx">focusClass</span><span class="o">)</span> <span class="o">?</span> 
       
   460 				<span class="nx">focusClass</span> <span class="o">:</span> <span class="nx">focusClass</span><span class="o">.</span><span class="nx">className</span><span class="o">;</span>		
       
   461 		<span class="o">}</span>
       
   462 
       
   463 		<span class="k">if</span> <span class="o">(</span><span class="nx">oFocusedNode</span> <span class="o">&amp;&amp;</span> <span class="nx">sClassName</span><span class="o">)</span> <span class="o">{</span>
       
   464 			<span class="nx">oFocusedNode</span><span class="o">.</span><span class="nx">removeClass</span><span class="o">(</span><span class="nx">sClassName</span><span class="o">);</span>
       
   465 		<span class="o">}</span>
       
   466 		
       
   467 	<span class="o">},</span>
       
   468 
       
   469 
       
   470 	<span class="c">/**</span>
       
   471 <span class="c">	* @method _detachKeyHandler</span>
       
   472 <span class="c">	* @description Detaches the &quot;key&quot; event handlers used to support the &quot;keys&quot;</span>
       
   473 <span class="c">	* attribute.</span>
       
   474 <span class="c">	* @protected</span>
       
   475 <span class="c">	*/</span>
       
   476 	<span class="nx">_detachKeyHandler</span><span class="o">:</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
       
   477 
       
   478 		<span class="k">var</span> <span class="nx">prevKeyHandler</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_prevKeyHandler</span><span class="o">,</span>
       
   479 			<span class="nx">nextKeyHandler</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_nextKeyHandler</span><span class="o">;</span>
       
   480 
       
   481 		<span class="k">if</span> <span class="o">(</span><span class="nx">prevKeyHandler</span><span class="o">)</span> <span class="o">{</span>
       
   482 			<span class="nx">prevKeyHandler</span><span class="o">.</span><span class="nx">detach</span><span class="o">();</span>
       
   483 		<span class="o">}</span>
       
   484 		
       
   485 		<span class="k">if</span> <span class="o">(</span><span class="nx">nextKeyHandler</span><span class="o">)</span> <span class="o">{</span>
       
   486 			<span class="nx">nextKeyHandler</span><span class="o">.</span><span class="nx">detach</span><span class="o">();</span>
       
   487 		<span class="o">}</span>
       
   488 		
       
   489 	<span class="o">},</span>
       
   490 
       
   491 
       
   492 	<span class="c">/**</span>
       
   493 <span class="c">	* @method _preventScroll</span>
       
   494 <span class="c">	* @description Prevents the viewport from scolling when the user presses </span>
       
   495 <span class="c">	* the up, down, left, or right key.</span>
       
   496 <span class="c">	* @protected</span>
       
   497 <span class="c">	*/</span>
       
   498 	<span class="nx">_preventScroll</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>
       
   499 
       
   500 		<span class="k">if</span> <span class="o">(</span><span class="nx">scrollKeys</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>
       
   501 			<span class="nx">event</span><span class="o">.</span><span class="nx">preventDefault</span><span class="o">();</span>
       
   502 		<span class="o">}</span>
       
   503 		
       
   504 	<span class="o">},</span>
       
   505 
       
   506 
       
   507 	<span class="c">/**</span>
       
   508 <span class="c">	* @method _preventScroll</span>
       
   509 <span class="c">	* @description Fires the click event if the enter key is pressed while </span>
       
   510 <span class="c">	* focused on an HTML element that is not natively clickable.</span>
       
   511 <span class="c">	* @protected</span>
       
   512 <span class="c">	*/</span>
       
   513 	<span class="nx">_fireClick</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>
       
   514 		
       
   515 		<span class="k">var</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>
       
   516 			<span class="nx">sNodeName</span> <span class="o">=</span> <span class="nx">oTarget</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;nodeName&quot;</span><span class="o">).</span><span class="nx">toLowerCase</span><span class="o">();</span>
       
   517 
       
   518 		<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">13</span> <span class="o">&amp;&amp;</span> <span class="o">(!</span><span class="nx">clickableElements</span><span class="o">[</span><span class="nx">sNodeName</span><span class="o">]</span> <span class="o">||</span> 
       
   519 				<span class="o">(</span><span class="nx">sNodeName</span> <span class="o">===</span> <span class="s2">&quot;a&quot;</span> <span class="o">&amp;&amp;</span> <span class="o">!</span><span class="nx">oTarget</span><span class="o">.</span><span class="nx">getAttribute</span><span class="o">(</span><span class="s2">&quot;href&quot;</span><span class="o">))))</span> <span class="o">{</span>
       
   520 
       
   521 			<span class="nx">Y</span><span class="o">.</span><span class="nx">log</span><span class="o">((</span><span class="s2">&quot;Firing click event for node:&quot;</span> <span class="o">+</span> <span class="nx">oTarget</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;id&quot;</span><span class="o">)),</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="s2">&quot;nodeFocusManager&quot;</span><span class="o">);</span>
       
   522 
       
   523 			<span class="nx">oTarget</span><span class="o">.</span><span class="nx">simulate</span><span class="o">(</span><span class="s2">&quot;click&quot;</span><span class="o">);</span>
       
   524 			
       
   525 		<span class="o">}</span>
       
   526 		
       
   527 	<span class="o">},</span>
       
   528 
       
   529 
       
   530 	<span class="c">/**</span>
       
   531 <span class="c">	* @method _attachKeyHandler</span>
       
   532 <span class="c">	* @description Attaches the &quot;key&quot; event handlers used to support the &quot;keys&quot;</span>
       
   533 <span class="c">	* attribute.</span>
       
   534 <span class="c">	* @protected</span>
       
   535 <span class="c">	*/</span>
       
   536 	<span class="nx">_attachKeyHandler</span><span class="o">:</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
       
   537 
       
   538 		<span class="k">this</span><span class="o">.</span><span class="nx">_detachKeyHandler</span><span class="o">();</span>
       
   539 
       
   540 		<span class="k">var</span> <span class="nx">sNextKey</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="s2">&quot;keys.next&quot;</span><span class="o">),</span>
       
   541 			<span class="nx">sPrevKey</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="s2">&quot;keys.previous&quot;</span><span class="o">),</span>
       
   542 			<span class="nx">oNode</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>
       
   543 			<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>
       
   544 
       
   545 		<span class="k">if</span> <span class="o">(</span><span class="nx">sPrevKey</span><span class="o">)</span> <span class="o">{</span>
       
   546  			<span class="k">this</span><span class="o">.</span><span class="nx">_prevKeyHandler</span> <span class="o">=</span> 
       
   547 				<span class="nx">Y</span><span class="o">.</span><span class="nx">on</span><span class="o">(</span><span class="nx">KEY</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">this</span><span class="o">.</span><span class="nx">_focusPrevious</span><span class="o">,</span> <span class="k">this</span><span class="o">),</span> <span class="nx">oNode</span><span class="o">,</span> <span class="nx">sPrevKey</span><span class="o">);</span>
       
   548 		<span class="o">}</span>
       
   549 
       
   550 		<span class="k">if</span> <span class="o">(</span><span class="nx">sNextKey</span><span class="o">)</span> <span class="o">{</span>
       
   551  			<span class="k">this</span><span class="o">.</span><span class="nx">_nextKeyHandler</span> <span class="o">=</span> 
       
   552 				<span class="nx">Y</span><span class="o">.</span><span class="nx">on</span><span class="o">(</span><span class="nx">KEY</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">this</span><span class="o">.</span><span class="nx">_focusNext</span><span class="o">,</span> <span class="k">this</span><span class="o">),</span> <span class="nx">oNode</span><span class="o">,</span> <span class="nx">sNextKey</span><span class="o">);</span>
       
   553 		<span class="o">}</span>
       
   554 
       
   555 
       
   556 		<span class="c">//	In Opera it is necessary to call the &quot;preventDefault&quot; method in  </span>
       
   557 <span class="c"></span>		<span class="c">//	response to the user pressing the arrow keys in order to prevent </span>
       
   558 <span class="c"></span>		<span class="c">//	the viewport from scrolling when the user is moving focus among </span>
       
   559 <span class="c"></span>		<span class="c">//	the focusable descendants.</span>
       
   560 <span class="c"></span>		
       
   561 		<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>	
       
   562 			<span class="nx">aHandlers</span><span class="o">.</span><span class="nx">push</span><span class="o">(</span><span class="nx">oNode</span><span class="o">.</span><span class="nx">on</span><span class="o">(</span><span class="s2">&quot;keypress&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_preventScroll</span><span class="o">,</span> <span class="k">this</span><span class="o">));</span>
       
   563 		<span class="o">}</span>
       
   564 
       
   565 
       
   566 		<span class="c">//	For all browsers except Opera: HTML elements that are not natively</span>
       
   567 <span class="c"></span>		<span class="c">//	focusable but made focusable via the tabIndex attribute don&#39;t </span>
       
   568 <span class="c"></span>		<span class="c">//	fire a click event when the user presses the enter key.  It is </span>
       
   569 <span class="c"></span>		<span class="c">//	possible to work around this problem by simplying dispatching a </span>
       
   570 <span class="c"></span>		<span class="c">//	click event in response to the user pressing the enter key.</span>
       
   571 <span class="c"></span>
       
   572 		<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>
       
   573 			<span class="nx">aHandlers</span><span class="o">.</span><span class="nx">push</span><span class="o">(</span><span class="nx">oNode</span><span class="o">.</span><span class="nx">on</span><span class="o">(</span><span class="s2">&quot;keypress&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_fireClick</span><span class="o">,</span> <span class="k">this</span><span class="o">));</span>
       
   574 		<span class="o">}</span>
       
   575 
       
   576 	<span class="o">},</span>
       
   577 
       
   578 
       
   579 	<span class="c">/**</span>
       
   580 <span class="c">	* @method _detachEventHandlers</span>
       
   581 <span class="c">	* @description Detaches all event handlers used by the Focus Manager.</span>
       
   582 <span class="c">	* @protected</span>
       
   583 <span class="c">	*/</span>
       
   584 	<span class="nx">_detachEventHandlers</span><span class="o">:</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
       
   585 
       
   586 		<span class="k">this</span><span class="o">.</span><span class="nx">_detachKeyHandler</span><span class="o">();</span>
       
   587 
       
   588 		<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>
       
   589 
       
   590 		<span class="k">if</span> <span class="o">(</span><span class="nx">aHandlers</span><span class="o">)</span> <span class="o">{</span>
       
   591 
       
   592 			<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>
       
   593 				<span class="nx">handle</span><span class="o">.</span><span class="nx">detach</span><span class="o">();</span>
       
   594 			<span class="o">});</span>
       
   595 
       
   596 			<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>
       
   597 
       
   598 		<span class="o">}</span>
       
   599 		
       
   600 	<span class="o">},</span>
       
   601 
       
   602 
       
   603 	<span class="c">/**</span>
       
   604 <span class="c">	* @method _detachEventHandlers</span>
       
   605 <span class="c">	* @description Attaches all event handlers used by the Focus Manager.</span>
       
   606 <span class="c">	* @protected	</span>
       
   607 <span class="c">	*/</span>
       
   608 	<span class="nx">_attachEventHandlers</span><span class="o">:</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
       
   609 
       
   610 		<span class="k">var</span> <span class="nx">descendants</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_descendants</span><span class="o">,</span>
       
   611 			<span class="nx">aHandlers</span><span class="o">,</span>
       
   612 			<span class="nx">oDocument</span><span class="o">,</span>
       
   613 			<span class="nx">handle</span><span class="o">;</span>
       
   614 
       
   615 		<span class="k">if</span> <span class="o">(</span><span class="nx">descendants</span> <span class="o">&amp;&amp;</span> <span class="nx">descendants</span><span class="o">.</span><span class="nx">size</span><span class="o">()</span> <span class="o">&gt;</span> <span class="m">1</span><span class="o">)</span> <span class="o">{</span>
       
   616 
       
   617 			<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="o">[];</span>
       
   618 			<span class="nx">oDocument</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">get</span><span class="o">(</span><span class="s2">&quot;ownerDocument&quot;</span><span class="o">);</span>
       
   619 
       
   620 
       
   621 			<span class="k">if</span> <span class="o">(</span><span class="nx">aHandlers</span><span class="o">.</span><span class="nx">length</span> <span class="o">===</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
       
   622 
       
   623 		        <span class="nx">Y</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Attaching base set of event handlers.&quot;</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="s2">&quot;nodeFocusManager&quot;</span><span class="o">);</span>
       
   624 
       
   625 				<span class="nx">aHandlers</span><span class="o">.</span><span class="nx">push</span><span class="o">(</span><span class="nx">oDocument</span><span class="o">.</span><span class="nx">on</span><span class="o">(</span><span class="s2">&quot;focus&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_onDocFocus</span><span class="o">,</span> <span class="k">this</span><span class="o">));</span>
       
   626 
       
   627 				<span class="nx">aHandlers</span><span class="o">.</span><span class="nx">push</span><span class="o">(</span><span class="nx">oDocument</span><span class="o">.</span><span class="nx">on</span><span class="o">(</span><span class="s2">&quot;mousedown&quot;</span><span class="o">,</span> 
       
   628 					<span class="k">this</span><span class="o">.</span><span class="nx">_onDocMouseDown</span><span class="o">,</span> <span class="k">this</span><span class="o">));</span>
       
   629 
       
   630 				<span class="nx">aHandlers</span><span class="o">.</span><span class="nx">push</span><span class="o">(</span>
       
   631 						<span class="k">this</span><span class="o">.</span><span class="nx">after</span><span class="o">(</span><span class="s2">&quot;keysChange&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_attachKeyHandler</span><span class="o">));</span>
       
   632 
       
   633 				<span class="nx">aHandlers</span><span class="o">.</span><span class="nx">push</span><span class="o">(</span>
       
   634 						<span class="k">this</span><span class="o">.</span><span class="nx">after</span><span class="o">(</span><span class="s2">&quot;descendantsChange&quot;</span><span class="o">,</span> <span class="k">this</span><span class="o">.</span><span class="nx">_initDescendants</span><span class="o">));</span>
       
   635 
       
   636 				<span class="nx">aHandlers</span><span class="o">.</span><span class="nx">push</span><span class="o">(</span>
       
   637 						<span class="k">this</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> 
       
   638 								<span class="k">this</span><span class="o">.</span><span class="nx">_afterActiveDescendantChange</span><span class="o">));</span>
       
   639 
       
   640 
       
   641 				<span class="c">//	For performance: defer attaching all key-related event </span>
       
   642 <span class="c"></span>				<span class="c">//	handlers until the first time one of the specified </span>
       
   643 <span class="c"></span>				<span class="c">//	descendants receives focus.</span>
       
   644 <span class="c"></span>
       
   645 				<span class="nx">handle</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">after</span><span class="o">(</span><span class="s2">&quot;focusedChange&quot;</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">event</span><span class="o">)</span> <span class="o">{</span>
       
   646 					
       
   647 					<span class="k">if</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="o">{</span>
       
   648 						
       
   649 				        <span class="nx">Y</span><span class="o">.</span><span class="nx">log</span><span class="o">(</span><span class="s2">&quot;Attaching key event handlers.&quot;</span><span class="o">,</span> <span class="s2">&quot;info&quot;</span><span class="o">,</span> <span class="s2">&quot;nodeFocusManager&quot;</span><span class="o">);</span>
       
   650 						
       
   651 						<span class="k">this</span><span class="o">.</span><span class="nx">_attachKeyHandler</span><span class="o">();</span>
       
   652 
       
   653 						<span class="c">//	Detach this &quot;focusedChange&quot; handler so that the </span>
       
   654 <span class="c"></span>						<span class="c">//	key-related handlers only get attached once.</span>
       
   655 <span class="c"></span>
       
   656 						<span class="nx">handle</span><span class="o">.</span><span class="nx">detach</span><span class="o">();</span>
       
   657 
       
   658 					<span class="o">}</span>
       
   659 					
       
   660 				<span class="o">},</span> <span class="k">this</span><span class="o">));</span>
       
   661 				
       
   662 				<span class="nx">aHandlers</span><span class="o">.</span><span class="nx">push</span><span class="o">(</span><span class="nx">handle</span><span class="o">);</span>
       
   663 				
       
   664 			<span class="o">}</span>
       
   665 
       
   666 
       
   667 			<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>
       
   668 			
       
   669 		<span class="o">}</span>
       
   670 		
       
   671 	<span class="o">},</span>	
       
   672 	
       
   673 	
       
   674 	<span class="c">//	Protected event handlers</span>
       
   675 <span class="c"></span>
       
   676 	<span class="c">/**</span>
       
   677 <span class="c">	* @method _onDocMouseDown</span>
       
   678 <span class="c">	* @description &quot;mousedown&quot; event handler for the owner document of the </span>
       
   679 <span class="c">	* Focus Manager&#39;s Node.</span>
       
   680 <span class="c">	* @protected</span>
       
   681 <span class="c">	* @param event {Object} Object representing the DOM event.</span>
       
   682 <span class="c">	*/</span>
       
   683 	<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>
       
   684 	
       
   685 		<span class="k">var</span> <span class="nx">oHost</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>
       
   686 			<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>
       
   687 			<span class="nx">bChildNode</span> <span class="o">=</span> <span class="nx">oHost</span><span class="o">.</span><span class="nx">contains</span><span class="o">(</span><span class="nx">oTarget</span><span class="o">),</span>
       
   688 			<span class="nx">node</span><span class="o">,</span>
       
   689 
       
   690 			<span class="nx">getFocusable</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>
       
   691 
       
   692 				<span class="k">var</span> <span class="nx">returnVal</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>
       
   693 
       
   694 				<span class="k">if</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">oHost</span><span class="o">))</span> <span class="o">{</span>
       
   695 					<span class="nx">returnVal</span> <span class="o">=</span> <span class="nx">Lang</span><span class="o">.</span><span class="nx">isNumber</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">TAB_INDEX</span><span class="o">))</span> <span class="o">?</span> <span class="nx">node</span> <span class="o">:</span> 
       
   696 									<span class="nx">getFocusable</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">&quot;parentNode&quot;</span><span class="o">));</span>
       
   697 				<span class="o">}</span>
       
   698 		
       
   699 				<span class="k">return</span> <span class="nx">returnVal</span><span class="o">;</span>
       
   700 
       
   701 			<span class="o">};</span>
       
   702 		
       
   703 
       
   704 		<span class="k">if</span> <span class="o">(</span><span class="nx">bChildNode</span><span class="o">)</span> <span class="o">{</span>
       
   705 
       
   706 			<span class="c">//	Check to make sure that the target isn&#39;t a child node of one </span>
       
   707 <span class="c"></span>			<span class="c">//	of the focusable descendants.</span>
       
   708 <span class="c"></span>
       
   709 			<span class="nx">node</span> <span class="o">=</span> <span class="nx">getFocusable</span><span class="o">(</span><span class="nx">oTarget</span><span class="o">);</span>
       
   710 
       
   711 			<span class="k">if</span> <span class="o">(</span><span class="nx">node</span><span class="o">)</span> <span class="o">{</span>
       
   712 				<span class="nx">oTarget</span> <span class="o">=</span> <span class="nx">node</span><span class="o">;</span>
       
   713 			<span class="o">}</span>
       
   714 			<span class="k">else</span> <span class="k">if</span> <span class="o">(!</span><span class="nx">node</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">FOCUSED</span><span class="o">))</span> <span class="o">{</span>
       
   715 
       
   716 				<span class="c">//	The target was a non-focusable descendant of the root </span>
       
   717 <span class="c"></span>				<span class="c">//	node, so the &quot;focused&quot; attribute should be set to false.</span>
       
   718 <span class="c"></span>
       
   719 	 			<span class="k">this</span><span class="o">.</span><span class="nx">_set</span><span class="o">(</span><span class="nx">FOCUSED</span><span class="o">,</span> <span class="kc">false</span><span class="o">);</span>
       
   720 	 			<span class="k">this</span><span class="o">.</span><span class="nx">_onDocFocus</span><span class="o">(</span><span class="nx">event</span><span class="o">);</span>
       
   721 								
       
   722 			<span class="o">}</span>
       
   723 
       
   724 		<span class="o">}</span>
       
   725 		
       
   726 
       
   727 		<span class="k">if</span> <span class="o">(</span><span class="nx">bChildNode</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">_isDescendant</span><span class="o">(</span><span class="nx">oTarget</span><span class="o">))</span> <span class="o">{</span>
       
   728 
       
   729 			<span class="c">//	Fix general problem in Webkit: mousing down on a button or an </span>
       
   730 <span class="c"></span>			<span class="c">//	anchor element doesn&#39;t focus it.</span>
       
   731 <span class="c"></span>
       
   732 			<span class="c">//	For all browsers: makes sure that the descendant that </span>
       
   733 <span class="c"></span>			<span class="c">//	was the target of the mousedown event is now considered the</span>
       
   734 <span class="c"></span>			<span class="c">//	active descendant.</span>
       
   735 <span class="c"></span>
       
   736 			<span class="k">this</span><span class="o">.</span><span class="nx">focus</span><span class="o">(</span><span class="nx">oTarget</span><span class="o">);</span>
       
   737 		<span class="o">}</span>
       
   738 		<span class="k">else</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">&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">FOCUSED</span><span class="o">)</span> <span class="o">&amp;&amp;</span> 
       
   739 			<span class="o">(!</span><span class="nx">bChildNode</span> <span class="o">||</span> <span class="o">(</span><span class="nx">bChildNode</span> <span class="o">&amp;&amp;</span> <span class="o">!</span><span class="k">this</span><span class="o">.</span><span class="nx">_isDescendant</span><span class="o">(</span><span class="nx">oTarget</span><span class="o">))))</span> <span class="o">{</span>
       
   740 
       
   741 			<span class="c">//	Fix for Webkit:</span>
       
   742 <span class="c"></span>			<span class="c">//	Document doesn&#39;t receive focus in Webkit when the user mouses </span>
       
   743 <span class="c"></span>			<span class="c">//	down on it, so the &quot;focused&quot; attribute won&#39;t get set to the </span>
       
   744 <span class="c"></span>			<span class="c">//	correct value.</span>
       
   745 <span class="c"></span>
       
   746  			<span class="k">this</span><span class="o">.</span><span class="nx">_set</span><span class="o">(</span><span class="nx">FOCUSED</span><span class="o">,</span> <span class="kc">false</span><span class="o">);</span>
       
   747  			<span class="k">this</span><span class="o">.</span><span class="nx">_onDocFocus</span><span class="o">(</span><span class="nx">event</span><span class="o">);</span>
       
   748 
       
   749 		<span class="o">}</span>
       
   750 	
       
   751 	<span class="o">},</span>
       
   752 
       
   753 
       
   754 	<span class="c">/**</span>
       
   755 <span class="c">	* @method _onDocFocus</span>
       
   756 <span class="c">	* @description &quot;focus&quot; event handler for the owner document of the </span>
       
   757 <span class="c">	* Focus Manager&#39;s Node.</span>
       
   758 <span class="c">	* @protected</span>
       
   759 <span class="c">	* @param event {Object} Object representing the DOM event.</span>
       
   760 <span class="c">	*/</span>
       
   761 	<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>
       
   762 
       
   763 		<span class="k">var</span> <span class="nx">oTarget</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_focusTarget</span> <span class="o">||</span> <span class="nx">event</span><span class="o">.</span><span class="nx">target</span><span class="o">,</span>
       
   764 			<span class="nx">bFocused</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">FOCUSED</span><span class="o">),</span>
       
   765 			<span class="nx">focusClass</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">FOCUS_CLASS</span><span class="o">),</span>
       
   766 			<span class="nx">oFocusedNode</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_focusedNode</span><span class="o">,</span>
       
   767 			<span class="nx">bInCollection</span><span class="o">;</span>
       
   768 
       
   769 		<span class="k">if</span> <span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_focusTarget</span><span class="o">)</span> <span class="o">{</span>
       
   770 			<span class="k">this</span><span class="o">.</span><span class="nx">_focusTarget</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
       
   771 		<span class="o">}</span>
       
   772 
       
   773 
       
   774 		<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">HOST</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>	
       
   775 
       
   776 			<span class="c">//	The target is a descendant of the root Node.</span>
       
   777 <span class="c"></span>
       
   778 			<span class="nx">bInCollection</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_isDescendant</span><span class="o">(</span><span class="nx">oTarget</span><span class="o">);</span>
       
   779 
       
   780 			<span class="k">if</span> <span class="o">(!</span><span class="nx">bFocused</span> <span class="o">&amp;&amp;</span> <span class="nx">bInCollection</span><span class="o">)</span> <span class="o">{</span>
       
   781 
       
   782 				<span class="c">//	The user has focused a focusable descendant.</span>
       
   783 <span class="c"></span>
       
   784 				<span class="nx">bFocused</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
       
   785 
       
   786 			<span class="o">}</span>
       
   787 			<span class="k">else</span> <span class="k">if</span> <span class="o">(</span><span class="nx">bFocused</span> <span class="o">&amp;&amp;</span> <span class="o">!</span><span class="nx">bInCollection</span><span class="o">)</span> <span class="o">{</span>  
       
   788 			
       
   789 				<span class="c">//	The user has focused a child of the root Node that is </span>
       
   790 <span class="c"></span>				<span class="c">//	not one of the descendants managed by this Focus Manager</span>
       
   791 <span class="c"></span>				<span class="c">//	so clear the currently focused descendant.</span>
       
   792 <span class="c"></span>				
       
   793 				<span class="nx">bFocused</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>
       
   794 			
       
   795 			<span class="o">}</span>
       
   796 			
       
   797 		<span class="o">}</span>
       
   798 		<span class="k">else</span> <span class="o">{</span> 
       
   799 		
       
   800 			<span class="c">// The target is some other node in the document.</span>
       
   801 <span class="c"></span>
       
   802 			<span class="nx">bFocused</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>
       
   803 			
       
   804 		<span class="o">}</span>
       
   805 
       
   806 
       
   807 		<span class="k">if</span> <span class="o">(</span><span class="nx">focusClass</span><span class="o">)</span> <span class="o">{</span>
       
   808 
       
   809 			<span class="k">if</span> <span class="o">(</span><span class="nx">oFocusedNode</span> <span class="o">&amp;&amp;</span> <span class="o">(</span><span class="nx">oFocusedNode</span> <span class="o">!==</span> <span class="nx">oTarget</span> <span class="o">||</span> <span class="o">!</span><span class="nx">bFocused</span><span class="o">))</span> <span class="o">{</span>
       
   810 				<span class="k">this</span><span class="o">.</span><span class="nx">_removeFocusClass</span><span class="o">();</span>
       
   811 			<span class="o">}</span>
       
   812 
       
   813 			<span class="k">if</span> <span class="o">(</span><span class="nx">bInCollection</span> <span class="o">&amp;&amp;</span> <span class="nx">bFocused</span><span class="o">)</span> <span class="o">{</span>
       
   814 
       
   815 				<span class="k">if</span> <span class="o">(</span><span class="nx">focusClass</span><span class="o">.</span><span class="nx">fn</span><span class="o">)</span> <span class="o">{</span>
       
   816 					<span class="nx">oTarget</span> <span class="o">=</span> <span class="nx">focusClass</span><span class="o">.</span><span class="nx">fn</span><span class="o">(</span><span class="nx">oTarget</span><span class="o">);</span>
       
   817 					<span class="nx">oTarget</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">focusClass</span><span class="o">.</span><span class="nx">className</span><span class="o">);</span>
       
   818 				<span class="o">}</span>
       
   819 				<span class="k">else</span> <span class="o">{</span>
       
   820 					<span class="nx">oTarget</span><span class="o">.</span><span class="nx">addClass</span><span class="o">(</span><span class="nx">focusClass</span><span class="o">);</span>
       
   821 				<span class="o">}</span>
       
   822 
       
   823 				<span class="k">this</span><span class="o">.</span><span class="nx">_focusedNode</span> <span class="o">=</span> <span class="nx">oTarget</span><span class="o">;</span>
       
   824 
       
   825 			<span class="o">}</span>
       
   826 			
       
   827 		<span class="o">}</span>
       
   828 
       
   829 
       
   830 		<span class="k">this</span><span class="o">.</span><span class="nx">_set</span><span class="o">(</span><span class="nx">FOCUSED</span><span class="o">,</span> <span class="nx">bFocused</span><span class="o">);</span>			
       
   831 
       
   832 	<span class="o">},</span>
       
   833 
       
   834 
       
   835 	<span class="c">/**</span>
       
   836 <span class="c">	* @method _focusNext</span>
       
   837 <span class="c">	* @description Keydown event handler that moves focus to the next </span>
       
   838 <span class="c">	* enabled descendant.</span>
       
   839 <span class="c">	* @protected</span>
       
   840 <span class="c">	* @param event {Object} Object representing the DOM event.</span>
       
   841 <span class="c">	* @param activeDescendant {Number} Number representing the index of the </span>
       
   842 <span class="c">	* next descendant to be focused</span>
       
   843 <span class="c">	*/</span>
       
   844 	<span class="nx">_focusNext</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">activeDescendant</span><span class="o">)</span> <span class="o">{</span>
       
   845 
       
   846 		<span class="k">var</span> <span class="nx">nActiveDescendant</span> <span class="o">=</span> <span class="nx">activeDescendant</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">ACTIVE_DESCENDANT</span><span class="o">),</span>
       
   847 			<span class="nx">oNode</span><span class="o">;</span>
       
   848 
       
   849 
       
   850 		<span class="k">if</span> <span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_isDescendant</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="o">&amp;&amp;</span> 
       
   851 			<span class="o">(</span><span class="nx">nActiveDescendant</span> <span class="o">&lt;=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_lastNodeIndex</span><span class="o">))</span> <span class="o">{</span>
       
   852 
       
   853 			<span class="nx">nActiveDescendant</span> <span class="o">=</span> <span class="nx">nActiveDescendant</span> <span class="o">+</span> <span class="m">1</span><span class="o">;</span>
       
   854 
       
   855 			<span class="k">if</span> <span class="o">(</span><span class="nx">nActiveDescendant</span> <span class="o">===</span> <span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_lastNodeIndex</span> <span class="o">+</span> <span class="m">1</span><span class="o">)</span> <span class="o">&amp;&amp;</span> 
       
   856 				<span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">CIRCULAR</span><span class="o">))</span> <span class="o">{</span>
       
   857 
       
   858 				<span class="nx">nActiveDescendant</span> <span class="o">=</span> <span class="m">0</span><span class="o">;</span>
       
   859 
       
   860 			<span class="o">}</span>
       
   861 
       
   862 			<span class="nx">oNode</span> <span class="o">=</span> <span class="k">this</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">nActiveDescendant</span><span class="o">);</span>
       
   863 			
       
   864 			<span class="k">if</span> <span class="o">(</span><span class="nx">oNode</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">DISABLED</span><span class="o">))</span> <span class="o">{</span>
       
   865 				<span class="k">this</span><span class="o">.</span><span class="nx">_focusNext</span><span class="o">(</span><span class="nx">event</span><span class="o">,</span> <span class="nx">nActiveDescendant</span><span class="o">);</span>
       
   866 			<span class="o">}</span>
       
   867 			<span class="k">else</span> <span class="o">{</span>
       
   868 				<span class="k">this</span><span class="o">.</span><span class="nx">focus</span><span class="o">(</span><span class="nx">nActiveDescendant</span><span class="o">);</span>
       
   869 			<span class="o">}</span>
       
   870 
       
   871 		<span class="o">}</span>
       
   872 		
       
   873 		<span class="k">this</span><span class="o">.</span><span class="nx">_preventScroll</span><span class="o">(</span><span class="nx">event</span><span class="o">);</span>
       
   874 
       
   875 	<span class="o">},</span>
       
   876 
       
   877 
       
   878 	<span class="c">/**</span>
       
   879 <span class="c">	* @method _focusPrevious</span>
       
   880 <span class="c">	* @description Keydown event handler that moves focus to the previous </span>
       
   881 <span class="c">	* enabled descendant.</span>
       
   882 <span class="c">	* @protected</span>
       
   883 <span class="c">	* @param event {Object} Object representing the DOM event.</span>
       
   884 <span class="c">	* @param activeDescendant {Number} Number representing the index of the </span>
       
   885 <span class="c">	* next descendant to be focused.</span>
       
   886 <span class="c">	*/</span>
       
   887 	<span class="nx">_focusPrevious</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">activeDescendant</span><span class="o">)</span> <span class="o">{</span>
       
   888 	
       
   889 		<span class="k">var</span> <span class="nx">nActiveDescendant</span> <span class="o">=</span> <span class="nx">activeDescendant</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">ACTIVE_DESCENDANT</span><span class="o">),</span>
       
   890 			<span class="nx">oNode</span><span class="o">;</span>
       
   891 	
       
   892 		<span class="k">if</span> <span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_isDescendant</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="o">&amp;&amp;</span> <span class="nx">nActiveDescendant</span> <span class="o">&gt;=</span> <span class="m">0</span><span class="o">)</span> <span class="o">{</span>
       
   893 
       
   894 			<span class="nx">nActiveDescendant</span> <span class="o">=</span> <span class="nx">nActiveDescendant</span> <span class="o">-</span> <span class="m">1</span><span class="o">;</span>
       
   895 
       
   896 			<span class="k">if</span> <span class="o">(</span><span class="nx">nActiveDescendant</span> <span class="o">===</span> <span class="o">-</span><span class="m">1</span> <span class="o">&amp;&amp;</span> <span class="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">CIRCULAR</span><span class="o">))</span> <span class="o">{</span>
       
   897 				<span class="nx">nActiveDescendant</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="nx">_lastNodeIndex</span><span class="o">;</span>
       
   898 			<span class="o">}</span>
       
   899 
       
   900 			<span class="nx">oNode</span> <span class="o">=</span> <span class="k">this</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">nActiveDescendant</span><span class="o">);</span>
       
   901 
       
   902 			<span class="k">if</span> <span class="o">(</span><span class="nx">oNode</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">DISABLED</span><span class="o">))</span> <span class="o">{</span>
       
   903 				<span class="k">this</span><span class="o">.</span><span class="nx">_focusPrevious</span><span class="o">(</span><span class="nx">event</span><span class="o">,</span> <span class="nx">nActiveDescendant</span><span class="o">);</span>
       
   904 			<span class="o">}</span>
       
   905 			<span class="k">else</span> <span class="o">{</span>
       
   906 				<span class="k">this</span><span class="o">.</span><span class="nx">focus</span><span class="o">(</span><span class="nx">nActiveDescendant</span><span class="o">);</span>				
       
   907 			<span class="o">}</span>
       
   908 
       
   909 		<span class="o">}</span>
       
   910 		
       
   911 		<span class="k">this</span><span class="o">.</span><span class="nx">_preventScroll</span><span class="o">(</span><span class="nx">event</span><span class="o">);</span>			
       
   912 	
       
   913 	<span class="o">},</span>
       
   914 
       
   915 
       
   916 	<span class="c">/**</span>
       
   917 <span class="c">	* @method _afterActiveDescendantChange</span>
       
   918 <span class="c">	* @description afterChange event handler for the </span>
       
   919 <span class="c">	* &quot;activeDescendant&quot; attribute.</span>
       
   920 <span class="c">	* @protected</span>
       
   921 <span class="c">	* @param event {Object} Object representing the change event.</span>
       
   922 <span class="c">	*/</span>	
       
   923 	<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="o">{</span>
       
   924 
       
   925 		<span class="k">var</span> <span class="nx">oNode</span> <span class="o">=</span> <span class="k">this</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">prevVal</span><span class="o">);</span>
       
   926 		
       
   927 		<span class="k">if</span> <span class="o">(</span><span class="nx">oNode</span><span class="o">)</span> <span class="o">{</span>
       
   928 			<span class="nx">oNode</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="nx">TAB_INDEX</span><span class="o">,</span> <span class="o">-</span><span class="m">1</span><span class="o">);</span>
       
   929 		<span class="o">}</span>
       
   930 
       
   931 		<span class="nx">oNode</span> <span class="o">=</span> <span class="k">this</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>
       
   932 
       
   933 		<span class="k">if</span> <span class="o">(</span><span class="nx">oNode</span><span class="o">)</span> <span class="o">{</span>
       
   934 			<span class="nx">oNode</span><span class="o">.</span><span class="nx">set</span><span class="o">(</span><span class="nx">TAB_INDEX</span><span class="o">,</span> <span class="m">0</span><span class="o">);</span>
       
   935 		<span class="o">}</span>
       
   936 		
       
   937 	<span class="o">},</span>
       
   938 
       
   939 
       
   940 
       
   941 	<span class="c">//	Public methods</span>
       
   942 <span class="c"></span>
       
   943     <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>
       
   944 
       
   945 		<span class="k">this</span><span class="o">.</span><span class="nx">start</span><span class="o">();</span>
       
   946 
       
   947     <span class="o">},</span>
       
   948 
       
   949 	<span class="nx">destructor</span><span class="o">:</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
       
   950 		
       
   951 		<span class="k">this</span><span class="o">.</span><span class="nx">stop</span><span class="o">();</span>
       
   952 		<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">focusManager</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
       
   953 		
       
   954     <span class="o">},</span>
       
   955 
       
   956 
       
   957 	<span class="c">/**</span>
       
   958 <span class="c">	* @method focus</span>
       
   959 <span class="c">	* @description Focuses the active descendant and sets the  </span>
       
   960 <span class="c">	* &lt;code&gt;focused&lt;/code&gt; attribute to true.</span>
       
   961 <span class="c">	* @param index {Number} Optional. Number representing the index of the </span>
       
   962 <span class="c">	* descendant to be set as the active descendant.</span>
       
   963 <span class="c">	* @param index {Node} Optional. Node instance representing the </span>
       
   964 <span class="c">	* descendant to be set as the active descendant.</span>
       
   965 <span class="c">	*/</span>
       
   966 	<span class="nx">focus</span><span class="o">:</span> <span class="k">function</span> <span class="o">(</span><span class="nx">index</span><span class="o">)</span> <span class="o">{</span>
       
   967 
       
   968 		<span class="k">if</span> <span class="o">(</span><span class="nx">Lang</span><span class="o">.</span><span class="nx">isUndefined</span><span class="o">(</span><span class="nx">index</span><span class="o">))</span> <span class="o">{</span>
       
   969 			<span class="nx">index</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">ACTIVE_DESCENDANT</span><span class="o">);</span>
       
   970 		<span class="o">}</span>
       
   971 
       
   972 		<span class="k">this</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">index</span><span class="o">,</span> <span class="o">{</span> <span class="nx">src</span><span class="o">:</span> <span class="nx">UI</span> <span class="o">});</span>
       
   973 
       
   974 		<span class="k">var</span> <span class="nx">oNode</span> <span class="o">=</span> <span class="k">this</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="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">ACTIVE_DESCENDANT</span><span class="o">));</span>
       
   975 
       
   976 		<span class="k">if</span> <span class="o">(</span><span class="nx">oNode</span><span class="o">)</span> <span class="o">{</span>
       
   977 
       
   978 			<span class="nx">oNode</span><span class="o">.</span><span class="nx">focus</span><span class="o">();</span>
       
   979 
       
   980 			<span class="c">//	In Opera focusing a &lt;BUTTON&gt; element programmatically </span>
       
   981 <span class="c"></span>			<span class="c">//	will result in the document-level focus event handler </span>
       
   982 <span class="c"></span>			<span class="c">//	&quot;_onDocFocus&quot; being called, resulting in the handler </span>
       
   983 <span class="c"></span>			<span class="c">//	incorrectly setting the &quot;focused&quot; Attribute to false.  To fix </span>
       
   984 <span class="c"></span>			<span class="c">//	this, set a flag (&quot;_focusTarget&quot;) that the &quot;_onDocFocus&quot; method </span>
       
   985 <span class="c"></span>			<span class="c">//	can look for to properly handle this edge case.</span>
       
   986 <span class="c"></span>
       
   987 			<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">&amp;&amp;</span> <span class="nx">oNode</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="s2">&quot;nodeName&quot;</span><span class="o">).</span><span class="nx">toLowerCase</span><span class="o">()</span> <span class="o">===</span> <span class="s2">&quot;button&quot;</span><span class="o">)</span> <span class="o">{</span>
       
   988 				<span class="k">this</span><span class="o">.</span><span class="nx">_focusTarget</span> <span class="o">=</span> <span class="nx">oNode</span><span class="o">;</span>
       
   989 			<span class="o">}</span>
       
   990 
       
   991 		<span class="o">}</span>
       
   992 
       
   993 	<span class="o">},</span>
       
   994 
       
   995 
       
   996 	<span class="c">/**</span>
       
   997 <span class="c">	* @method blur</span>
       
   998 <span class="c">	* @description Blurs the current active descendant and sets the </span>
       
   999 <span class="c">	* &lt;code&gt;focused&lt;/code&gt; attribute to false.</span>
       
  1000 <span class="c">	*/</span>
       
  1001 	<span class="nx">blur</span><span class="o">:</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
       
  1002 
       
  1003 		<span class="k">var</span> <span class="nx">oNode</span><span class="o">;</span>
       
  1004 
       
  1005 		<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">FOCUSED</span><span class="o">))</span> <span class="o">{</span>
       
  1006 
       
  1007 			<span class="nx">oNode</span> <span class="o">=</span> <span class="k">this</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="k">this</span><span class="o">.</span><span class="nx">get</span><span class="o">(</span><span class="nx">ACTIVE_DESCENDANT</span><span class="o">));</span>
       
  1008 
       
  1009 			<span class="k">if</span> <span class="o">(</span><span class="nx">oNode</span><span class="o">)</span> <span class="o">{</span>
       
  1010 
       
  1011 				<span class="nx">oNode</span><span class="o">.</span><span class="nx">blur</span><span class="o">();</span>
       
  1012 
       
  1013 				<span class="c">//	For Opera and Webkit:  Blurring an element in either browser</span>
       
  1014 <span class="c"></span>				<span class="c">//	doesn&#39;t result in another element (such as the document)</span>
       
  1015 <span class="c"></span>				<span class="c">//	being focused.  Therefore, the &quot;_onDocFocus&quot; method </span>
       
  1016 <span class="c"></span>				<span class="c">//	responsible for managing the application and removal of the </span>
       
  1017 <span class="c"></span>				<span class="c">//	focus indicator class name is never called.</span>
       
  1018 <span class="c"></span>
       
  1019 				<span class="k">this</span><span class="o">.</span><span class="nx">_removeFocusClass</span><span class="o">();</span>
       
  1020 				
       
  1021 			<span class="o">}</span>
       
  1022 
       
  1023 			<span class="k">this</span><span class="o">.</span><span class="nx">_set</span><span class="o">(</span><span class="nx">FOCUSED</span><span class="o">,</span> <span class="kc">false</span><span class="o">,</span> <span class="o">{</span> <span class="nx">src</span><span class="o">:</span> <span class="nx">UI</span> <span class="o">});</span>
       
  1024 		<span class="o">}</span>
       
  1025 		
       
  1026 	<span class="o">},</span>
       
  1027 
       
  1028 
       
  1029 	<span class="c">/**</span>
       
  1030 <span class="c">	* @method start</span>
       
  1031 <span class="c">	* @description Enables the Focus Manager.</span>
       
  1032 <span class="c">	*/</span>
       
  1033 	<span class="nx">start</span><span class="o">:</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
       
  1034 
       
  1035 		<span class="k">if</span> <span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="nx">_stopped</span><span class="o">)</span> <span class="o">{</span>
       
  1036 
       
  1037 			<span class="k">this</span><span class="o">.</span><span class="nx">_initDescendants</span><span class="o">();</span>
       
  1038 			<span class="k">this</span><span class="o">.</span><span class="nx">_attachEventHandlers</span><span class="o">();</span>
       
  1039 
       
  1040 			<span class="k">this</span><span class="o">.</span><span class="nx">_stopped</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>
       
  1041 
       
  1042 		<span class="o">}</span>
       
  1043 		
       
  1044 	<span class="o">},</span>
       
  1045 
       
  1046 
       
  1047 	<span class="c">/**</span>
       
  1048 <span class="c">	* @method stop</span>
       
  1049 <span class="c">	* @description Disables the Focus Manager by detaching all event handlers.</span>
       
  1050 <span class="c">	*/</span>	
       
  1051 	<span class="nx">stop</span><span class="o">:</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
       
  1052 
       
  1053 		<span class="k">if</span> <span class="o">(!</span><span class="k">this</span><span class="o">.</span><span class="nx">_stopped</span><span class="o">)</span> <span class="o">{</span>
       
  1054 
       
  1055 			<span class="k">this</span><span class="o">.</span><span class="nx">_detachEventHandlers</span><span class="o">();</span>
       
  1056 
       
  1057 			<span class="k">this</span><span class="o">.</span><span class="nx">_descendants</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
       
  1058 			<span class="k">this</span><span class="o">.</span><span class="nx">_focusedNode</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
       
  1059 			<span class="k">this</span><span class="o">.</span><span class="nx">_lastNodeIndex</span> <span class="o">=</span> <span class="m">0</span><span class="o">;</span>
       
  1060 			<span class="k">this</span><span class="o">.</span><span class="nx">_stopped</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
       
  1061 			
       
  1062 		<span class="o">}</span>
       
  1063 
       
  1064 	<span class="o">},</span>
       
  1065 
       
  1066 
       
  1067 	<span class="c">/**</span>
       
  1068 <span class="c">	* @method refresh</span>
       
  1069 <span class="c">	* @description Refreshes the Focus Manager&#39;s descendants by re-executing the </span>
       
  1070 <span class="c">	* CSS selector query specified by the &lt;code&gt;descendants&lt;/code&gt; attribute.</span>
       
  1071 <span class="c">	*/</span>
       
  1072 	<span class="nx">refresh</span><span class="o">:</span> <span class="k">function</span> <span class="o">()</span> <span class="o">{</span>
       
  1073 
       
  1074 		<span class="k">this</span><span class="o">.</span><span class="nx">_initDescendants</span><span class="o">();</span>
       
  1075 		
       
  1076 	<span class="o">}</span>
       
  1077 	
       
  1078 <span class="o">});</span>
       
  1079 
       
  1080 
       
  1081 <span class="nx">NodeFocusManager</span><span class="o">.</span><span class="nx">NAME</span> <span class="o">=</span> <span class="s2">&quot;nodeFocusManager&quot;</span><span class="o">;</span>
       
  1082 <span class="nx">NodeFocusManager</span><span class="o">.</span><span class="nx">NS</span> <span class="o">=</span> <span class="s2">&quot;focusManager&quot;</span><span class="o">;</span>
       
  1083 
       
  1084 <span class="nx">Y</span><span class="o">.</span><span class="nx">namespace</span><span class="o">(</span><span class="s2">&quot;Plugin&quot;</span><span class="o">);</span>
       
  1085 <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="nx">NodeFocusManager</span><span class="o">;</span>
       
  1086 </pre></div>
       
  1087                     </div>
       
  1088 			</div>
       
  1089 		</div>
       
  1090 		<div class="yui-b">
       
  1091             <div class="nav">
       
  1092 
       
  1093                     <div id="moduleList" class="module">
       
  1094                         <h4>Modules</h4>
       
  1095                         <ul class="content">
       
  1096                                 <li class=""><a href="module_anim.html" title="anim">anim</a></li>
       
  1097                                 <li class=""><a href="module_attribute.html" title="attribute">attribute</a></li>
       
  1098                                 <li class=""><a href="module_base.html" title="base">base</a></li>
       
  1099                                 <li class=""><a href="module_cache.html" title="cache">cache</a></li>
       
  1100                                 <li class=""><a href="module_classnamemanager.html" title="classnamemanager">classnamemanager</a></li>
       
  1101                                 <li class=""><a href="module_collection.html" title="collection">collection</a></li>
       
  1102                                 <li class=""><a href="module_console.html" title="console">console</a></li>
       
  1103                                 <li class=""><a href="module_console-filters.html" title="console-filters">console-filters</a></li>
       
  1104                                 <li class=""><a href="module_cookie.html" title="cookie">cookie</a></li>
       
  1105                                 <li class=""><a href="module_dataschema.html" title="dataschema">dataschema</a></li>
       
  1106                                 <li class=""><a href="module_datasource.html" title="datasource">datasource</a></li>
       
  1107                                 <li class=""><a href="module_datatype.html" title="datatype">datatype</a></li>
       
  1108                                 <li class=""><a href="module_dd.html" title="dd">dd</a></li>
       
  1109                                 <li class=""><a href="module_dom.html" title="dom">dom</a></li>
       
  1110                                 <li class=""><a href="module_dump.html" title="dump">dump</a></li>
       
  1111                                 <li class=""><a href="module_event.html" title="event">event</a></li>
       
  1112                                 <li class=""><a href="module_event-custom.html" title="event-custom">event-custom</a></li>
       
  1113                                 <li class=""><a href="module_event-simulate.html" title="event-simulate">event-simulate</a></li>
       
  1114                                 <li class=""><a href="module_history.html" title="history">history</a></li>
       
  1115                                 <li class=""><a href="module_imageloader.html" title="imageloader">imageloader</a></li>
       
  1116                                 <li class=""><a href="module_io.html" title="io">io</a></li>
       
  1117                                 <li class=""><a href="module_json.html" title="json">json</a></li>
       
  1118                                 <li class=""><a href="module_node.html" title="node">node</a></li>
       
  1119                                 <li class="selected"><a href="module_node-focusmanager.html" title="node-focusmanager">node-focusmanager</a></li>
       
  1120                                 <li class=""><a href="module_node-menunav.html" title="node-menunav">node-menunav</a></li>
       
  1121                                 <li class=""><a href="module_oop.html" title="oop">oop</a></li>
       
  1122                                 <li class=""><a href="module_overlay.html" title="overlay">overlay</a></li>
       
  1123                                 <li class=""><a href="module_plugin.html" title="plugin">plugin</a></li>
       
  1124                                 <li class=""><a href="module_profiler.html" title="profiler">profiler</a></li>
       
  1125                                 <li class=""><a href="module_queue.html" title="queue">queue</a></li>
       
  1126                                 <li class=""><a href="module_slider.html" title="slider">slider</a></li>
       
  1127                                 <li class=""><a href="module_stylesheet.html" title="stylesheet">stylesheet</a></li>
       
  1128                                 <li class=""><a href="module_substitute.html" title="substitute">substitute</a></li>
       
  1129                                 <li class=""><a href="module_test.html" title="test">test</a></li>
       
  1130                                 <li class=""><a href="module_widget.html" title="widget">widget</a></li>
       
  1131                                 <li class=""><a href="module_widget-position.html" title="widget-position">widget-position</a></li>
       
  1132                                 <li class=""><a href="module_widget-position-ext.html" title="widget-position-ext">widget-position-ext</a></li>
       
  1133                                 <li class=""><a href="module_widget-stack.html" title="widget-stack">widget-stack</a></li>
       
  1134                                 <li class=""><a href="module_widget-stdmod.html" title="widget-stdmod">widget-stdmod</a></li>
       
  1135                                 <li class=""><a href="module_yui.html" title="yui">yui</a></li>
       
  1136                         </ul>
       
  1137                     </div>
       
  1138 
       
  1139                     <div id="classList" class="module">
       
  1140                         <h4>Classes</h4>
       
  1141                         <ul class="content">
       
  1142                                 <li class=""><a href="plugin.NodeFocusManager.html" title="plugin.NodeFocusManager">plugin.NodeFocusManager</a></li>
       
  1143                         </ul>
       
  1144                     </div>
       
  1145 
       
  1146                     <div id="fileList" class="module">
       
  1147                         <h4>Files</h4>
       
  1148                         <ul class="content">        
       
  1149                                 <li class="selected"><a href="node-focusmanager.js.html" title="node-focusmanager.js">node-focusmanager.js</a></li>
       
  1150                         </ul>
       
  1151                     </div>
       
  1152 
       
  1153 
       
  1154 
       
  1155 
       
  1156 
       
  1157             </div>
       
  1158 		</div>
       
  1159 	</div>
       
  1160 	<div id="ft">
       
  1161         <hr />
       
  1162         Copyright &copy; 2009 Yahoo! Inc. All rights reserved.
       
  1163 	</div>
       
  1164 </div>
       
  1165 <script type="text/javascript">
       
  1166     ALL_YUI_PROPS = [{"access": "", "host": "plugin.NodeFocusManager", "name": "activeDescendant", "url": "plugin.NodeFocusManager.html#config_activeDescendant", "type": "config"}, {"access": "", "host": "plugin.NodeFocusManager", "name": "activeDescendantChange", "url": "plugin.NodeFocusManager.html#event_activeDescendantChange", "type": "event"}, {"access": "protected", "host": "plugin.NodeFocusManager", "name": "_afterActiveDescendantChange", "url": "plugin.NodeFocusManager.html#method__afterActiveDescendantChange", "type": "method"}, {"access": "protected", "host": "plugin.NodeFocusManager", "name": "_attachKeyHandler", "url": "plugin.NodeFocusManager.html#method__attachKeyHandler", "type": "method"}, {"access": "", "host": "plugin.NodeFocusManager", "name": "blur", "url": "plugin.NodeFocusManager.html#method_blur", "type": "method"}, {"access": "", "host": "plugin.NodeFocusManager", "name": "circular", "url": "plugin.NodeFocusManager.html#config_circular", "type": "config"}, {"access": "", "host": "plugin.NodeFocusManager", "name": "circularChange", "url": "plugin.NodeFocusManager.html#event_circularChange", "type": "event"}, {"access": "", "host": "plugin.NodeFocusManager", "name": "descendants", "url": "plugin.NodeFocusManager.html#config_descendants", "type": "config"}, {"access": "", "host": "plugin.NodeFocusManager", "name": "descendantsChange", "url": "plugin.NodeFocusManager.html#event_descendantsChange", "type": "event"}, {"access": "protected", "host": "plugin.NodeFocusManager", "name": "_detachEventHandlers", "url": "plugin.NodeFocusManager.html#method__detachEventHandlers", "type": "method"}, {"access": "protected", "host": "plugin.NodeFocusManager", "name": "_detachKeyHandler", "url": "plugin.NodeFocusManager.html#method__detachKeyHandler", "type": "method"}, {"access": "", "host": "plugin.NodeFocusManager", "name": "focus", "url": "plugin.NodeFocusManager.html#method_focus", "type": "method"}, {"access": "", "host": "plugin.NodeFocusManager", "name": "focusClass", "url": "plugin.NodeFocusManager.html#config_focusClass", "type": "config"}, {"access": "", "host": "plugin.NodeFocusManager", "name": "focusClassChange", "url": "plugin.NodeFocusManager.html#event_focusClassChange", "type": "event"}, {"access": "", "host": "plugin.NodeFocusManager", "name": "focused", "url": "plugin.NodeFocusManager.html#config_focused", "type": "config"}, {"access": "", "host": "plugin.NodeFocusManager", "name": "focusedChange", "url": "plugin.NodeFocusManager.html#event_focusedChange", "type": "event"}, {"access": "protected", "host": "plugin.NodeFocusManager", "name": "_focusNext", "url": "plugin.NodeFocusManager.html#method__focusNext", "type": "method"}, {"access": "protected", "host": "plugin.NodeFocusManager", "name": "_focusPrevious", "url": "plugin.NodeFocusManager.html#method__focusPrevious", "type": "method"}, {"access": "protected", "host": "plugin.NodeFocusManager", "name": "_initDescendants", "url": "plugin.NodeFocusManager.html#method__initDescendants", "type": "method"}, {"access": "protected", "host": "plugin.NodeFocusManager", "name": "_isDescendant", "url": "plugin.NodeFocusManager.html#method__isDescendant", "type": "method"}, {"access": "", "host": "plugin.NodeFocusManager", "name": "keys", "url": "plugin.NodeFocusManager.html#config_keys", "type": "config"}, {"access": "", "host": "plugin.NodeFocusManager", "name": "keysChange", "url": "plugin.NodeFocusManager.html#event_keysChange", "type": "event"}, {"access": "protected", "host": "plugin.NodeFocusManager", "name": "_onDocFocus", "url": "plugin.NodeFocusManager.html#method__onDocFocus", "type": "method"}, {"access": "protected", "host": "plugin.NodeFocusManager", "name": "_onDocMouseDown", "url": "plugin.NodeFocusManager.html#method__onDocMouseDown", "type": "method"}, {"access": "protected", "host": "plugin.NodeFocusManager", "name": "_preventScroll", "url": "plugin.NodeFocusManager.html#method__preventScroll", "type": "method"}, {"access": "", "host": "plugin.NodeFocusManager", "name": "refresh", "url": "plugin.NodeFocusManager.html#method_refresh", "type": "method"}, {"access": "protected", "host": "plugin.NodeFocusManager", "name": "_removeFocusClass", "url": "plugin.NodeFocusManager.html#method__removeFocusClass", "type": "method"}, {"access": "", "host": "plugin.NodeFocusManager", "name": "start", "url": "plugin.NodeFocusManager.html#method_start", "type": "method"}, {"access": "", "host": "plugin.NodeFocusManager", "name": "stop", "url": "plugin.NodeFocusManager.html#method_stop", "type": "method"}];
       
  1167 </script>
       
  1168 </body>
       
  1169 </html>