src/cm/media/js/lib/yui/yui3.0.0/examples/event/event-focus-blur.html
changeset 0 40c8f766c9b8
equal deleted inserted replaced
-1:000000000000 0:40c8f766c9b8
       
     1 
       
     2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
       
     3 <html>
       
     4 <head>
       
     5 	<title>YUI Library Examples: Event: Skinning via Progressive Enhancement using the Event Utility and the Loader</title>
       
     6     <meta http-equiv="content-type" content="text/html; charset=utf-8">
       
     7     	<link rel="stylesheet" type="text/css" href="../../assets/yui.css" >
       
     8 
       
     9 <style>
       
    10     /*Supplemental CSS for the YUI distribution*/
       
    11     #custom-doc { width: 95%; min-width: 950px; }
       
    12     #pagetitle {background-image: url(../../assets/bg_hd.gif);}
       
    13 /*    #pagetitle h1 {background-image: url(../../assets/title_h_bg.gif);}*/
       
    14 </style>
       
    15 
       
    16 <link rel="stylesheet" type="text/css" href="../../assets/dpSyntaxHighlighter.css">
       
    17 <link type="text/css" rel="stylesheet" href="../../build/cssfonts/fonts-min.css" />
       
    18 <script type="text/javascript" src="../../build/yui/yui-min.js"></script>
       
    19 <style type="text/css">
       
    20 
       
    21 	.yui-checkboxes-loading #checkboxes {
       
    22 		display: none;
       
    23 	}
       
    24 
       
    25 </style>
       
    26 
       
    27 <script type="text/javascript">
       
    28 
       
    29 	//	Hide the checkboxes if JavaScript is enabled to prevent 
       
    30 	//	the user from seeing a flash of unstyled content while
       
    31 	//	the JavaScript for the checkboxes is being loaded.
       
    32 	document.documentElement.className = "yui-checkboxes-loading";
       
    33 
       
    34 </script>
       
    35 </head>
       
    36 <body id="yahoo-com" class=" yui-skin-sam">
       
    37 <div id="custom-doc" class="yui-t2">
       
    38 <div id="hd">
       
    39 	<div id="ygunav">
       
    40 		<p>
       
    41             <em>
       
    42                 <a href="http://developer.yahoo.com/yui/3/">YUI 3.x Home</a> <i> - </i>	
       
    43             </em>
       
    44 		</p>
       
    45 		<form action="http://search.yahoo.com/search" id="sitesearchform">
       
    46             <input name="vs" type="hidden" value="developer.yahoo.com">
       
    47             <input name="vs" type="hidden" value="yuiblog.com">
       
    48 		    <div id="sitesearch">
       
    49 		    	<label for="searchinput">Site Search (YDN &amp; YUIBlog): </label>
       
    50 			    <input type="text" id="searchinput" name="p">
       
    51 			    <input type="submit" value="Search" id="searchsubmit" class="ygbt">
       
    52 		    </div>
       
    53 		</form>
       
    54     </div>
       
    55 	<div id="ygma"><a href="../../"><img src="../../assets/logo.gif"  border="0" width="200" height="93"></a></div>
       
    56 	<div id="pagetitle"><h1>YUI Library Examples: Event: Skinning via Progressive Enhancement using the Event Utility and the Loader</h1></div>
       
    57 </div>
       
    58 <div id="bd">
       
    59 
       
    60 
       
    61 	<div id="yui-main">
       
    62 		<div class="yui-b">
       
    63 		  <div class="yui-ge">
       
    64 			  <div class="yui-u first example" id="main">
       
    65 
       
    66 	<h2>Event: Skinning via Progressive Enhancement using the Event Utility and the Loader</h2>
       
    67 
       
    68 	<div id="example" class="promo">
       
    69 	<div class="example-intro">
       
    70 	<p>
       
    71 Using Progressive Enhancement to skin checkboxes with the help of the 
       
    72 <a href="../../api/Loader.html">Loader</a>,
       
    73 <a href="../../api/module_classnamemanager.html">ClassNameManager Utility</a>,
       
    74 and the Event Utility's <code>focus</code> and <code>blur</code> events and the 
       
    75 <code>delegate</code> method.
       
    76 </p>	</div>	
       
    77 
       
    78 	<div class="module example-container ">
       
    79 			<div class="hd exampleHd">
       
    80 			<p class="newWindowButton yui-skin-sam">
       
    81                 <a href="event-focus-blur_clean.html" target="_blank">View example in new window.</a>
       
    82             </p>
       
    83 		</div>		<div id="example-canvas" class="bd">
       
    84 
       
    85 		
       
    86 	<!--BEGIN SOURCE CODE FOR EXAMPLE =============================== -->
       
    87 	
       
    88 	<div id="checkboxes">
       
    89 	<div>
       
    90 		<label for="field-1">Field 1: </label>
       
    91 		<span>
       
    92 			<span>
       
    93 				<input type="checkbox" id="field-1" name="field-1" value="1">
       
    94 			</span>
       
    95 		</span>
       
    96 	</div>
       
    97 	<div>
       
    98 		<label for="field-2">Field 2: </label>
       
    99 		<span>
       
   100 			<span>
       
   101 				<input type="checkbox" id="field-2" name="field-2" value="2">
       
   102 			</span>
       
   103 		</span>
       
   104 	</div>
       
   105 	<div>
       
   106 		<label for="field-3">Field 3: </label>
       
   107 		<span>
       
   108 			<span>
       
   109 				<input type="checkbox" id="field-3" name="field-3" value="3">
       
   110 			</span>
       
   111 		</span>
       
   112 	</div>			
       
   113 </div>
       
   114 
       
   115 <script type="text/javascript">
       
   116 
       
   117 	YUI({
       
   118 	
       
   119 		base: "../../build/",
       
   120 	
       
   121 		//	Load the stylesheet for the skinned checkboxes via JavaScript, 
       
   122 		//	since without JavaScript skinning of the checkboxes wouldn't 
       
   123 		//	be possible.
       
   124 		
       
   125 		modules: {
       
   126 
       
   127 			"checkboxcss": {
       
   128 				type: "css",
       
   129 				fullpath: "assets/checkbox.css"
       
   130 			},
       
   131 
       
   132 			"checkboxjs": {
       
   133 				type: "js",
       
   134 				fullpath: "assets/checkbox.js",
       
   135 				requires: ["classnamemanager", "event-focus", "node-event-delegate", "checkboxcss"]
       
   136 			}			    
       
   137 
       
   138 		}
       
   139 
       
   140 	}).use("checkboxjs", function(Y, result) {
       
   141 
       
   142 	    //	The callback supplied to use() will be executed regardless of
       
   143 	    //	whether the operation was successful or not.  The second parameter
       
   144 	    //	is a result object that has the status of the operation.  We can
       
   145 	    //	use this to try to recover from failures or timeouts.
       
   146 
       
   147 	    if (!result.success) {
       
   148 
       
   149 	        Y.log("Load failure: " + result.msg, "warn", "Example");
       
   150 
       
   151 			//	Show the checkboxes if the loader failed that way the original 
       
   152 			//	unskinned checkboxes will be visible so that the user can
       
   153 			//	interact with them either way.
       
   154 
       
   155 			document.documentElement.className = "";
       
   156 
       
   157 	    }
       
   158 
       
   159 	});
       
   160 
       
   161 </script>
       
   162 	
       
   163 	<!--END SOURCE CODE FOR EXAMPLE =============================== -->
       
   164 	
       
   165 		
       
   166 		</div>
       
   167 	</div>			
       
   168 	</div>
       
   169 		
       
   170 	<h3>Challenges</h3>
       
   171 <p>
       
   172 There are a few challenges when trying to skin an HTML checkbox using CSS.  To start, most of the 
       
   173 <a href="http://developer.yahoo.com/yui/articles/gbs/#a-grade">A-grade browsers</a> don't provide
       
   174 support for CSS properties like <code>border</code> and <code>background</code> on the 
       
   175 <code>&#60;input type="checkbox"&#62;</code> element.  Additionally, IE 6 and IE 7 (Quirks Mode) 
       
   176 lack support for attribute selectors &#151; necessary to style the <code>checked</code> and 
       
   177 <code>disabled</code> states.  Additionally, IE 6 and 7 only support the <code>:focus</code> and 
       
   178 <code>:active</code> pseudo classes on <code>&#60;a&#62;</code> elements, both of which are needed 
       
   179 to style a checkbox when it is focused or depressed.
       
   180 </p>
       
   181 
       
   182 <h3>Approach</h3>
       
   183 <p>
       
   184 Despite the shortcomings in CSS support, with a little extra markup and through the use of 
       
   185 JavaScript it is possible to skin an <code>&#60;input type="checkbox"&#62;</code> element 
       
   186 consistently well in all of the
       
   187 <a href="http://developer.yahoo.com/yui/articles/gbs/#a-grade">A-grade browsers</a>.
       
   188 </p>
       
   189 
       
   190 
       
   191 <h4>Markup</h4>
       
   192 <p>
       
   193 Since CSS support for the <code>&#60;input type="checkbox"&#62;</code> element is lacking, wrap 
       
   194 <code>&#60;input type="checkbox"&#62;</code> elements in one or more inline elements to provide the 
       
   195 necessary hooks for styling.  In this example, each <code>&#60;input type="checkbox"&#62;</code> 
       
   196 element is wrapped by two <code>&#60;span&#62;</code>s.
       
   197 </p>
       
   198 
       
   199 <div id="syntax1" class="yui-syntax-highlight"><div class="numbers"><pre class="html4strict" style="font-family:monospace;"><ol><li class="li1"><div class="de1"><span class="sc2">&lt;<span class="kw2">span</span>&gt;</span></div></li><li class="li1"><div class="de1">  <span class="sc2">&lt;<span class="kw2">span</span>&gt;</span></div></li><li class="li1"><div class="de1">    <span class="sc2">&lt;<span class="kw2">input</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;checkbox&quot;</span>&gt;</span></div></li><li class="li1"><div class="de1">  <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">span</span>&gt;</span></div></li><li class="li2"><div class="de2"><span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">span</span>&gt;</span></div></li></ol></pre></div><div class="nonumbers"><pre class="html4strict" style="font-family:monospace;"><span class="sc2">&lt;<span class="kw2">span</span>&gt;</span>
       
   200   <span class="sc2">&lt;<span class="kw2">span</span>&gt;</span>
       
   201     <span class="sc2">&lt;<span class="kw2">input</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;checkbox&quot;</span>&gt;</span>
       
   202   <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">span</span>&gt;</span>
       
   203 <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">span</span>&gt;</span></pre></div><textarea id="syntax1-plain"><span>
       
   204   <span>
       
   205     <input type="checkbox">
       
   206   </span>
       
   207 </span></textarea></div>
       
   208 <h4>CSS</h4>
       
   209 <p>
       
   210 To style each checkbox, a class name of <code>yui-checkbox</code> will be applied to the 
       
   211 outtermost <code>&#60;span&#62;</code> wrapping each <code>&#60;input type="checkbox"&#62;</code> 
       
   212 element.  An additional class will be used to represent the various states of each checkbox.  The 
       
   213 class name for each state will follow a consistent pattern: <code>yui-checkbox-[state]</code>.  
       
   214 For this example, the following state-based class names will be used:
       
   215 </p>
       
   216 <dl>
       
   217     <dt><code>yui-checkbox-focus</code></dt>
       
   218     <dd>The checkbox has focus</dd>
       
   219     <dt><code>yui-checkbox-active</code></dt>
       
   220     <dd>The checkbox is active (pressed)</dd>
       
   221     <dt><code>yui-checkbox-checked</code></dt>
       
   222     <dd>The checkbox is checked</dd>    
       
   223 </dl>
       
   224 <p>
       
   225 The styles for each checkbox comes together as follows:
       
   226 </p>
       
   227 
       
   228 <div id="syntax2" class="yui-syntax-highlight"><div class="numbers"><pre class="css" style="font-family:monospace;"><ol><li class="li1"><div class="de1"><span class="re1">.yui-checkbox</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">    <span class="kw1">display</span><span class="sy0">:</span> -moz-inline-stack<span class="sy0">;</span> <span class="coMULTI">/* Gecko &lt; 1.9, since it doesn't support &quot;inline-block&quot; */</span></div></li><li class="li1"><div class="de1">    <span class="kw1">display</span><span class="sy0">:</span> inline-<span class="kw2">block</span><span class="sy0">;</span> <span class="coMULTI">/* IE, Opera and Webkit, and Gecko 1.9 */</span></div></li><li class="li1"><div class="de1">    <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">10px</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">    <span class="kw1">height</span><span class="sy0">:</span> <span class="re3">10px</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">    <span class="kw1">border</span><span class="sy0">:</span> <span class="kw2">inset</span> <span class="re3">2px</span> <span class="re0">#999</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">    <span class="kw1">background-color</span><span class="sy0">:</span> <span class="re0">#fff</span><span class="sy0">;</span> <span class="coMULTI">/*  Need to set a background color or IE won't get mouse events */</span>  </div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="coMULTI">/*</span></div></li><li class="li2"><div class="de2"><span class="coMULTI">&nbsp;       Necessary for IE 6 (Quirks and Standards Mode) and IE 7 (Quirks Mode), since </span></div></li><li class="li1"><div class="de1"><span class="coMULTI">&nbsp;       they don't support use of negative margins without relative positioning.  </span></div></li><li class="li1"><div class="de1"><span class="coMULTI">&nbsp;   */</span></div></li><li class="li1"><div class="de1">    _position<span class="sy0">:</span> <span class="kw2">relative</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1"><span class="re1">.yui-checkbox</span> span <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">    <span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">block</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">    <span class="kw1">height</span><span class="sy0">:</span> <span class="re3">14px</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">    <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">12px</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">    <span class="kw1">overflow</span><span class="sy0">:</span> <span class="kw2">hidden</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="coMULTI">/* Position the checkmark for Gecko, Opera and Webkit and IE 7 (Strict Mode). */</span></div></li><li class="li1"><div class="de1">    <span class="kw1">margin</span><span class="sy0">:</span> <span class="re3">-5px</span> <span class="nu0">0</span> <span class="nu0">0</span> <span class="re3">1px</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">    <span class="coMULTI">/* Position the checkmark for IE 6 (Strict and Quirks Mode) and IE 7 (Quirks Mode).*/</span></div></li><li class="li1"><div class="de1">    _margin<span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">    _position<span class="sy0">:</span> <span class="kw2">absolute</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">    _top<span class="sy0">:</span> <span class="re3">-5px</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">    _left<span class="sy0">:</span> <span class="re3">1px</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="coMULTI">/* For Gecko &lt; 1.9: Positions the checkbox on the same line as its corresponding label. */</span></div></li><li class="li1"><div class="de1"><span class="re1">.yui-checkbox</span> span<span class="re2">:after </span><span class="br0">&#123;</span></div></li><li class="li2"><div class="de2">    <span class="kw1">content</span><span class="sy0">:</span> <span class="st0">&quot;.&quot;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">    <span class="kw1">visibility</span><span class="sy0">:</span> <span class="kw2">hidden</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">    <span class="kw1">line-height</span><span class="sy0">:</span> <span class="nu0">2</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2"><span class="coMULTI">/*</span></div></li><li class="li1"><div class="de1"><span class="coMULTI">&nbsp;   Hide the actual checkbox offscreen so that it is out of view, but still accessible via </span></div></li><li class="li1"><div class="de1"><span class="coMULTI">&nbsp;   the keyboard. </span></div></li><li class="li1"><div class="de1"><span class="coMULTI">*/</span></div></li><li class="li1"><div class="de1"><span class="re1">.yui-checkbox</span> input <span class="br0">&#123;</span></div></li><li class="li2"><div class="de2">    <span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">absolute</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">    <span class="kw1">left</span><span class="sy0">:</span> <span class="re3">-10000px</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="re1">.yui-checkbox-focus</span> <span class="br0">&#123;</span></div></li><li class="li2"><div class="de2">    <span class="kw1">border-color</span><span class="sy0">:</span> <span class="re0">#39f</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">    <span class="kw1">background-color</span><span class="sy0">:</span> <span class="re0">#9cf</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="re1">.yui-checkbox-active</span> <span class="br0">&#123;</span></div></li><li class="li2"><div class="de2">    <span class="kw1">background-color</span><span class="sy0">:</span> <span class="re0">#ccc</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="re1">.yui-checkbox-checked</span> span <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">    <span class="coMULTI">/* Draw a custom checkmark for the checked state using a background image. */</span></div></li><li class="li2"><div class="de2">    <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="co2">checkmark.png</span><span class="br0">&#41;</span> <span class="kw2">no-repeat</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li></ol></pre></div><div class="nonumbers"><pre class="css" style="font-family:monospace;"><span class="re1">.yui-checkbox</span> <span class="br0">&#123;</span>
       
   229     <span class="kw1">display</span><span class="sy0">:</span> -moz-inline-stack<span class="sy0">;</span> <span class="coMULTI">/* Gecko &lt; 1.9, since it doesn't support &quot;inline-block&quot; */</span>
       
   230     <span class="kw1">display</span><span class="sy0">:</span> inline-<span class="kw2">block</span><span class="sy0">;</span> <span class="coMULTI">/* IE, Opera and Webkit, and Gecko 1.9 */</span>
       
   231     <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">10px</span><span class="sy0">;</span>
       
   232     <span class="kw1">height</span><span class="sy0">:</span> <span class="re3">10px</span><span class="sy0">;</span>
       
   233     <span class="kw1">border</span><span class="sy0">:</span> <span class="kw2">inset</span> <span class="re3">2px</span> <span class="re0">#999</span><span class="sy0">;</span>
       
   234     <span class="kw1">background-color</span><span class="sy0">:</span> <span class="re0">#fff</span><span class="sy0">;</span> <span class="coMULTI">/*  Need to set a background color or IE won't get mouse events */</span>  
       
   235 &nbsp;
       
   236     <span class="coMULTI">/*
       
   237         Necessary for IE 6 (Quirks and Standards Mode) and IE 7 (Quirks Mode), since 
       
   238         they don't support use of negative margins without relative positioning.  
       
   239     */</span>
       
   240     _position<span class="sy0">:</span> <span class="kw2">relative</span><span class="sy0">;</span>
       
   241 <span class="br0">&#125;</span>
       
   242 &nbsp;
       
   243 <span class="re1">.yui-checkbox</span> span <span class="br0">&#123;</span>
       
   244     <span class="kw1">display</span><span class="sy0">:</span> <span class="kw2">block</span><span class="sy0">;</span>
       
   245     <span class="kw1">height</span><span class="sy0">:</span> <span class="re3">14px</span><span class="sy0">;</span>
       
   246     <span class="kw1">width</span><span class="sy0">:</span> <span class="re3">12px</span><span class="sy0">;</span>
       
   247     <span class="kw1">overflow</span><span class="sy0">:</span> <span class="kw2">hidden</span><span class="sy0">;</span>
       
   248 &nbsp;
       
   249     <span class="coMULTI">/* Position the checkmark for Gecko, Opera and Webkit and IE 7 (Strict Mode). */</span>
       
   250     <span class="kw1">margin</span><span class="sy0">:</span> <span class="re3">-5px</span> <span class="nu0">0</span> <span class="nu0">0</span> <span class="re3">1px</span><span class="sy0">;</span>
       
   251 &nbsp;
       
   252     <span class="coMULTI">/* Position the checkmark for IE 6 (Strict and Quirks Mode) and IE 7 (Quirks Mode).*/</span>
       
   253     _margin<span class="sy0">:</span> <span class="nu0">0</span><span class="sy0">;</span>
       
   254     _position<span class="sy0">:</span> <span class="kw2">absolute</span><span class="sy0">;</span>
       
   255     _top<span class="sy0">:</span> <span class="re3">-5px</span><span class="sy0">;</span>
       
   256     _left<span class="sy0">:</span> <span class="re3">1px</span><span class="sy0">;</span>
       
   257 &nbsp;
       
   258 <span class="br0">&#125;</span>
       
   259 &nbsp;
       
   260 <span class="coMULTI">/* For Gecko &lt; 1.9: Positions the checkbox on the same line as its corresponding label. */</span>
       
   261 <span class="re1">.yui-checkbox</span> span<span class="re2">:after </span><span class="br0">&#123;</span>
       
   262     <span class="kw1">content</span><span class="sy0">:</span> <span class="st0">&quot;.&quot;</span><span class="sy0">;</span>
       
   263     <span class="kw1">visibility</span><span class="sy0">:</span> <span class="kw2">hidden</span><span class="sy0">;</span>
       
   264     <span class="kw1">line-height</span><span class="sy0">:</span> <span class="nu0">2</span><span class="sy0">;</span>
       
   265 <span class="br0">&#125;</span>
       
   266 &nbsp;
       
   267 <span class="coMULTI">/*
       
   268     Hide the actual checkbox offscreen so that it is out of view, but still accessible via 
       
   269     the keyboard. 
       
   270 */</span>
       
   271 <span class="re1">.yui-checkbox</span> input <span class="br0">&#123;</span>
       
   272     <span class="kw1">position</span><span class="sy0">:</span> <span class="kw2">absolute</span><span class="sy0">;</span>
       
   273     <span class="kw1">left</span><span class="sy0">:</span> <span class="re3">-10000px</span><span class="sy0">;</span>
       
   274 <span class="br0">&#125;</span>
       
   275 &nbsp;
       
   276 <span class="re1">.yui-checkbox-focus</span> <span class="br0">&#123;</span>
       
   277     <span class="kw1">border-color</span><span class="sy0">:</span> <span class="re0">#39f</span><span class="sy0">;</span>
       
   278     <span class="kw1">background-color</span><span class="sy0">:</span> <span class="re0">#9cf</span><span class="sy0">;</span>
       
   279 <span class="br0">&#125;</span>
       
   280 &nbsp;
       
   281 <span class="re1">.yui-checkbox-active</span> <span class="br0">&#123;</span>
       
   282     <span class="kw1">background-color</span><span class="sy0">:</span> <span class="re0">#ccc</span><span class="sy0">;</span>
       
   283 <span class="br0">&#125;</span>
       
   284 &nbsp;
       
   285 <span class="re1">.yui-checkbox-checked</span> span <span class="br0">&#123;</span>
       
   286     <span class="coMULTI">/* Draw a custom checkmark for the checked state using a background image. */</span>
       
   287     <span class="kw1">background</span><span class="sy0">:</span> <span class="kw2">url</span><span class="br0">&#40;</span><span class="co2">checkmark.png</span><span class="br0">&#41;</span> <span class="kw2">no-repeat</span><span class="sy0">;</span>
       
   288 <span class="br0">&#125;</span></pre></div><textarea id="syntax2-plain">.yui-checkbox {
       
   289     display: -moz-inline-stack; /* Gecko < 1.9, since it doesn't support "inline-block" */
       
   290     display: inline-block; /* IE, Opera and Webkit, and Gecko 1.9 */
       
   291     width: 10px;
       
   292     height: 10px;
       
   293     border: inset 2px #999;
       
   294     background-color: #fff; /*  Need to set a background color or IE won't get mouse events */  
       
   295 
       
   296     /*
       
   297         Necessary for IE 6 (Quirks and Standards Mode) and IE 7 (Quirks Mode), since 
       
   298         they don't support use of negative margins without relative positioning.  
       
   299     */
       
   300     _position: relative;
       
   301 }
       
   302 
       
   303 .yui-checkbox span {
       
   304     display: block;
       
   305     height: 14px;
       
   306     width: 12px;
       
   307     overflow: hidden;
       
   308 
       
   309     /* Position the checkmark for Gecko, Opera and Webkit and IE 7 (Strict Mode). */
       
   310     margin: -5px 0 0 1px;
       
   311 
       
   312     /* Position the checkmark for IE 6 (Strict and Quirks Mode) and IE 7 (Quirks Mode).*/
       
   313     _margin: 0;
       
   314     _position: absolute;
       
   315     _top: -5px;
       
   316     _left: 1px;
       
   317     
       
   318 }
       
   319 
       
   320 /* For Gecko < 1.9: Positions the checkbox on the same line as its corresponding label. */
       
   321 .yui-checkbox span:after {
       
   322     content: ".";
       
   323     visibility: hidden;
       
   324     line-height: 2;
       
   325 }
       
   326 
       
   327 /*
       
   328     Hide the actual checkbox offscreen so that it is out of view, but still accessible via 
       
   329     the keyboard. 
       
   330 */
       
   331 .yui-checkbox input {
       
   332     position: absolute;
       
   333     left: -10000px;
       
   334 }
       
   335 
       
   336 .yui-checkbox-focus {
       
   337     border-color: #39f;
       
   338     background-color: #9cf;
       
   339 }
       
   340 
       
   341 .yui-checkbox-active {
       
   342     background-color: #ccc;
       
   343 }
       
   344 
       
   345 .yui-checkbox-checked span {
       
   346     /* Draw a custom checkmark for the checked state using a background image. */
       
   347     background: url(checkmark.png) no-repeat;
       
   348 }</textarea></div>
       
   349 <h4>JavaScript</h4>
       
   350 
       
   351 <p>
       
   352 Application and removal of the state-based class names will be facilitated by JavaScript event 
       
   353 handlers.  Each event handler will track the state of the 
       
   354 <code>&#60;input type="checkbox"&#62;</code> element, and apply and remove corresponding 
       
   355 state-based class names from its outtermost <code>&#60;span&#62;</code> &#151; 
       
   356 making it easy to style each state.  And since each JavaScript is required for state management, 
       
   357 the stylesheet for the skinned checkboxes will only be added to the page when JavaScript is
       
   358 enabled.  This will ensure that each checkbox works correctly with and without JavaScript enabled.
       
   359 </p>
       
   360 
       
   361 <p>
       
   362 Since there could easily be many instances of a skinned checkbox on the page, all event 
       
   363 listeners will be attached to the containing element for all checkboxes.  Each listener will 
       
   364 listen for events as they bubble up from each checkbox.  Relying on event bubbling will improve the 
       
   365 overall performance of the page by reducing the number of event handlers.
       
   366 </p>
       
   367 
       
   368 <p>
       
   369 Since the DOM <code>focus</code> and <code>blur</code> events do not bubble, use the Event Utility's 
       
   370 <a href="../../api/YUI.html#event_focus"><code>focus</code></a> and 
       
   371 <a href="../../api/YUI.html#event_focus"><code>blur</code></a> custom events, as an alternative to 
       
   372 attaching discrete focus and blur event handlers to the <code>&#60;input type="checkbox"&#62;</code>
       
   373 element of each skinned checkbox.  The 
       
   374 <a href="../../api/YUI.html#event_focus"><code>focus</code></a> and 
       
   375 <a href="../../api/YUI.html#event_focus"><code>blur</code></a> custom events leverage 
       
   376 capture-phase DOM event listeners, making it possible to attach a single focus and blur event 
       
   377 listener on the containing element of each checkbox &#151; thereby increasing the performance 
       
   378 of the page.  The complete script for the example comes together as follows:
       
   379 </p>
       
   380 
       
   381 <div id="syntax3" class="yui-syntax-highlight"><div class="numbers"><pre class="javascript" style="font-family:monospace;"><ol><li class="li1"><div class="de1">YUI<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="kw2">use</span><span class="br0">&#40;</span><span class="st0">&quot;*&quot;</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span>Y<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="kw2">var</span> UA <span class="sy0">=</span> Y.<span class="me1">UA</span><span class="sy0">,</span></div></li><li class="li1"><div class="de1">        getClassName <span class="sy0">=</span> Y.<span class="me1">ClassNameManager</span>.<span class="me1">getClassName</span><span class="sy0">,</span></div></li><li class="li2"><div class="de2">        sCheckboxFocusClass <span class="sy0">=</span> getClassName<span class="br0">&#40;</span><span class="st0">&quot;checkbox&quot;</span><span class="sy0">,</span> <span class="st0">&quot;focus&quot;</span><span class="br0">&#41;</span><span class="sy0">,</span>    <span class="co1">// Create yui-checkbox-focus</span></div></li><li class="li1"><div class="de1">        sCheckboxCheckedClass <span class="sy0">=</span> getClassName<span class="br0">&#40;</span><span class="st0">&quot;checkbox&quot;</span><span class="sy0">,</span> <span class="st0">&quot;checked&quot;</span><span class="br0">&#41;</span><span class="sy0">,</span>    <span class="co1">// Create yui-checkbox-checked</span></div></li><li class="li1"><div class="de1">        sCheckboxActiveClass <span class="sy0">=</span> getClassName<span class="br0">&#40;</span><span class="st0">&quot;checkbox&quot;</span><span class="sy0">,</span> <span class="st0">&quot;active&quot;</span><span class="br0">&#41;</span><span class="sy0">,</span>  <span class="co1">// Create yui-checkbox-active</span></div></li><li class="li1"><div class="de1">        bKeyListenersInitialized <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">,</span></div></li><li class="li1"><div class="de1">        bMouseListenersInitialized <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">,</span></div></li><li class="li2"><div class="de2">        forAttr <span class="sy0">=</span> <span class="br0">&#40;</span>UA.<span class="me1">ie</span> <span class="sy0">&amp;&amp;</span> UA.<span class="me1">ie</span> <span class="sy0">&lt;</span> <span class="nu0">8</span><span class="br0">&#41;</span> <span class="sy0">?</span> <span class="st0">&quot;htmlFor&quot;</span> <span class="sy0">:</span> <span class="st0">&quot;for&quot;</span><span class="sy0">,</span></div></li><li class="li1"><div class="de1">        bBlockDocumentMouseUp <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">,</span></div></li><li class="li1"><div class="de1">        bBlockClearActive <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">,</span></div></li><li class="li1"><div class="de1">        bBlockBlur <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">,</span>     </div></li><li class="li1"><div class="de1">        oActiveCheckbox<span class="sy0">;</span>            </div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="kw2">var</span> initKeyListeners <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="kw1">this</span>.<span class="me1">delegate</span><span class="br0">&#40;</span><span class="st0">&quot;keydown&quot;</span><span class="sy0">,</span> onCheckboxKeyDown<span class="sy0">,</span> <span class="st0">&quot;.yui-checkbox&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">        <span class="kw1">this</span>.<span class="me1">delegate</span><span class="br0">&#40;</span><span class="st0">&quot;click&quot;</span><span class="sy0">,</span> onCheckboxClick<span class="sy0">,</span> <span class="st0">&quot;.yui-checkbox&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">        <span class="kw1">this</span>.<span class="me1">delegate</span><span class="br0">&#40;</span><span class="st0">&quot;blur&quot;</span><span class="sy0">,</span> onCheckboxBlur<span class="sy0">,</span> <span class="st0">&quot;input[type=checkbox]&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        bKeyListenersInitialized <span class="sy0">=</span> <span class="kw2">true</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">    <span class="br0">&#125;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="kw2">var</span> initMouseListeners <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">        <span class="kw1">this</span>.<span class="me1">delegate</span><span class="br0">&#40;</span><span class="st0">&quot;mouseover&quot;</span><span class="sy0">,</span> onCheckboxMouseOver<span class="sy0">,</span> <span class="st0">&quot;.yui-checkbox&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">        <span class="kw1">this</span>.<span class="me1">delegate</span><span class="br0">&#40;</span><span class="st0">&quot;mouseout&quot;</span><span class="sy0">,</span> onCheckboxMouseOut<span class="sy0">,</span> <span class="st0">&quot;.yui-checkbox-active&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">        <span class="kw1">this</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;ownerDocument&quot;</span><span class="br0">&#41;</span>.<span class="me1">on</span><span class="br0">&#40;</span><span class="st0">&quot;mouseup&quot;</span><span class="sy0">,</span> onDocumentMouseUp<span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        bMouseListenersInitialized <span class="sy0">=</span> <span class="kw2">true</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="br0">&#125;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="kw2">var</span> getCheckbox <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>node<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="kw1">return</span> <span class="br0">&#40;</span>node.<span class="me1">hasClass</span><span class="br0">&#40;</span><span class="st0">&quot;yui-checkbox&quot;</span><span class="br0">&#41;</span> <span class="sy0">?</span> node <span class="sy0">:</span> node.<span class="me1">ancestor</span><span class="br0">&#40;</span><span class="st0">&quot;.yui-checkbox&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="br0">&#125;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="kw2">var</span> getCheckboxForLabel <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>label<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="kw2">var</span> sID <span class="sy0">=</span> label.<span class="me1">getAttribute</span><span class="br0">&#40;</span>forAttr<span class="br0">&#41;</span><span class="sy0">,</span></div></li><li class="li1"><div class="de1">            oInput<span class="sy0">,</span></div></li><li class="li2"><div class="de2">            oCheckbox<span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="kw1">if</span> <span class="br0">&#40;</span>sID<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">            oInput <span class="sy0">=</span> Y.<span class="me1">one</span><span class="br0">&#40;</span><span class="st0">&quot;#&quot;</span> <span class="sy0">+</span> sID<span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">            <span class="kw1">if</span> <span class="br0">&#40;</span>oInput<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">                oCheckbox <span class="sy0">=</span> getCheckbox<span class="br0">&#40;</span>oInput<span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">            <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">        <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="kw1">return</span> oCheckbox<span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="br0">&#125;</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="kw2">var</span> updateCheckedState <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>input<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="kw2">var</span> oCheckbox <span class="sy0">=</span> getCheckbox<span class="br0">&#40;</span>input<span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="kw1">if</span> <span class="br0">&#40;</span>input.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;checked&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">            oCheckbox.<span class="me1">addClass</span><span class="br0">&#40;</span>sCheckboxCheckedClass<span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">        <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">        <span class="kw1">else</span> <span class="br0">&#123;</span></div></li><li class="li2"><div class="de2">            oCheckbox.<span class="me1">removeClass</span><span class="br0">&#40;</span>sCheckboxCheckedClass<span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">        <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="br0">&#125;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="kw2">var</span> setActiveCheckbox <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>checkbox<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        checkbox.<span class="me1">addClass</span><span class="br0">&#40;</span>sCheckboxActiveClass<span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">        oActiveCheckbox <span class="sy0">=</span> checkbox<span class="sy0">;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="br0">&#125;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="kw2">var</span> clearActiveCheckbox <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="kw1">if</span> <span class="br0">&#40;</span>oActiveCheckbox<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">            oActiveCheckbox.<span class="me1">removeClass</span><span class="br0">&#40;</span>sCheckboxActiveClass<span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">            oActiveCheckbox <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">        <span class="br0">&#125;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="br0">&#125;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="kw2">var</span> onCheckboxMouseOver <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>event<span class="sy0">,</span> matchedEl<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="kw1">if</span> <span class="br0">&#40;</span>oActiveCheckbox <span class="sy0">&amp;&amp;</span> oActiveCheckbox.<span class="me1">compareTo</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">            oActiveCheckbox.<span class="me1">addClass</span><span class="br0">&#40;</span>sCheckboxActiveClass<span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">        <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">    <span class="br0">&#125;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="kw2">var</span> onCheckboxMouseOut <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>event<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">        <span class="kw1">this</span>.<span class="me1">removeClass</span><span class="br0">&#40;</span>sCheckboxActiveClass<span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="br0">&#125;</span><span class="sy0">;</span>              </div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">    <span class="kw2">var</span> onDocumentMouseUp <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>event<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="kw2">var</span> oCheckbox<span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span>bBlockDocumentMouseUp<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">            oCheckbox <span class="sy0">=</span> getCheckbox<span class="br0">&#40;</span>event.<span class="me1">target</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">            <span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>oCheckbox <span class="sy0">&amp;&amp;</span> <span class="sy0">!</span>oCheckbox.<span class="me1">compareTo</span><span class="br0">&#40;</span>oActiveCheckbox<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy0">||</span> <span class="sy0">!</span>oCheckbox<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">                clearActiveCheckbox<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">            <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        bBlockDocumentMouseUp <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="br0">&#125;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="kw2">var</span> onCheckboxFocus <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>event<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="co1">//  Remove the focus style from any checkbox that might still have it</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="kw2">var</span> oCheckbox <span class="sy0">=</span> Y.<span class="me1">one</span><span class="br0">&#40;</span><span class="st0">&quot;#checkboxes&quot;</span><span class="br0">&#41;</span>.<span class="me1">one</span><span class="br0">&#40;</span><span class="st0">&quot;.yui-checkbox-focus&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">        <span class="kw1">if</span> <span class="br0">&#40;</span>oCheckbox<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">            oCheckbox.<span class="me1">removeClass</span><span class="br0">&#40;</span>sCheckboxFocusClass<span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">        <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="co1">//  Defer adding key-related and click event listeners until </span></div></li><li class="li2"><div class="de2">        <span class="co1">//  one of the checkboxes is initially focused.</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span>bKeyListenersInitialized<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">            initKeyListeners.<span class="me1">call</span><span class="br0">&#40;</span>event.<span class="me1">container</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">        <span class="br0">&#125;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="kw2">var</span> oCheckbox <span class="sy0">=</span> getCheckbox<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        oCheckbox.<span class="me1">addClass</span><span class="br0">&#40;</span>sCheckboxFocusClass<span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">    <span class="br0">&#125;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="kw2">var</span> onCheckboxBlur <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>event<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">        <span class="kw1">if</span> <span class="br0">&#40;</span>bBlockBlur<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">            bBlockBlur <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">            <span class="kw1">return</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">        <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">        <span class="kw2">var</span> oCheckbox <span class="sy0">=</span> getCheckbox<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        oCheckbox.<span class="me1">removeClass</span><span class="br0">&#40;</span>sCheckboxFocusClass<span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span>bBlockClearActive <span class="sy0">&amp;&amp;</span> oCheckbox.<span class="me1">compareTo</span><span class="br0">&#40;</span>oActiveCheckbox<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li2"><div class="de2">            clearActiveCheckbox<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">        <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        bBlockClearActive <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">    <span class="br0">&#125;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="kw2">var</span> onCheckboxMouseDown <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>event<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">        <span class="co1">//  Defer adding mouse-related and click event listeners until </span></div></li><li class="li1"><div class="de1">        <span class="co1">//  the user mouses down on one of the checkboxes.</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span>bMouseListenersInitialized<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">            initMouseListeners.<span class="me1">call</span><span class="br0">&#40;</span>event.<span class="me1">container</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">        <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="kw2">var</span> oCheckbox<span class="sy0">,</span></div></li><li class="li1"><div class="de1">            oInput<span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;nodeName&quot;</span><span class="br0">&#41;</span>.<span class="me1">toLowerCase</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">===</span> <span class="st0">&quot;label&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">            <span class="co1">//  If the target of the event was the checkbox's label element, the</span></div></li><li class="li1"><div class="de1">            <span class="co1">//  label will dispatch a click event to the checkbox, meaning the </span></div></li><li class="li2"><div class="de2">            <span class="co1">//  &quot;onCheckboxClick&quot; handler will be called twice.  For that reason</span></div></li><li class="li1"><div class="de1">            <span class="co1">//  it is necessary to block the &quot;onDocumentMouseUp&quot; handler from</span></div></li><li class="li1"><div class="de1">            <span class="co1">//  clearing the active state, so that a reference to the active  </span></div></li><li class="li1"><div class="de1">            <span class="co1">//  checkbox still exists the second time the &quot;onCheckboxClick&quot;</span></div></li><li class="li1"><div class="de1">            <span class="co1">//  handler is called.</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">            bBlockDocumentMouseUp <span class="sy0">=</span> <span class="kw2">true</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">            <span class="co1">//  When the user clicks the label instead of the checkbox itself, </span></div></li><li class="li1"><div class="de1">            <span class="co1">//  the checkbox will be blurred if it has focus.  Since the </span></div></li><li class="li2"><div class="de2">            <span class="co1">//  &quot;onCheckboxBlur&quot; handler clears the active state it is </span></div></li><li class="li1"><div class="de1">            <span class="co1">//  necessary to block the clearing of the active state when the </span></div></li><li class="li1"><div class="de1">            <span class="co1">//  label is clicked instead of the checkbox itself.</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">            bBlockClearActive <span class="sy0">=</span> <span class="kw2">true</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">            oCheckbox <span class="sy0">=</span> getCheckboxForLabel<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">        <span class="kw1">else</span> <span class="br0">&#123;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">            oCheckbox <span class="sy0">=</span> <span class="kw1">this</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">        <span class="co1">//  Need to focus the input manually for two reasons:</span></div></li><li class="li1"><div class="de1">        <span class="co1">//  1)  Mousing down on a label in Webkit doesn't focus its  </span></div></li><li class="li1"><div class="de1">        <span class="co1">//      associated checkbox</span></div></li><li class="li1"><div class="de1">        <span class="co1">//  2)  By default checkboxes are focused when the user mouses </span></div></li><li class="li1"><div class="de1">        <span class="co1">//      down on them.  However, since the actually checkbox is </span></div></li><li class="li2"><div class="de2">        <span class="co1">//      obscurred by the two span elements that are used to </span></div></li><li class="li1"><div class="de1">        <span class="co1">//      style it, the checkbox wont' receive focus as it was </span></div></li><li class="li1"><div class="de1">        <span class="co1">//      never the actual target of the mousedown event.</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        oInput <span class="sy0">=</span> oCheckbox.<span class="me1">one</span><span class="br0">&#40;</span><span class="st0">&quot;input&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="co1">//  Calling Event.preventDefault won't block the blurring of the </span></div></li><li class="li1"><div class="de1">        <span class="co1">//  currently focused element in IE, so we'll use the &quot;bBlockBlur&quot;</span></div></li><li class="li1"><div class="de1">        <span class="co1">//  variable to stop the code in the blur event handler  </span></div></li><li class="li2"><div class="de2">        <span class="co1">//  from executing.</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        bBlockBlur <span class="sy0">=</span> <span class="br0">&#40;</span>UA.<span class="me1">ie</span> <span class="sy0">&amp;&amp;</span> oInput.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;checked&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">        oInput.<span class="kw3">focus</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        setActiveCheckbox<span class="br0">&#40;</span>oCheckbox<span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="co1">//  Need to call preventDefault because by default mousing down on</span></div></li><li class="li2"><div class="de2">        <span class="co1">//  an element will blur the element in the document that currently </span></div></li><li class="li1"><div class="de1">        <span class="co1">//  has focus--in this case, the input element that was </span></div></li><li class="li1"><div class="de1">        <span class="co1">//  just focused.</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        event.<span class="me1">preventDefault</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="br0">&#125;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="kw2">var</span> onCheckboxClick <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>event<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="kw2">var</span> oInput<span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">compareTo</span><span class="br0">&#40;</span>oActiveCheckbox<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">            oInput <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">one</span><span class="br0">&#40;</span><span class="st0">&quot;input&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">            <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span>event.<span class="me1">target</span>.<span class="me1">compareTo</span><span class="br0">&#40;</span>oInput<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">                <span class="co1">//  If the click event was fired via the mouse the checked</span></div></li><li class="li2"><div class="de2">                <span class="co1">//  state will have to be manually updated since the input </span></div></li><li class="li1"><div class="de1">                <span class="co1">//  is hidden offscreen and therefore couldn't be the </span></div></li><li class="li1"><div class="de1">                <span class="co1">//  target of the click.</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">                oInput.<span class="me1">set</span><span class="br0">&#40;</span><span class="st0">&quot;checked&quot;</span><span class="sy0">,</span> <span class="br0">&#40;</span><span class="sy0">!</span>oInput.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;checked&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">            <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">            updateCheckedState<span class="br0">&#40;</span>oInput<span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">            clearActiveCheckbox<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="br0">&#125;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="kw2">var</span> onCheckboxKeyDown <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>event<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="co1">//  Style the checkbox as being active when the user presses the </span></div></li><li class="li1"><div class="de1">        <span class="co1">//  space bar</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="kw1">if</span> <span class="br0">&#40;</span>event.<span class="me1">keyCode</span> <span class="sy0">===</span> <span class="nu0">32</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">            setActiveCheckbox<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">        <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">    <span class="br0">&#125;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    Y.<span class="me1">all</span><span class="br0">&#40;</span><span class="st0">&quot;#checkboxes&gt;div&gt;span&quot;</span><span class="br0">&#41;</span>.<span class="me1">addClass</span><span class="br0">&#40;</span><span class="st0">&quot;yui-checkbox&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="co1">//  Remove the &quot;yui-checkboxes-loading&quot; class used to hide the </span></div></li><li class="li2"><div class="de2">    <span class="co1">//  checkboxes now that the checkboxes have been skinned.</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    Y.<span class="me1">one</span><span class="br0">&#40;</span><span class="st0">&quot;#checkboxes&quot;</span><span class="br0">&#41;</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;ownerDocument&quot;</span><span class="br0">&#41;</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;documentElement&quot;</span><span class="br0">&#41;</span>.<span class="me1">removeClass</span><span class="br0">&#40;</span><span class="st0">&quot;yui-checkboxes-loading&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="co1">//  Add the minimum number of event listeners needed to start, bind the </span></div></li><li class="li2"><div class="de2">    <span class="co1">//  rest when needed</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    Y.<span class="me1">delegate</span><span class="br0">&#40;</span><span class="st0">&quot;mousedown&quot;</span><span class="sy0">,</span> onCheckboxMouseDown<span class="sy0">,</span> <span class="st0">&quot;#checkboxes&quot;</span><span class="sy0">,</span> <span class="st0">&quot;.yui-checkbox,label&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">    Y.<span class="me1">delegate</span><span class="br0">&#40;</span><span class="st0">&quot;focus&quot;</span><span class="sy0">,</span> onCheckboxFocus<span class="sy0">,</span> <span class="st0">&quot;#checkboxes&quot;</span><span class="sy0">,</span> <span class="st0">&quot;input[type=checkbox]&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2"><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li></ol></pre></div><div class="nonumbers"><pre class="javascript" style="font-family:monospace;">YUI<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="kw2">use</span><span class="br0">&#40;</span><span class="st0">&quot;*&quot;</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span>Y<span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   382 &nbsp;
       
   383     <span class="kw2">var</span> UA <span class="sy0">=</span> Y.<span class="me1">UA</span><span class="sy0">,</span>
       
   384         getClassName <span class="sy0">=</span> Y.<span class="me1">ClassNameManager</span>.<span class="me1">getClassName</span><span class="sy0">,</span>
       
   385         sCheckboxFocusClass <span class="sy0">=</span> getClassName<span class="br0">&#40;</span><span class="st0">&quot;checkbox&quot;</span><span class="sy0">,</span> <span class="st0">&quot;focus&quot;</span><span class="br0">&#41;</span><span class="sy0">,</span>    <span class="co1">// Create yui-checkbox-focus</span>
       
   386         sCheckboxCheckedClass <span class="sy0">=</span> getClassName<span class="br0">&#40;</span><span class="st0">&quot;checkbox&quot;</span><span class="sy0">,</span> <span class="st0">&quot;checked&quot;</span><span class="br0">&#41;</span><span class="sy0">,</span>    <span class="co1">// Create yui-checkbox-checked</span>
       
   387         sCheckboxActiveClass <span class="sy0">=</span> getClassName<span class="br0">&#40;</span><span class="st0">&quot;checkbox&quot;</span><span class="sy0">,</span> <span class="st0">&quot;active&quot;</span><span class="br0">&#41;</span><span class="sy0">,</span>  <span class="co1">// Create yui-checkbox-active</span>
       
   388         bKeyListenersInitialized <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">,</span>
       
   389         bMouseListenersInitialized <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">,</span>
       
   390         forAttr <span class="sy0">=</span> <span class="br0">&#40;</span>UA.<span class="me1">ie</span> <span class="sy0">&amp;&amp;</span> UA.<span class="me1">ie</span> <span class="sy0">&lt;</span> <span class="nu0">8</span><span class="br0">&#41;</span> <span class="sy0">?</span> <span class="st0">&quot;htmlFor&quot;</span> <span class="sy0">:</span> <span class="st0">&quot;for&quot;</span><span class="sy0">,</span>
       
   391         bBlockDocumentMouseUp <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">,</span>
       
   392         bBlockClearActive <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">,</span>
       
   393         bBlockBlur <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">,</span>     
       
   394         oActiveCheckbox<span class="sy0">;</span>            
       
   395 &nbsp;
       
   396 &nbsp;
       
   397     <span class="kw2">var</span> initKeyListeners <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   398 &nbsp;
       
   399         <span class="kw1">this</span>.<span class="me1">delegate</span><span class="br0">&#40;</span><span class="st0">&quot;keydown&quot;</span><span class="sy0">,</span> onCheckboxKeyDown<span class="sy0">,</span> <span class="st0">&quot;.yui-checkbox&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   400         <span class="kw1">this</span>.<span class="me1">delegate</span><span class="br0">&#40;</span><span class="st0">&quot;click&quot;</span><span class="sy0">,</span> onCheckboxClick<span class="sy0">,</span> <span class="st0">&quot;.yui-checkbox&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   401         <span class="kw1">this</span>.<span class="me1">delegate</span><span class="br0">&#40;</span><span class="st0">&quot;blur&quot;</span><span class="sy0">,</span> onCheckboxBlur<span class="sy0">,</span> <span class="st0">&quot;input[type=checkbox]&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   402 &nbsp;
       
   403         bKeyListenersInitialized <span class="sy0">=</span> <span class="kw2">true</span><span class="sy0">;</span>
       
   404 &nbsp;
       
   405     <span class="br0">&#125;</span><span class="sy0">;</span>
       
   406 &nbsp;
       
   407 &nbsp;
       
   408     <span class="kw2">var</span> initMouseListeners <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   409 &nbsp;
       
   410         <span class="kw1">this</span>.<span class="me1">delegate</span><span class="br0">&#40;</span><span class="st0">&quot;mouseover&quot;</span><span class="sy0">,</span> onCheckboxMouseOver<span class="sy0">,</span> <span class="st0">&quot;.yui-checkbox&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   411         <span class="kw1">this</span>.<span class="me1">delegate</span><span class="br0">&#40;</span><span class="st0">&quot;mouseout&quot;</span><span class="sy0">,</span> onCheckboxMouseOut<span class="sy0">,</span> <span class="st0">&quot;.yui-checkbox-active&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   412         <span class="kw1">this</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;ownerDocument&quot;</span><span class="br0">&#41;</span>.<span class="me1">on</span><span class="br0">&#40;</span><span class="st0">&quot;mouseup&quot;</span><span class="sy0">,</span> onDocumentMouseUp<span class="br0">&#41;</span><span class="sy0">;</span>
       
   413 &nbsp;
       
   414         bMouseListenersInitialized <span class="sy0">=</span> <span class="kw2">true</span><span class="sy0">;</span>
       
   415 &nbsp;
       
   416     <span class="br0">&#125;</span><span class="sy0">;</span>
       
   417 &nbsp;
       
   418 &nbsp;
       
   419     <span class="kw2">var</span> getCheckbox <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>node<span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   420 &nbsp;
       
   421         <span class="kw1">return</span> <span class="br0">&#40;</span>node.<span class="me1">hasClass</span><span class="br0">&#40;</span><span class="st0">&quot;yui-checkbox&quot;</span><span class="br0">&#41;</span> <span class="sy0">?</span> node <span class="sy0">:</span> node.<span class="me1">ancestor</span><span class="br0">&#40;</span><span class="st0">&quot;.yui-checkbox&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   422 &nbsp;
       
   423     <span class="br0">&#125;</span><span class="sy0">;</span>
       
   424 &nbsp;
       
   425 &nbsp;
       
   426     <span class="kw2">var</span> getCheckboxForLabel <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>label<span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   427 &nbsp;
       
   428         <span class="kw2">var</span> sID <span class="sy0">=</span> label.<span class="me1">getAttribute</span><span class="br0">&#40;</span>forAttr<span class="br0">&#41;</span><span class="sy0">,</span>
       
   429             oInput<span class="sy0">,</span>
       
   430             oCheckbox<span class="sy0">;</span>
       
   431 &nbsp;
       
   432         <span class="kw1">if</span> <span class="br0">&#40;</span>sID<span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   433 &nbsp;
       
   434             oInput <span class="sy0">=</span> Y.<span class="me1">one</span><span class="br0">&#40;</span><span class="st0">&quot;#&quot;</span> <span class="sy0">+</span> sID<span class="br0">&#41;</span><span class="sy0">;</span>
       
   435 &nbsp;
       
   436             <span class="kw1">if</span> <span class="br0">&#40;</span>oInput<span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   437                 oCheckbox <span class="sy0">=</span> getCheckbox<span class="br0">&#40;</span>oInput<span class="br0">&#41;</span><span class="sy0">;</span>
       
   438             <span class="br0">&#125;</span>
       
   439 &nbsp;
       
   440         <span class="br0">&#125;</span>
       
   441 &nbsp;
       
   442         <span class="kw1">return</span> oCheckbox<span class="sy0">;</span>
       
   443 &nbsp;
       
   444     <span class="br0">&#125;</span><span class="sy0">;</span>
       
   445 &nbsp;
       
   446 &nbsp;
       
   447     <span class="kw2">var</span> updateCheckedState <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>input<span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   448 &nbsp;
       
   449         <span class="kw2">var</span> oCheckbox <span class="sy0">=</span> getCheckbox<span class="br0">&#40;</span>input<span class="br0">&#41;</span><span class="sy0">;</span>
       
   450 &nbsp;
       
   451         <span class="kw1">if</span> <span class="br0">&#40;</span>input.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;checked&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   452             oCheckbox.<span class="me1">addClass</span><span class="br0">&#40;</span>sCheckboxCheckedClass<span class="br0">&#41;</span><span class="sy0">;</span>
       
   453         <span class="br0">&#125;</span>
       
   454         <span class="kw1">else</span> <span class="br0">&#123;</span>
       
   455             oCheckbox.<span class="me1">removeClass</span><span class="br0">&#40;</span>sCheckboxCheckedClass<span class="br0">&#41;</span><span class="sy0">;</span>
       
   456         <span class="br0">&#125;</span>
       
   457 &nbsp;
       
   458     <span class="br0">&#125;</span><span class="sy0">;</span>
       
   459 &nbsp;
       
   460 &nbsp;
       
   461     <span class="kw2">var</span> setActiveCheckbox <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>checkbox<span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   462 &nbsp;
       
   463         checkbox.<span class="me1">addClass</span><span class="br0">&#40;</span>sCheckboxActiveClass<span class="br0">&#41;</span><span class="sy0">;</span>
       
   464         oActiveCheckbox <span class="sy0">=</span> checkbox<span class="sy0">;</span>
       
   465 &nbsp;
       
   466     <span class="br0">&#125;</span><span class="sy0">;</span>
       
   467 &nbsp;
       
   468 &nbsp;
       
   469     <span class="kw2">var</span> clearActiveCheckbox <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   470 &nbsp;
       
   471         <span class="kw1">if</span> <span class="br0">&#40;</span>oActiveCheckbox<span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   472             oActiveCheckbox.<span class="me1">removeClass</span><span class="br0">&#40;</span>sCheckboxActiveClass<span class="br0">&#41;</span><span class="sy0">;</span>
       
   473             oActiveCheckbox <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">;</span>
       
   474         <span class="br0">&#125;</span>
       
   475 &nbsp;
       
   476     <span class="br0">&#125;</span><span class="sy0">;</span>
       
   477 &nbsp;
       
   478 &nbsp;
       
   479     <span class="kw2">var</span> onCheckboxMouseOver <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>event<span class="sy0">,</span> matchedEl<span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   480 &nbsp;
       
   481         <span class="kw1">if</span> <span class="br0">&#40;</span>oActiveCheckbox <span class="sy0">&amp;&amp;</span> oActiveCheckbox.<span class="me1">compareTo</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   482             oActiveCheckbox.<span class="me1">addClass</span><span class="br0">&#40;</span>sCheckboxActiveClass<span class="br0">&#41;</span><span class="sy0">;</span>
       
   483         <span class="br0">&#125;</span>
       
   484 &nbsp;
       
   485     <span class="br0">&#125;</span><span class="sy0">;</span>
       
   486 &nbsp;
       
   487 &nbsp;
       
   488     <span class="kw2">var</span> onCheckboxMouseOut <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>event<span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   489 &nbsp;
       
   490         <span class="kw1">this</span>.<span class="me1">removeClass</span><span class="br0">&#40;</span>sCheckboxActiveClass<span class="br0">&#41;</span><span class="sy0">;</span>
       
   491 &nbsp;
       
   492     <span class="br0">&#125;</span><span class="sy0">;</span>              
       
   493 &nbsp;
       
   494 &nbsp;
       
   495     <span class="kw2">var</span> onDocumentMouseUp <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>event<span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   496 &nbsp;
       
   497         <span class="kw2">var</span> oCheckbox<span class="sy0">;</span>
       
   498 &nbsp;
       
   499         <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span>bBlockDocumentMouseUp<span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   500 &nbsp;
       
   501             oCheckbox <span class="sy0">=</span> getCheckbox<span class="br0">&#40;</span>event.<span class="me1">target</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   502 &nbsp;
       
   503             <span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>oCheckbox <span class="sy0">&amp;&amp;</span> <span class="sy0">!</span>oCheckbox.<span class="me1">compareTo</span><span class="br0">&#40;</span>oActiveCheckbox<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy0">||</span> <span class="sy0">!</span>oCheckbox<span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   504                 clearActiveCheckbox<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   505             <span class="br0">&#125;</span>
       
   506 &nbsp;
       
   507         <span class="br0">&#125;</span>
       
   508 &nbsp;
       
   509         bBlockDocumentMouseUp <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">;</span>
       
   510 &nbsp;
       
   511     <span class="br0">&#125;</span><span class="sy0">;</span>
       
   512 &nbsp;
       
   513 &nbsp;
       
   514     <span class="kw2">var</span> onCheckboxFocus <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>event<span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   515 &nbsp;
       
   516         <span class="co1">//  Remove the focus style from any checkbox that might still have it</span>
       
   517 &nbsp;
       
   518         <span class="kw2">var</span> oCheckbox <span class="sy0">=</span> Y.<span class="me1">one</span><span class="br0">&#40;</span><span class="st0">&quot;#checkboxes&quot;</span><span class="br0">&#41;</span>.<span class="me1">one</span><span class="br0">&#40;</span><span class="st0">&quot;.yui-checkbox-focus&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   519 &nbsp;
       
   520         <span class="kw1">if</span> <span class="br0">&#40;</span>oCheckbox<span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   521             oCheckbox.<span class="me1">removeClass</span><span class="br0">&#40;</span>sCheckboxFocusClass<span class="br0">&#41;</span><span class="sy0">;</span>
       
   522         <span class="br0">&#125;</span>
       
   523 &nbsp;
       
   524         <span class="co1">//  Defer adding key-related and click event listeners until </span>
       
   525         <span class="co1">//  one of the checkboxes is initially focused.</span>
       
   526 &nbsp;
       
   527         <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span>bKeyListenersInitialized<span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   528             initKeyListeners.<span class="me1">call</span><span class="br0">&#40;</span>event.<span class="me1">container</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   529         <span class="br0">&#125;</span>
       
   530 &nbsp;
       
   531         <span class="kw2">var</span> oCheckbox <span class="sy0">=</span> getCheckbox<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   532 &nbsp;
       
   533         oCheckbox.<span class="me1">addClass</span><span class="br0">&#40;</span>sCheckboxFocusClass<span class="br0">&#41;</span><span class="sy0">;</span>
       
   534 &nbsp;
       
   535     <span class="br0">&#125;</span><span class="sy0">;</span>
       
   536 &nbsp;
       
   537 &nbsp;
       
   538     <span class="kw2">var</span> onCheckboxBlur <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>event<span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   539 &nbsp;
       
   540         <span class="kw1">if</span> <span class="br0">&#40;</span>bBlockBlur<span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   541             bBlockBlur <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">;</span>
       
   542             <span class="kw1">return</span><span class="sy0">;</span>
       
   543         <span class="br0">&#125;</span>
       
   544 &nbsp;
       
   545         <span class="kw2">var</span> oCheckbox <span class="sy0">=</span> getCheckbox<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   546 &nbsp;
       
   547         oCheckbox.<span class="me1">removeClass</span><span class="br0">&#40;</span>sCheckboxFocusClass<span class="br0">&#41;</span><span class="sy0">;</span>
       
   548 &nbsp;
       
   549         <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span>bBlockClearActive <span class="sy0">&amp;&amp;</span> oCheckbox.<span class="me1">compareTo</span><span class="br0">&#40;</span>oActiveCheckbox<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   550             clearActiveCheckbox<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   551         <span class="br0">&#125;</span>
       
   552 &nbsp;
       
   553         bBlockClearActive <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">;</span>
       
   554 &nbsp;
       
   555     <span class="br0">&#125;</span><span class="sy0">;</span>
       
   556 &nbsp;
       
   557 &nbsp;
       
   558     <span class="kw2">var</span> onCheckboxMouseDown <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>event<span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   559 &nbsp;
       
   560         <span class="co1">//  Defer adding mouse-related and click event listeners until </span>
       
   561         <span class="co1">//  the user mouses down on one of the checkboxes.</span>
       
   562 &nbsp;
       
   563         <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span>bMouseListenersInitialized<span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   564             initMouseListeners.<span class="me1">call</span><span class="br0">&#40;</span>event.<span class="me1">container</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   565         <span class="br0">&#125;</span>
       
   566 &nbsp;
       
   567         <span class="kw2">var</span> oCheckbox<span class="sy0">,</span>
       
   568             oInput<span class="sy0">;</span>
       
   569 &nbsp;
       
   570 &nbsp;
       
   571         <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;nodeName&quot;</span><span class="br0">&#41;</span>.<span class="me1">toLowerCase</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">===</span> <span class="st0">&quot;label&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   572 &nbsp;
       
   573             <span class="co1">//  If the target of the event was the checkbox's label element, the</span>
       
   574             <span class="co1">//  label will dispatch a click event to the checkbox, meaning the </span>
       
   575             <span class="co1">//  &quot;onCheckboxClick&quot; handler will be called twice.  For that reason</span>
       
   576             <span class="co1">//  it is necessary to block the &quot;onDocumentMouseUp&quot; handler from</span>
       
   577             <span class="co1">//  clearing the active state, so that a reference to the active  </span>
       
   578             <span class="co1">//  checkbox still exists the second time the &quot;onCheckboxClick&quot;</span>
       
   579             <span class="co1">//  handler is called.</span>
       
   580 &nbsp;
       
   581             bBlockDocumentMouseUp <span class="sy0">=</span> <span class="kw2">true</span><span class="sy0">;</span>
       
   582 &nbsp;
       
   583             <span class="co1">//  When the user clicks the label instead of the checkbox itself, </span>
       
   584             <span class="co1">//  the checkbox will be blurred if it has focus.  Since the </span>
       
   585             <span class="co1">//  &quot;onCheckboxBlur&quot; handler clears the active state it is </span>
       
   586             <span class="co1">//  necessary to block the clearing of the active state when the </span>
       
   587             <span class="co1">//  label is clicked instead of the checkbox itself.</span>
       
   588 &nbsp;
       
   589             bBlockClearActive <span class="sy0">=</span> <span class="kw2">true</span><span class="sy0">;</span>
       
   590 &nbsp;
       
   591             oCheckbox <span class="sy0">=</span> getCheckboxForLabel<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   592 &nbsp;
       
   593         <span class="br0">&#125;</span>
       
   594         <span class="kw1">else</span> <span class="br0">&#123;</span>
       
   595 &nbsp;
       
   596             oCheckbox <span class="sy0">=</span> <span class="kw1">this</span><span class="sy0">;</span>
       
   597 &nbsp;
       
   598         <span class="br0">&#125;</span>
       
   599 &nbsp;
       
   600         <span class="co1">//  Need to focus the input manually for two reasons:</span>
       
   601         <span class="co1">//  1)  Mousing down on a label in Webkit doesn't focus its  </span>
       
   602         <span class="co1">//      associated checkbox</span>
       
   603         <span class="co1">//  2)  By default checkboxes are focused when the user mouses </span>
       
   604         <span class="co1">//      down on them.  However, since the actually checkbox is </span>
       
   605         <span class="co1">//      obscurred by the two span elements that are used to </span>
       
   606         <span class="co1">//      style it, the checkbox wont' receive focus as it was </span>
       
   607         <span class="co1">//      never the actual target of the mousedown event.</span>
       
   608 &nbsp;
       
   609         oInput <span class="sy0">=</span> oCheckbox.<span class="me1">one</span><span class="br0">&#40;</span><span class="st0">&quot;input&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   610 &nbsp;
       
   611 &nbsp;
       
   612         <span class="co1">//  Calling Event.preventDefault won't block the blurring of the </span>
       
   613         <span class="co1">//  currently focused element in IE, so we'll use the &quot;bBlockBlur&quot;</span>
       
   614         <span class="co1">//  variable to stop the code in the blur event handler  </span>
       
   615         <span class="co1">//  from executing.</span>
       
   616 &nbsp;
       
   617         bBlockBlur <span class="sy0">=</span> <span class="br0">&#40;</span>UA.<span class="me1">ie</span> <span class="sy0">&amp;&amp;</span> oInput.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;checked&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   618 &nbsp;
       
   619 &nbsp;
       
   620         oInput.<span class="kw3">focus</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   621 &nbsp;
       
   622         setActiveCheckbox<span class="br0">&#40;</span>oCheckbox<span class="br0">&#41;</span><span class="sy0">;</span>
       
   623 &nbsp;
       
   624         <span class="co1">//  Need to call preventDefault because by default mousing down on</span>
       
   625         <span class="co1">//  an element will blur the element in the document that currently </span>
       
   626         <span class="co1">//  has focus--in this case, the input element that was </span>
       
   627         <span class="co1">//  just focused.</span>
       
   628 &nbsp;
       
   629         event.<span class="me1">preventDefault</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   630 &nbsp;
       
   631     <span class="br0">&#125;</span><span class="sy0">;</span>
       
   632 &nbsp;
       
   633 &nbsp;
       
   634     <span class="kw2">var</span> onCheckboxClick <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>event<span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   635 &nbsp;
       
   636         <span class="kw2">var</span> oInput<span class="sy0">;</span>
       
   637 &nbsp;
       
   638         <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">compareTo</span><span class="br0">&#40;</span>oActiveCheckbox<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   639 &nbsp;
       
   640             oInput <span class="sy0">=</span> <span class="kw1">this</span>.<span class="me1">one</span><span class="br0">&#40;</span><span class="st0">&quot;input&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   641 &nbsp;
       
   642             <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span>event.<span class="me1">target</span>.<span class="me1">compareTo</span><span class="br0">&#40;</span>oInput<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   643 &nbsp;
       
   644                 <span class="co1">//  If the click event was fired via the mouse the checked</span>
       
   645                 <span class="co1">//  state will have to be manually updated since the input </span>
       
   646                 <span class="co1">//  is hidden offscreen and therefore couldn't be the </span>
       
   647                 <span class="co1">//  target of the click.</span>
       
   648 &nbsp;
       
   649                 oInput.<span class="me1">set</span><span class="br0">&#40;</span><span class="st0">&quot;checked&quot;</span><span class="sy0">,</span> <span class="br0">&#40;</span><span class="sy0">!</span>oInput.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;checked&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   650 &nbsp;
       
   651             <span class="br0">&#125;</span>
       
   652 &nbsp;
       
   653             updateCheckedState<span class="br0">&#40;</span>oInput<span class="br0">&#41;</span><span class="sy0">;</span>
       
   654             clearActiveCheckbox<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   655 &nbsp;
       
   656         <span class="br0">&#125;</span>
       
   657 &nbsp;
       
   658     <span class="br0">&#125;</span><span class="sy0">;</span>
       
   659 &nbsp;
       
   660 &nbsp;
       
   661     <span class="kw2">var</span> onCheckboxKeyDown <span class="sy0">=</span> <span class="kw2">function</span> <span class="br0">&#40;</span>event<span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   662 &nbsp;
       
   663         <span class="co1">//  Style the checkbox as being active when the user presses the </span>
       
   664         <span class="co1">//  space bar</span>
       
   665 &nbsp;
       
   666         <span class="kw1">if</span> <span class="br0">&#40;</span>event.<span class="me1">keyCode</span> <span class="sy0">===</span> <span class="nu0">32</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
   667             setActiveCheckbox<span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   668         <span class="br0">&#125;</span>
       
   669 &nbsp;
       
   670     <span class="br0">&#125;</span><span class="sy0">;</span>
       
   671 &nbsp;
       
   672     Y.<span class="me1">all</span><span class="br0">&#40;</span><span class="st0">&quot;#checkboxes&gt;div&gt;span&quot;</span><span class="br0">&#41;</span>.<span class="me1">addClass</span><span class="br0">&#40;</span><span class="st0">&quot;yui-checkbox&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   673 &nbsp;
       
   674     <span class="co1">//  Remove the &quot;yui-checkboxes-loading&quot; class used to hide the </span>
       
   675     <span class="co1">//  checkboxes now that the checkboxes have been skinned.</span>
       
   676 &nbsp;
       
   677     Y.<span class="me1">one</span><span class="br0">&#40;</span><span class="st0">&quot;#checkboxes&quot;</span><span class="br0">&#41;</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;ownerDocument&quot;</span><span class="br0">&#41;</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;documentElement&quot;</span><span class="br0">&#41;</span>.<span class="me1">removeClass</span><span class="br0">&#40;</span><span class="st0">&quot;yui-checkboxes-loading&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   678 &nbsp;
       
   679     <span class="co1">//  Add the minimum number of event listeners needed to start, bind the </span>
       
   680     <span class="co1">//  rest when needed</span>
       
   681 &nbsp;
       
   682     Y.<span class="me1">delegate</span><span class="br0">&#40;</span><span class="st0">&quot;mousedown&quot;</span><span class="sy0">,</span> onCheckboxMouseDown<span class="sy0">,</span> <span class="st0">&quot;#checkboxes&quot;</span><span class="sy0">,</span> <span class="st0">&quot;.yui-checkbox,label&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   683     Y.<span class="me1">delegate</span><span class="br0">&#40;</span><span class="st0">&quot;focus&quot;</span><span class="sy0">,</span> onCheckboxFocus<span class="sy0">,</span> <span class="st0">&quot;#checkboxes&quot;</span><span class="sy0">,</span> <span class="st0">&quot;input[type=checkbox]&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
   684 &nbsp;
       
   685 <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div><textarea id="syntax3-plain">YUI().use("*", function(Y) {
       
   686 
       
   687     var UA = Y.UA,
       
   688         getClassName = Y.ClassNameManager.getClassName,
       
   689         sCheckboxFocusClass = getClassName("checkbox", "focus"),    // Create yui-checkbox-focus
       
   690         sCheckboxCheckedClass = getClassName("checkbox", "checked"),    // Create yui-checkbox-checked
       
   691         sCheckboxActiveClass = getClassName("checkbox", "active"),  // Create yui-checkbox-active
       
   692         bKeyListenersInitialized = false,
       
   693         bMouseListenersInitialized = false,
       
   694         forAttr = (UA.ie && UA.ie < 8) ? "htmlFor" : "for",
       
   695         bBlockDocumentMouseUp = false,
       
   696         bBlockClearActive = false,
       
   697         bBlockBlur = false,     
       
   698         oActiveCheckbox;            
       
   699 
       
   700 
       
   701     var initKeyListeners = function () {
       
   702 
       
   703         this.delegate("keydown", onCheckboxKeyDown, ".yui-checkbox");
       
   704         this.delegate("click", onCheckboxClick, ".yui-checkbox");
       
   705         this.delegate("blur", onCheckboxBlur, "input[type=checkbox]");
       
   706 
       
   707         bKeyListenersInitialized = true;
       
   708 
       
   709     };
       
   710 
       
   711 
       
   712     var initMouseListeners = function () {
       
   713 
       
   714         this.delegate("mouseover", onCheckboxMouseOver, ".yui-checkbox");
       
   715         this.delegate("mouseout", onCheckboxMouseOut, ".yui-checkbox-active");
       
   716         this.get("ownerDocument").on("mouseup", onDocumentMouseUp);
       
   717 
       
   718         bMouseListenersInitialized = true;
       
   719 
       
   720     };
       
   721 
       
   722 
       
   723     var getCheckbox = function (node) {
       
   724 
       
   725         return (node.hasClass("yui-checkbox") ? node : node.ancestor(".yui-checkbox"));
       
   726 
       
   727     };
       
   728 
       
   729 
       
   730     var getCheckboxForLabel = function (label) {
       
   731 
       
   732         var sID = label.getAttribute(forAttr),
       
   733             oInput,
       
   734             oCheckbox;
       
   735 
       
   736         if (sID) {
       
   737 
       
   738             oInput = Y.one("#" + sID);
       
   739 
       
   740             if (oInput) {
       
   741                 oCheckbox = getCheckbox(oInput);
       
   742             }
       
   743 
       
   744         }
       
   745 
       
   746         return oCheckbox;
       
   747 
       
   748     };
       
   749 
       
   750 
       
   751     var updateCheckedState = function (input) {
       
   752 
       
   753         var oCheckbox = getCheckbox(input);
       
   754 
       
   755         if (input.get("checked")) {
       
   756             oCheckbox.addClass(sCheckboxCheckedClass);
       
   757         }
       
   758         else {
       
   759             oCheckbox.removeClass(sCheckboxCheckedClass);
       
   760         }
       
   761 
       
   762     };
       
   763 
       
   764 
       
   765     var setActiveCheckbox = function (checkbox) {
       
   766 
       
   767         checkbox.addClass(sCheckboxActiveClass);
       
   768         oActiveCheckbox = checkbox;
       
   769 
       
   770     };
       
   771 
       
   772 
       
   773     var clearActiveCheckbox = function () {
       
   774 
       
   775         if (oActiveCheckbox) {
       
   776             oActiveCheckbox.removeClass(sCheckboxActiveClass);
       
   777             oActiveCheckbox = null;
       
   778         }
       
   779 
       
   780     };
       
   781 
       
   782 
       
   783     var onCheckboxMouseOver = function (event, matchedEl) {
       
   784 
       
   785         if (oActiveCheckbox && oActiveCheckbox.compareTo(this)) {
       
   786             oActiveCheckbox.addClass(sCheckboxActiveClass);
       
   787         }
       
   788 
       
   789     };
       
   790 
       
   791 
       
   792     var onCheckboxMouseOut = function (event) {
       
   793 
       
   794         this.removeClass(sCheckboxActiveClass);
       
   795 
       
   796     };              
       
   797 
       
   798 
       
   799     var onDocumentMouseUp = function (event) {
       
   800 
       
   801         var oCheckbox;
       
   802 
       
   803         if (!bBlockDocumentMouseUp) {
       
   804 
       
   805             oCheckbox = getCheckbox(event.target);
       
   806 
       
   807             if ((oCheckbox && !oCheckbox.compareTo(oActiveCheckbox)) || !oCheckbox) {
       
   808                 clearActiveCheckbox();
       
   809             }
       
   810 
       
   811         }
       
   812 
       
   813         bBlockDocumentMouseUp = false;
       
   814 
       
   815     };
       
   816 
       
   817 
       
   818     var onCheckboxFocus = function (event) {
       
   819 
       
   820         //  Remove the focus style from any checkbox that might still have it
       
   821 
       
   822         var oCheckbox = Y.one("#checkboxes").one(".yui-checkbox-focus");
       
   823 
       
   824         if (oCheckbox) {
       
   825             oCheckbox.removeClass(sCheckboxFocusClass);
       
   826         }
       
   827 
       
   828         //  Defer adding key-related and click event listeners until 
       
   829         //  one of the checkboxes is initially focused.
       
   830 
       
   831         if (!bKeyListenersInitialized) {
       
   832             initKeyListeners.call(event.container);
       
   833         }
       
   834 
       
   835         var oCheckbox = getCheckbox(this);
       
   836 
       
   837         oCheckbox.addClass(sCheckboxFocusClass);
       
   838 
       
   839     };
       
   840 
       
   841 
       
   842     var onCheckboxBlur = function (event) {
       
   843 
       
   844         if (bBlockBlur) {
       
   845             bBlockBlur = false;
       
   846             return;
       
   847         }
       
   848 
       
   849         var oCheckbox = getCheckbox(this);
       
   850 
       
   851         oCheckbox.removeClass(sCheckboxFocusClass);
       
   852 
       
   853         if (!bBlockClearActive && oCheckbox.compareTo(oActiveCheckbox)) {
       
   854             clearActiveCheckbox();
       
   855         }
       
   856 
       
   857         bBlockClearActive = false;
       
   858 
       
   859     };
       
   860 
       
   861 
       
   862     var onCheckboxMouseDown = function (event) {
       
   863 
       
   864         //  Defer adding mouse-related and click event listeners until 
       
   865         //  the user mouses down on one of the checkboxes.
       
   866 
       
   867         if (!bMouseListenersInitialized) {
       
   868             initMouseListeners.call(event.container);
       
   869         }
       
   870 
       
   871         var oCheckbox,
       
   872             oInput;
       
   873 
       
   874 
       
   875         if (this.get("nodeName").toLowerCase() === "label") {
       
   876 
       
   877             //  If the target of the event was the checkbox's label element, the
       
   878             //  label will dispatch a click event to the checkbox, meaning the 
       
   879             //  "onCheckboxClick" handler will be called twice.  For that reason
       
   880             //  it is necessary to block the "onDocumentMouseUp" handler from
       
   881             //  clearing the active state, so that a reference to the active  
       
   882             //  checkbox still exists the second time the "onCheckboxClick"
       
   883             //  handler is called.
       
   884 
       
   885             bBlockDocumentMouseUp = true;
       
   886 
       
   887             //  When the user clicks the label instead of the checkbox itself, 
       
   888             //  the checkbox will be blurred if it has focus.  Since the 
       
   889             //  "onCheckboxBlur" handler clears the active state it is 
       
   890             //  necessary to block the clearing of the active state when the 
       
   891             //  label is clicked instead of the checkbox itself.
       
   892 
       
   893             bBlockClearActive = true;
       
   894 
       
   895             oCheckbox = getCheckboxForLabel(this);
       
   896 
       
   897         }
       
   898         else {
       
   899 
       
   900             oCheckbox = this;
       
   901 
       
   902         }
       
   903 
       
   904         //  Need to focus the input manually for two reasons:
       
   905         //  1)  Mousing down on a label in Webkit doesn't focus its  
       
   906         //      associated checkbox
       
   907         //  2)  By default checkboxes are focused when the user mouses 
       
   908         //      down on them.  However, since the actually checkbox is 
       
   909         //      obscurred by the two span elements that are used to 
       
   910         //      style it, the checkbox wont' receive focus as it was 
       
   911         //      never the actual target of the mousedown event.
       
   912 
       
   913         oInput = oCheckbox.one("input");
       
   914 
       
   915 
       
   916         //  Calling Event.preventDefault won't block the blurring of the 
       
   917         //  currently focused element in IE, so we'll use the "bBlockBlur"
       
   918         //  variable to stop the code in the blur event handler  
       
   919         //  from executing.
       
   920 
       
   921         bBlockBlur = (UA.ie && oInput.get("checked"));
       
   922 
       
   923 
       
   924         oInput.focus();
       
   925 
       
   926         setActiveCheckbox(oCheckbox);
       
   927 
       
   928         //  Need to call preventDefault because by default mousing down on
       
   929         //  an element will blur the element in the document that currently 
       
   930         //  has focus--in this case, the input element that was 
       
   931         //  just focused.
       
   932 
       
   933         event.preventDefault();
       
   934 
       
   935     };
       
   936 
       
   937 
       
   938     var onCheckboxClick = function (event) {
       
   939 
       
   940         var oInput;
       
   941 
       
   942         if (this.compareTo(oActiveCheckbox)) {
       
   943 
       
   944             oInput = this.one("input");
       
   945 
       
   946             if (!event.target.compareTo(oInput)) {
       
   947 
       
   948                 //  If the click event was fired via the mouse the checked
       
   949                 //  state will have to be manually updated since the input 
       
   950                 //  is hidden offscreen and therefore couldn't be the 
       
   951                 //  target of the click.
       
   952 
       
   953                 oInput.set("checked", (!oInput.get("checked")));
       
   954 
       
   955             }
       
   956 
       
   957             updateCheckedState(oInput);
       
   958             clearActiveCheckbox();
       
   959 
       
   960         }
       
   961 
       
   962     };
       
   963 
       
   964 
       
   965     var onCheckboxKeyDown = function (event) {
       
   966 
       
   967         //  Style the checkbox as being active when the user presses the 
       
   968         //  space bar
       
   969 
       
   970         if (event.keyCode === 32) {
       
   971             setActiveCheckbox(this);
       
   972         }
       
   973 
       
   974     };
       
   975 
       
   976     Y.all("#checkboxes>div>span").addClass("yui-checkbox");
       
   977 
       
   978     //  Remove the "yui-checkboxes-loading" class used to hide the 
       
   979     //  checkboxes now that the checkboxes have been skinned.
       
   980 
       
   981     Y.one("#checkboxes").get("ownerDocument").get("documentElement").removeClass("yui-checkboxes-loading");
       
   982 
       
   983     //  Add the minimum number of event listeners needed to start, bind the 
       
   984     //  rest when needed
       
   985 
       
   986     Y.delegate("mousedown", onCheckboxMouseDown, "#checkboxes", ".yui-checkbox,label");
       
   987     Y.delegate("focus", onCheckboxFocus, "#checkboxes", "input[type=checkbox]");
       
   988 
       
   989 });</textarea></div>
       
   990 <h4>Progressive Enhancement</h4>
       
   991 <p>
       
   992 The markup above will be transformed using both CSS and JavaScript.  To account 
       
   993 for the scenario where the user has CSS enabled in their browser but JavaScript 
       
   994 is disabled, the CSS used to style the checkboxes will be loaded via JavaScript 
       
   995 using the YUI instance's <a href="http://developer.yahoo.com/yui/3/yui#loader">built-in Loader</a>.
       
   996 Additionally, a small block of JavaScript will be placed in the 
       
   997 <code>&#60;head&#62;</code> &#151; used to temporarily hide the markup 
       
   998 while the JavaScript and CSS are in the process of loading to prevent the user 
       
   999 from seeing a flash unstyled content.
       
  1000 </p>
       
  1001 <div id="syntax4" class="yui-syntax-highlight"><div class="numbers"><pre class="javascript" style="font-family:monospace;"><ol><li class="li1"><div class="de1">YUI<span class="br0">&#40;</span><span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    base<span class="sy0">:</span> <span class="st0">&quot;../../build/&quot;</span><span class="sy0">,</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">    <span class="co1">//  Load the stylesheet for the skinned checkboxes via JavaScript, </span></div></li><li class="li1"><div class="de1">    <span class="co1">//  since without JavaScript skinning of the checkboxes wouldn't </span></div></li><li class="li1"><div class="de1">    <span class="co1">//  be possible.</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">    modules<span class="sy0">:</span> <span class="br0">&#123;</span></div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="st0">&quot;checkboxcss&quot;</span><span class="sy0">:</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">            type<span class="sy0">:</span> <span class="st0">&quot;css&quot;</span><span class="sy0">,</span></div></li><li class="li1"><div class="de1">            fullpath<span class="sy0">:</span> <span class="st0">&quot;assets/checkbox.css&quot;</span></div></li><li class="li1"><div class="de1">        <span class="br0">&#125;</span><span class="sy0">,</span></div></li><li class="li2"><div class="de2">        <span class="st0">&quot;checkboxjs&quot;</span><span class="sy0">:</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">            type<span class="sy0">:</span> <span class="st0">&quot;js&quot;</span><span class="sy0">,</span></div></li><li class="li1"><div class="de1">            fullpath<span class="sy0">:</span> <span class="st0">&quot;assets/checkbox.js&quot;</span><span class="sy0">,</span></div></li><li class="li1"><div class="de1">            requires<span class="sy0">:</span> <span class="br0">&#91;</span><span class="st0">&quot;classnamemanager&quot;</span><span class="sy0">,</span> <span class="st0">&quot;event-focus&quot;</span><span class="sy0">,</span> <span class="st0">&quot;node-event-delegate&quot;</span><span class="sy0">,</span> <span class="st0">&quot;checkboxcss&quot;</span><span class="br0">&#93;</span></div></li><li class="li1"><div class="de1">        <span class="br0">&#125;</span>               </div></li><li class="li2"><div class="de2">&nbsp;</div></li><li class="li1"><div class="de1">    <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>.<span class="kw2">use</span><span class="br0">&#40;</span><span class="st0">&quot;checkboxjs&quot;</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span>Y<span class="sy0">,</span> result<span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">    <span class="co1">//  The callback supplied to use() will be executed regardless of</span></div></li><li class="li1"><div class="de1">    <span class="co1">//  whether the operation was successful or not.  The second parameter</span></div></li><li class="li1"><div class="de1">    <span class="co1">//  is a result object that has the status of the operation.  We can</span></div></li><li class="li1"><div class="de1">    <span class="co1">//  use this to try to recover from failures or timeouts.</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">    <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span>result.<span class="me1">success</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        Y.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;Load failure: &quot;</span> <span class="sy0">+</span> result.<span class="me1">msg</span><span class="sy0">,</span> <span class="st0">&quot;warn&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Example&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        <span class="co1">//  Show the checkboxes if the loader failed that way the original </span></div></li><li class="li2"><div class="de2">        <span class="co1">//  unskinned checkboxes will be visible so that the user can</span></div></li><li class="li1"><div class="de1">        <span class="co1">//  interact with them either way.</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1">        document.<span class="me1">documentElement</span>.<span class="me1">className</span> <span class="sy0">=</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li2"><div class="de2">    <span class="br0">&#125;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li><li class="li1"><div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li><li class="li1"><div class="de1">&nbsp;</div></li></ol></pre></div><div class="nonumbers"><pre class="javascript" style="font-family:monospace;">YUI<span class="br0">&#40;</span><span class="br0">&#123;</span>
       
  1002 &nbsp;
       
  1003     base<span class="sy0">:</span> <span class="st0">&quot;../../build/&quot;</span><span class="sy0">,</span>
       
  1004 &nbsp;
       
  1005     <span class="co1">//  Load the stylesheet for the skinned checkboxes via JavaScript, </span>
       
  1006     <span class="co1">//  since without JavaScript skinning of the checkboxes wouldn't </span>
       
  1007     <span class="co1">//  be possible.</span>
       
  1008 &nbsp;
       
  1009     modules<span class="sy0">:</span> <span class="br0">&#123;</span>
       
  1010 &nbsp;
       
  1011         <span class="st0">&quot;checkboxcss&quot;</span><span class="sy0">:</span> <span class="br0">&#123;</span>
       
  1012             type<span class="sy0">:</span> <span class="st0">&quot;css&quot;</span><span class="sy0">,</span>
       
  1013             fullpath<span class="sy0">:</span> <span class="st0">&quot;assets/checkbox.css&quot;</span>
       
  1014         <span class="br0">&#125;</span><span class="sy0">,</span>
       
  1015         <span class="st0">&quot;checkboxjs&quot;</span><span class="sy0">:</span> <span class="br0">&#123;</span>
       
  1016             type<span class="sy0">:</span> <span class="st0">&quot;js&quot;</span><span class="sy0">,</span>
       
  1017             fullpath<span class="sy0">:</span> <span class="st0">&quot;assets/checkbox.js&quot;</span><span class="sy0">,</span>
       
  1018             requires<span class="sy0">:</span> <span class="br0">&#91;</span><span class="st0">&quot;classnamemanager&quot;</span><span class="sy0">,</span> <span class="st0">&quot;event-focus&quot;</span><span class="sy0">,</span> <span class="st0">&quot;node-event-delegate&quot;</span><span class="sy0">,</span> <span class="st0">&quot;checkboxcss&quot;</span><span class="br0">&#93;</span>
       
  1019         <span class="br0">&#125;</span>               
       
  1020 &nbsp;
       
  1021     <span class="br0">&#125;</span>
       
  1022 &nbsp;
       
  1023 <span class="br0">&#125;</span><span class="br0">&#41;</span>.<span class="kw2">use</span><span class="br0">&#40;</span><span class="st0">&quot;checkboxjs&quot;</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span>Y<span class="sy0">,</span> result<span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
  1024 &nbsp;
       
  1025     <span class="co1">//  The callback supplied to use() will be executed regardless of</span>
       
  1026     <span class="co1">//  whether the operation was successful or not.  The second parameter</span>
       
  1027     <span class="co1">//  is a result object that has the status of the operation.  We can</span>
       
  1028     <span class="co1">//  use this to try to recover from failures or timeouts.</span>
       
  1029 &nbsp;
       
  1030     <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span>result.<span class="me1">success</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
       
  1031 &nbsp;
       
  1032         Y.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&quot;Load failure: &quot;</span> <span class="sy0">+</span> result.<span class="me1">msg</span><span class="sy0">,</span> <span class="st0">&quot;warn&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Example&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
  1033 &nbsp;
       
  1034         <span class="co1">//  Show the checkboxes if the loader failed that way the original </span>
       
  1035         <span class="co1">//  unskinned checkboxes will be visible so that the user can</span>
       
  1036         <span class="co1">//  interact with them either way.</span>
       
  1037 &nbsp;
       
  1038         document.<span class="me1">documentElement</span>.<span class="me1">className</span> <span class="sy0">=</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span>
       
  1039 &nbsp;
       
  1040     <span class="br0">&#125;</span>
       
  1041 &nbsp;
       
  1042 <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
       
  1043 &nbsp;</pre></div><textarea id="syntax4-plain">YUI({
       
  1044 
       
  1045     base: "../../build/",
       
  1046 
       
  1047     //  Load the stylesheet for the skinned checkboxes via JavaScript, 
       
  1048     //  since without JavaScript skinning of the checkboxes wouldn't 
       
  1049     //  be possible.
       
  1050     
       
  1051     modules: {
       
  1052 
       
  1053         "checkboxcss": {
       
  1054             type: "css",
       
  1055             fullpath: "assets/checkbox.css"
       
  1056         },
       
  1057         "checkboxjs": {
       
  1058             type: "js",
       
  1059             fullpath: "assets/checkbox.js",
       
  1060             requires: ["classnamemanager", "event-focus", "node-event-delegate", "checkboxcss"]
       
  1061         }               
       
  1062 
       
  1063     }
       
  1064 
       
  1065 }).use("checkboxjs", function(Y, result) {
       
  1066 
       
  1067     //  The callback supplied to use() will be executed regardless of
       
  1068     //  whether the operation was successful or not.  The second parameter
       
  1069     //  is a result object that has the status of the operation.  We can
       
  1070     //  use this to try to recover from failures or timeouts.
       
  1071 
       
  1072     if (!result.success) {
       
  1073 
       
  1074         Y.log("Load failure: " + result.msg, "warn", "Example");
       
  1075 
       
  1076         //  Show the checkboxes if the loader failed that way the original 
       
  1077         //  unskinned checkboxes will be visible so that the user can
       
  1078         //  interact with them either way.
       
  1079 
       
  1080         document.documentElement.className = "";
       
  1081 
       
  1082     }
       
  1083 
       
  1084 });
       
  1085 </textarea></div>				</div>
       
  1086 				<div class="yui-u sidebar">
       
  1087 					
       
  1088 				
       
  1089 					<div id="examples" class="mod box4">
       
  1090                         <div class="hd">
       
  1091 						<h4>
       
  1092     Event Examples:</h4>
       
  1093                         </div>
       
  1094 						<div class="bd">
       
  1095 							<ul>
       
  1096 								<li><a href='../event/event-simple.html'>Simple DOM Events</a></li><li><a href='../event/event-timing.html'>Using 'available', 'contentready', and 'domready'</a></li><li><a href='../event/event-ce.html'>Using Custom Events</a></li><li class='selected'><a href='../event/event-focus-blur.html'>Skinning via Progressive Enhancement using the Event Utility and the Loader</a></li><li><a href='../yui/yui-augment.html'>Compose Classes of Objects with <code>augment</code> (included with examples for The YUI Global Object)</a></li><li><a href='../node-focusmanager/node-focusmanager-3.html'>Accessible Menu Button (included with examples for Focus Manager Node Plugin)</a></li><li><a href='../node-focusmanager/node-focusmanager-2.html'>Accessible TabView (included with examples for Focus Manager Node Plugin)</a></li><li><a href='../attribute/attribute-event.html'>Attribute Change Events (included with examples for Attribute)</a></li><li><a href='../attribute/attribute-event-speeddate.html'>Attribute Event Based Speed Dating (included with examples for Attribute)</a></li><li><a href='../attribute/attribute-getset.html'>Attribute Getters, Setters and Validators (included with examples for Attribute)</a></li><li><a href='../widget/widget-extend.html'>Extending the base widget class (included with examples for Widget)</a></li><li><a href='../dd/photo-browser.html'>Photo Browser (included with examples for Drag &amp; Drop)</a></li>							</ul>
       
  1097 						</div>
       
  1098 					</div>
       
  1099 					
       
  1100 					<div class="mod box4">
       
  1101                         <div class="hd">
       
  1102 						<h4>More Event Resources:</h4>
       
  1103                         </div>
       
  1104                         <div class="bd">
       
  1105 						<ul>
       
  1106 							<!-- <li><a href="http://developer.yahoo.com/yui/event/">User's Guide</a> (external)</li> -->
       
  1107 <li><a href="../../api/module_event.html">API Documentation</a></li></ul>
       
  1108                         </div>
       
  1109 					</div>
       
  1110 			  </div>
       
  1111 		</div>
       
  1112 		
       
  1113 		</div>
       
  1114 	</div>
       
  1115 
       
  1116 
       
  1117 <div class="yui-b toc3" id="tocWrapper">
       
  1118 <!-- TABLE OF CONTENTS -->
       
  1119 <div id="toc">
       
  1120 	
       
  1121 <ul>
       
  1122 <li class="sect first">YUI 3 Resources</li><li class="item"><a title="YUI 3 -- Yahoo! User Interface (YUI) Library" href="http://developer.yahoo.com/yui/3/">YUI 3 Web Site</a></li><li class="item"><a title="Examples of every YUI utility and control in action" href="../../examples/">YUI 3 Examples</a></li><li class="item"><a title="Instantly searchable API documentation for the entire YUI library." href="../../api/">YUI 3 API Docs</a></li><li class="item"><a title="YUI 3 Dependency Configurator -- configure your custom YUI implementation" href="http://developer.yahoo.com/yui/3/configurator">YUI 3 Dependency Configurator</a></li><li class="item"><a title="The YUI 3 Forum on YUILibrary.com" href="http://yuilibrary.com/forum/viewforum.php?f=15">YUI 3 Forums (external)</a></li><li class="item"><a title="Found a bug or a missing feature? Let us know on YUILibrary.com." href="http://developer.yahoo.com/yui/articles/reportingbugs/">Bug Reports/Feature Requests</a></li><li class="item"><a title="YUI is free and open, offered under a BSD license." href="http://developer.yahoo.com/yui/license.html">YUI License</a></li><li class="item"><a title="Download and fork the YUI project on GitHub" href="http://github.com/yui">YUI on Github</a></li><li class="item"><a title="The Yahoo! User Interface Blog" href="http://yuiblog.com">YUI Blog (external)</a></li><li class="sect">YUI 3 Core - Examples</li><li class="item"><a title="YUI Global Object - Functional Examples" href="../../examples/yui/index.html">YUI Global Object</a></li><li class="selected "><a title="Event - Functional Examples" href="../../examples/event/index.html">Event</a></li><li class="item"><a title="Node - Functional Examples" href="../../examples/node/index.html">Node</a></li><li class="sect">YUI 3 Component Infrastructure - Examples</li><li class="item"><a title="Attribute - Functional Examples" href="../../examples/attribute/index.html">Attribute</a></li><li class="item"><a title="Plugin - Functional Examples" href="../../examples/plugin/index.html">Plugin <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="item"><a title="Widget - Functional Examples" href="../../examples/widget/index.html">Widget <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="sect">YUI 3 Utilities - Examples</li><li class="item"><a title="Animation - Functional Examples" href="../../examples/anim/index.html">Animation</a></li><li class="item"><a title="AsyncQueue - Functional Examples" href="../../examples/async-queue/index.html">AsyncQueue</a></li><li class="item"><a title="Browser History - Functional Examples" href="../../examples/history/index.html">Browser History</a></li><li class="item"><a title="Cache - Functional Examples" href="../../examples/cache/index.html">Cache</a></li><li class="item"><a title="Cookie - Functional Examples" href="../../examples/cookie/index.html">Cookie</a></li><li class="item"><a title="DataSchema - Functional Examples" href="../../examples/dataschema/index.html">DataSchema <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="item"><a title="DataSource - Functional Examples" href="../../examples/datasource/index.html">DataSource <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="item"><a title="DataType - Functional Examples" href="../../examples/datatype/index.html">DataType <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="item"><a title="Drag &amp; Drop - Functional Examples" href="../../examples/dd/index.html">Drag &amp; Drop</a></li><li class="item"><a title="Get - Functional Examples" href="../../examples/get/index.html">Get</a></li><li class="item"><a title="ImageLoader - Functional Examples" href="../../examples/imageloader/index.html">ImageLoader</a></li><li class="item"><a title="IO - Functional Examples" href="../../examples/io/index.html">IO</a></li><li class="item"><a title="JSON (JavaScript Object Notation) - Functional Examples" href="../../examples/json/index.html">JSON</a></li><li class="item"><a title="Stylesheet - Functional Examples" href="../../examples/stylesheet/index.html">Stylesheet</a></li><li class="sect">YUI 3 Widgets - Examples</li><li class="item"><a title="Overlay - Functional Examples" href="../../examples/overlay/index.html">Overlay <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="item"><a title="Slider - Functional Examples" href="../../examples/slider/index.html">Slider <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="sect">YUI 3 Node Plugins - Examples</li><li class="item"><a title="FocusManager Node Plugin - Functional Examples" href="../../examples/node-focusmanager/index.html">FocusManager Node Plugin <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="item"><a title="MenuNav Node Plugin - Functional Examples" href="../../examples/node-menunav/index.html">MenuNav Node Plugin <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="sect">YUI 3 CSS - Examples</li><li class="item"><a title="YUI CSS Reset - Functional Examples" href="../../examples/cssreset/index.html">CSS Reset</a></li><li class="item"><a title="YUI Fonts - Functional Examples" href="../../examples/cssfonts/index.html">CSS Fonts</a></li><li class="item"><a title="YUI Base - Functional Examples" href="../../examples/cssbase/index.html">CSS Base</a></li><li class="sect">YUI 3 Developer Tools - Examples</li><li class="item"><a title="Console - Functional Examples" href="../../examples/console/index.html">Console <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="item"><a title="Console Filters Plugin- Functional Examples" href="../../examples/console-filters/index.html">Plugin.ConsoleFilters <img src='http://l.yimg.com/a/i/not/beta_1.gif'></a></li><li class="item"><a title="Profiler - Functional Examples" href="../../examples/profiler/index.html">Profiler</a></li><li class="item"><a title="Test - Functional Examples" href="../../examples/test/index.html">Test</a></li><li class="sect">Other Useful YUI 3 Resources</li><li class="item"><a title="Answers to Frequently Asked Questions about the YUI Library" href="http://developer.yahoo.com/yui/articles/faq/">YUI FAQ (external)</a></li><li class="item"><a title="Yahoo!'s philosophy of Graded Browser Support" href="http://developer.yahoo.com/yui/articles/gbs/">Graded Browser Support (external)</a></li><li class="item"><a title="Videos and podcasts from the YUI Team and from the Yahoo! frontend engineering community." href="http://developer.yahoo.com/yui/theater/">YUI Theater (external)</a></li></ul>
       
  1123 </div>
       
  1124 </div>
       
  1125 	</div><!--closes bd-->
       
  1126 
       
  1127 	<div id="ft">
       
  1128         <p class="first">Copyright &copy; 2009 Yahoo! Inc. All rights reserved.</p>
       
  1129         <p><a href="http://privacy.yahoo.com/privacy/us/devel/index.html">Privacy Policy</a> - 
       
  1130             <a href="http://docs.yahoo.com/info/terms/">Terms of Service</a> - 
       
  1131             <a href="http://docs.yahoo.com/info/copyright/copyright.html">Copyright Policy</a> - 
       
  1132             <a href="http://careers.yahoo.com/">Job Openings</a></p>
       
  1133 	</div>
       
  1134 </div>
       
  1135 <script language="javascript"> 
       
  1136 var yuiConfig = {base:"../../build/", timeout: 10000};
       
  1137 </script>
       
  1138 <script src="../../assets/syntax.js"></script>
       
  1139 <script src="../../assets/dpSyntaxHighlighter.js"></script>
       
  1140 <script language="javascript"> 
       
  1141 dp.SyntaxHighlighter.HighlightAll('code'); 
       
  1142 </script>
       
  1143 </body>
       
  1144 </html>