src/cm/media/js/lib/yui/yui_3.0.0b1/examples/event/event-ce.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: Using Custom Events</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 	#fire {margin:1em;}
       
    21 	#log {
       
    22 		border:1px dotted #999999; background-color:#FFFFFF;
       
    23 	}
       
    24 	#log li {padding:5px;}
       
    25 	#log li highlight {color:#993300;}
       
    26 </style>
       
    27 </head>
       
    28 <body id="yahoo-com" class=" yui-skin-sam">
       
    29 <div id="custom-doc" class="yui-t2">
       
    30 <div id="hd">
       
    31 	<div id="ygunav">
       
    32 		<p>
       
    33             <em>
       
    34                 <a href="http://developer.yahoo.com/yui/3/">YUI 3.x Home</a> <i> - </i>	
       
    35             </em>
       
    36 		</p>
       
    37 		<form action="http://search.yahoo.com/search" id="sitesearchform">
       
    38             <input name="vs" type="hidden" value="developer.yahoo.com">
       
    39             <input name="vs" type="hidden" value="yuiblog.com">
       
    40 		    <div id="sitesearch">
       
    41 		    	<label for="searchinput">Site Search (YDN &amp; YUIBlog): </label>
       
    42 			    <input type="text" id="searchinput" name="p">
       
    43 			    <input type="submit" value="Search" id="searchsubmit" class="ygbt">
       
    44 		    </div>
       
    45 		</form>
       
    46     </div>
       
    47 	<div id="ygma"><a href="../../"><img src="../../assets/logo.gif"  border="0" width="200" height="93"></a></div>
       
    48 	<div id="pagetitle"><h1>YUI Library Examples: Event: Using Custom Events</h1></div>
       
    49 </div>
       
    50 <div id="bd">
       
    51 
       
    52 	<div id="bar-note"><p><strong>Note:</strong> This is YUI 3.x. Looking for <a href="http://developer.yahoo.com/yui/">YUI 2.x</a>?</p></div>
       
    53 
       
    54 	<div id="yui-main">
       
    55 		<div class="yui-b">
       
    56 		  <div class="yui-ge">
       
    57 			  <div class="yui-u first example" id="main">
       
    58 
       
    59 	<h2>Event: Using Custom Events</h2>
       
    60 
       
    61 	<div id="example" class="promo">
       
    62 	<p>
       
    63 	<p>The Custom Event framework is one of the principle communication mechanisms
       
    64 in YUI.  An object can be augmented with <code>EventTarget</code>, enabling it
       
    65 to be both a host and a target for Custom Events.  Custom Events fire from
       
    66 their host and optionally bubble up to one or more targets.  This allows you to
       
    67 make the interesting moments of your applications broadly available within a
       
    68 module, within a set of modules, or throughout a complex interface populated
       
    69 with rich elements.</p>
       
    70 
       
    71 <p>In this example, a simple Custom Event is illustrated:
       
    72 <code>testEvent</code>.  This Custom Event is hosted on a Publisher object and
       
    73 bubbles up to a BubbleTarget object.</p>
       
    74 
       
    75 <p><img src="assets/ce-example.gif" alt="An
       
    76 illustration of the relationship between the Custom Event, its host, and its
       
    77 Bubble Target."></p>
       
    78 
       
    79 <p>Custom Events, like DOM events, can be stopped
       
    80 (<code>stopPropagation</code>) and their default behavior can be suppressed
       
    81 (<code>preventDefault</code>).</p>
       
    82 	</p>	
       
    83 
       
    84 	<div class="module example-container ">
       
    85 			<div class="hd exampleHd">
       
    86 			<p class="newWindowButton yui-skin-sam">
       
    87                 <a href="event-ce_clean.html" target="_blank">View example in new window.</a>
       
    88             </p>
       
    89 		</div>		<div id="example-canvas" class="bd">
       
    90 
       
    91 		
       
    92 	<!--BEGIN SOURCE CODE FOR EXAMPLE =============================== -->
       
    93 	
       
    94 	<button id="fire" value="Fire">Fire publisher:testEvent</button> <br />
       
    95 <input type="checkbox" id="stopPropagation"> <label for="stopPropagation">Stop Propagation (testEvent won't bubble to the BubbleTarget.)</label><br />
       
    96 <input type="checkbox" id="preventDefault"> <label for="preventDefault">Prevent Default (testEvent's defaultFn won't fire.)</label>
       
    97 
       
    98 <ol id="log">
       
    99 	<li>Custom Event log messages will appear here.</li>
       
   100 </ol>
       
   101 
       
   102 <script language="javascript">
       
   103 
       
   104 //Create a YUI instance:
       
   105 YUI({base:"../../build/", timeout: 10000}).use("node",
       
   106 
       
   107 function(Y) {
       
   108 
       
   109     //Shortcut for our logging div:
       
   110     var logger = Y.Node.get("#log");
       
   111 
       
   112     //Our BubbleTarget object is an object to which our Custom Event
       
   113     //will be allowed to bubble.  It needs itself to be an EventTarget,
       
   114     //so we'll use augment to make it an EventTarget:
       
   115     var BubbleTarget = function() {
       
   116         Y.log("Host constructor executed.", "info", "example");
       
   117     }
       
   118     //Augment BubbleTarget to make it an EventTarget:
       
   119     Y.augment(BubbleTarget, Y.EventTarget);
       
   120 
       
   121     //Create an instance of BubbleTarget:
       
   122     var bubbleTarget = new BubbleTarget();
       
   123 
       
   124     //Now we'll subscribe to the "publisher:testEvent" -- note
       
   125     //that we can do this even before this event is published:
       
   126     bubbleTarget.subscribe("publisher:testEvent", function(e) {
       
   127         Y.log("publisher:testEvent fired on the BubbleTarget object.", "info", "example");
       
   128     });
       
   129 
       
   130     //Now we'll create the constructor for the Publisher, which 
       
   131     //is the direct host of our Custom Event.  It will also be an
       
   132     //EventTarget, so we'll extend it as well:
       
   133     var Publisher = function(bubbleTarget) {
       
   134 
       
   135         //We'll specify now that Custom Events hosted by Publisher
       
   136         //should bubble to the bubbleTarget instance passed into the
       
   137         //the Publisher's constructor:
       
   138         this.addTarget(bubbleTarget);
       
   139 
       
   140         //Here we publish the Custom Event.  Note that it's not
       
   141         //necessary to publish the event at all if you don't have
       
   142         //options you wish to configure -- firing the event or 
       
   143         //subscribing to it will create it on the fly if necessary:
       
   144         this.publish("publisher:testEvent",
       
   145             {
       
   146                 emitFacade: true,
       
   147                 //the defaultFn is what you want to have happen
       
   148                 //by default when no subscriber calls preventDefault:
       
   149                 defaultFn: function() {
       
   150                     Y.log("defaultFn: publisher:testEvent's defaultFn executed.", "info", "example");
       
   151                 },
       
   152                 //You can prevent the default function from firing by
       
   153                 //calling preventDefault from a listener (if the Custom
       
   154                 //Event's preventable option is set to true, as it is by
       
   155                 //default).  If the default is prevented, the preventedFn
       
   156                 //is called, allowing you to respond if necessary.
       
   157                 preventedFn: function() {
       
   158                     Y.log("preventedFn: A subscriber to publisher:testEvent called preventDefault().", "info", "example");			
       
   159                 },
       
   160                 //The stoppedFn is called if a subscriber calls stopPropagation or
       
   161                 //stopImmediatePropagation:
       
   162                 stoppedFn: function() {
       
   163                     Y.log("stoppedFn: A subscriber to publisher:testEvent called stopPropagation().", "info", "example");
       
   164                 }
       
   165             }
       
   166         );
       
   167         Y.log("Publisher constructor executed.");
       
   168     }
       
   169     //Augment Publisher to make it an EventTarget:
       
   170     Y.augment(Publisher, Y.EventTarget);
       
   171 
       
   172     //Create a Publisher instance:
       
   173     var p = new Publisher(bubbleTarget);
       
   174 
       
   175     //We've already subscribed to the event on the bubbleTarget, but
       
   176     //we can also subscribe to it here on the Publisher instance.
       
   177     //We'll see the event fire here before it bubbles up to the 
       
   178     //bubbleTarget:
       
   179     p.on("publisher:testEvent", function(e) {
       
   180         Y.log("publisher:testEvent subscriber fired on the publisher object.", "info", "example");
       
   181         if(Y.Node.get("#stopPropagation").get("checked")) {
       
   182             //we will stopPropagation on the Custom Event, preventing
       
   183             //it from bubbling to the bubbleTarget:
       
   184             e.stopPropagation();
       
   185         }
       
   186         
       
   187         if(Y.Node.get("#preventDefault").get("checked")) {
       
   188             //we will preventDefault on the Custom Event, preventing
       
   189             //the testEvent's defaultFn from firing:
       
   190             e.preventDefault();
       
   191         }
       
   192     });
       
   193 
       
   194     //We can tie our testEvent to an interface gesture -- the click of a
       
   195     //button, for example.
       
   196     Y.on("click", function(e) {
       
   197         //clear out the logger:
       
   198         logger.set("innerHTML", "");
       
   199         p.fire("publisher:testEvent");
       
   200     }, "#fire");
       
   201 
       
   202     //write out log messages to the page:
       
   203     Y.on("yui:log", function(e) {
       
   204         var s = logger.get("innerHTML");
       
   205         logger.set("innerHTML", s + "<li>" + e.msg + "</li>");
       
   206     });
       
   207 
       
   208 });
       
   209 </script>
       
   210 	
       
   211 	<!--END SOURCE CODE FOR EXAMPLE =============================== -->
       
   212 	
       
   213 		
       
   214 		</div>
       
   215 	</div>			
       
   216 	</div>
       
   217 		
       
   218 	<h2>Source Code</h2>
       
   219 
       
   220 <p>The full source code for this example follows.  Read through the comments and code to get an understanding of how you can make use of Custom Events in your own application development.</p>
       
   221 
       
   222 <textarea name="code" class="JScript" cols="60" rows="1">//Create a YUI instance:
       
   223 YUI().use('node', function(Y) {
       
   224 
       
   225     //Shortcut for our logging div:
       
   226     var logger = Y.Node.get("#log");
       
   227 
       
   228     //Our BubbleTarget object is an object to which our Custom Event
       
   229     //will be allowed to bubble.  It needs itself to be an EventTarget,
       
   230     //so we'll use augment to make it an EventTarget:
       
   231     var BubbleTarget = function() {
       
   232         Y.log("Host constructor executed.", "info", "example");
       
   233     }
       
   234     //Augment BubbleTarget to make it an EventTarget:
       
   235     Y.augment(BubbleTarget, Y.EventTarget);
       
   236 
       
   237     //Create an instance of BubbleTarget:
       
   238     var bubbleTarget = new BubbleTarget();
       
   239 
       
   240     //Now we'll subscribe to the "publisher:testEvent" -- note
       
   241     //that we can do this even before this event is published:
       
   242     bubbleTarget.on("publisher:testEvent", function(e) {
       
   243         Y.log("publisher:testEvent fired on the BubbleTarget object.", "info", "example");
       
   244     });
       
   245 
       
   246     //Now we'll create the constructor for the Publisher, which 
       
   247     //is the direct host of our Custom Event.  It will also be an
       
   248     //EventTarget, so we'll extend it as well:
       
   249     var Publisher = function(bubbleTarget) {
       
   250 
       
   251         //We'll specify now that Custom Events hosted by Publisher
       
   252         //should bubble to the bubbleTarget instance passed into the
       
   253         //the Publisher's constructor:
       
   254         this.addTarget(bubbleTarget);
       
   255 
       
   256         //Here we publish the Custom Event.  Note that it's not
       
   257         //necessary to publish the event at all if you don't have
       
   258         //options you wish to configure -- firing the event or 
       
   259         //subscribing to it will create it on the fly if necessary:
       
   260         this.publish("publisher:testEvent",
       
   261             {
       
   262                 emitFacade: true,
       
   263                 //the defaultFn is what you want to have happen
       
   264                 //by default when no subscriber calls preventDefault:
       
   265                 defaultFn: function() {
       
   266                     Y.log("defaultFn: publisher:testEvent's defaultFn executed.", "info", "example");
       
   267                 },
       
   268                 //You can prevent the default function from firing by
       
   269                 //calling preventDefault from a listener (if the Custom
       
   270                 //Event's preventable option is set to true, as it is by
       
   271                 //default).  If the default is prevented, the preventedFn
       
   272                 //is called, allowing you to respond if necessary.
       
   273                 preventedFn: function() {
       
   274                     Y.log("preventedFn: A subscriber to publisher:testEvent called preventDefault().", "info", "example");			
       
   275                 },
       
   276                 //The stoppedFn is called if a subscriber calls stopPropagation or
       
   277                 //stopImmediatePropagation:
       
   278                 stoppedFn: function() {
       
   279                     Y.log("stoppedFn: A subscriber to publisher:testEvent called stopPropagation().", "info", "example");
       
   280                 }
       
   281             }
       
   282         );
       
   283         Y.log("Publisher constructor executed.");
       
   284     }
       
   285     //Augment Publisher to make it an EventTarget:
       
   286     Y.augment(Publisher, Y.EventTarget);
       
   287 
       
   288     //Create a Publisher instance:
       
   289     var p = new Publisher(bubbleTarget);
       
   290 
       
   291     //We've already subscribed to the event on the bubbleTarget, but
       
   292     //we can also subscribe to it here on the Publisher instance.
       
   293     //We'll see the event fire here before it bubbles up to the 
       
   294     //bubbleTarget:
       
   295     p.on("publisher:testEvent", function(e) {
       
   296         Y.log("publisher:testEvent subscriber fired on the publisher object.", "info", "example");
       
   297         if(Y.Node.get("#stopPropagation").get("checked")) {
       
   298             //we will stopPropagation on the Custom Event, preventing
       
   299             //it from bubbling to the bubbleTarget:
       
   300             e.stopPropagation();
       
   301         }
       
   302         
       
   303         if(Y.Node.get("#preventDefault").get("checked")) {
       
   304             //we will preventDefault on the Custom Event, preventing
       
   305             //the testEvent's defaultFn from firing:
       
   306             e.preventDefault();
       
   307         }
       
   308     });
       
   309 
       
   310     //We can tie our testEvent to an interface gesture -- the click of a
       
   311     //button, for example.
       
   312     Y.on("click", function(e) {
       
   313         //clear out the logger:
       
   314         logger.set("innerHTML", "");
       
   315         p.fire("publisher:testEvent");
       
   316     }, "#fire");
       
   317 
       
   318     //write out log messages to the page:
       
   319     Y.on("yui:log", function(e) {
       
   320         var s = logger.get("innerHTML");
       
   321         logger.set("innerHTML", s + "<li>" + e.msg + "</li>");
       
   322     });
       
   323 
       
   324 });</textarea>
       
   325 				</div>
       
   326 				<div class="yui-u sidebar">
       
   327 					
       
   328 				
       
   329 					<div id="examples" class="mod box4">
       
   330                         <div class="hd">
       
   331 						<h4>
       
   332     Event Examples:</h4>
       
   333                         </div>
       
   334 						<div class="bd">
       
   335 							<ul>
       
   336 								<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 class='selected'><a href='../event/event-ce.html'>Using Custom Events</a></li><li><a href='../event/event-focus-blur.html'>Using the 'focus' and 'blur' custom events</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'>Change Events (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='../attribute/attribute-getset.html'>Getters, Setters and Validators (included with examples for Attribute)</a></li><li><a href='../dd/photo-browser.html'>Photo Browser (included with examples for Drag &amp; Drop)</a></li>							</ul>
       
   337 						</div>
       
   338 					</div>
       
   339 					
       
   340 					<div class="mod box4">
       
   341                         <div class="hd">
       
   342 						<h4>More Event Resources:</h4>
       
   343                         </div>
       
   344                         <div class="bd">
       
   345 						<ul>
       
   346 							<!-- <li><a href="http://developer.yahoo.com/yui/event/">User's Guide</a> (external)</li> -->
       
   347 						<li><a href="../../api/module_event.html">API Documentation</a></li>
       
   348 </ul>
       
   349                         </div>
       
   350 					</div>
       
   351 			  </div>
       
   352 		</div>
       
   353 		
       
   354 		</div>
       
   355 	</div>
       
   356 
       
   357 
       
   358 <div class="yui-b toc3" id="tocWrapper">
       
   359 <!-- TABLE OF CONTENTS -->
       
   360 <div id="toc">
       
   361 	
       
   362 <ul>
       
   363 <li class="sect first">YUI 3.x Project</li><li class="item"><a title="The Yahoo! User Interface (YUI) Library, 3.x Branch, " href="http://developer.yahoo.com/yui/3/">YUI 3 Web Site (external)</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="The YUI Library can be downloaded from SourceForge" href="http://sourceforge.net/projects/yui/">YUI 3 on Sourceforge (external)</a></li><li class="item"><a title="YUI is free and open, offered under a BSD license." href="http://developer.yahoo.com/yui/3/license.html">YUI License (external)</a></li><li class="sect">YUI 3 Core - Examples</li><li class="item"><a title="YUI (Global Prerequisite) - Functional Examples" href="../../examples/yui/index.html">YUI (Global Prerequisite)</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</a></li><li class="item"><a title="Widget - Functional Examples" href="../../examples/widget/index.html">Widget</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="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</a></li><li class="item"><a title="DataSource - Functional Examples" href="../../examples/datasource/index.html">DataSource</a></li><li class="item"><a title="DataType - Functional Examples" href="../../examples/datatype/index.html">DataType</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="History - Functional Examples" href="../../examples/history/index.html">History</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="Queue - Functional Examples" href="../../examples/queue/index.html">Queue</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</a></li><li class="item"><a title="Slider - Functional Examples" href="../../examples/slider/index.html">Slider</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</a></li><li class="item"><a title="MenuNav Node Plugin - Functional Examples" href="../../examples/node-menunav/index.html">MenuNav Node Plugin</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</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">The YUI Community</li><li class="item"><a title="The Yahoo! User Interface Blog" href="http://yuiblog.com">YUI Blog (external)</a></li><li class="item"><a title="The Yahoo! Group YDN-JavaScript hosts the YUI community forum" href="http://tech.groups.yahoo.com/group/ydn-javascript/">YUI Forum (external)</a></li><li class="item"><a title="The Yahoo! Group yui3 is dedicated to the 3.x branch of the Yahoo! User Interface (YUI) Library." href="http://tech.groups.yahoo.com/group/yui3/">YUI 3 Forum (external)</a></li><li class="item"><a title="YUI is used by Yahoo! and by hundreds of other sites, including many you know and love." href="/yui/poweredby/">YUI Sightings (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><li class="sect">YUI Articles on the YUI Website</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="Reporting Bugs and Making Feature Requests for YUI Components" href="http://developer.yahoo.com/yui/articles/reportingbugs/">Bug Reports/Feature Requests (external)</a></li><li class="item"><a title="Serve YUI source files from Yahoo! -- free, fast, and simple" href="http://developer.yahoo.com/yui/3/articles/hosting/">Serving YUI Files from Yahoo! (external)</a></li></ul>
       
   364 </div>
       
   365 </div>
       
   366 	</div><!--closes bd-->
       
   367 
       
   368 	<div id="ft">
       
   369         <p class="first">Copyright &copy; 2009 Yahoo! Inc. All rights reserved.</p>
       
   370         <p><a href="http://privacy.yahoo.com/privacy/us/devel/index.html">Privacy Policy</a> - 
       
   371             <a href="http://docs.yahoo.com/info/terms/">Terms of Service</a> - 
       
   372             <a href="http://docs.yahoo.com/info/copyright/copyright.html">Copyright Policy</a> - 
       
   373             <a href="http://careers.yahoo.com/">Job Openings</a></p>
       
   374 	</div>
       
   375 </div>
       
   376 <script src="../../assets/dpSyntaxHighlighter.js"></script>
       
   377 <script language="javascript"> 
       
   378 dp.SyntaxHighlighter.HighlightAll('code'); 
       
   379 </script>
       
   380 </body>
       
   381 </html>