You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2012/02/24 09:46:18 UTC

[5/9] WICKET-4410 The datepicker components stops popup in Chrome 17.

http://git-wip-us.apache.org/repos/asf/wicket/blob/e4194d49/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/event/event.js
----------------------------------------------------------------------
diff --git a/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/event/event.js b/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/event/event.js
index 65f553a..3b5c86d 100644
--- a/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/event/event.js
+++ b/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/event/event.js
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2010, Yahoo! Inc. All rights reserved.
+Copyright (c) 2011, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.com/yui/license.html
-version: 2.8.2r1
+version: 2.9.0
 */
 
 /**
@@ -12,17 +12,17 @@ version: 2.8.2r1
  * @param {String}  type The type of event, which is passed to the callback
  *                  when the event fires
  * @param {Object}  context The context the event will fire from.  "this" will
- *                  refer to this object in the callback.  Default value: 
+ *                  refer to this object in the callback.  Default value:
  *                  the window object.  The listener can override this.
  * @param {boolean} silent pass true to prevent the event from writing to
  *                  the debugsystem
  * @param {int}     signature the signature that the custom event subscriber
- *                  will receive. YAHOO.util.CustomEvent.LIST or 
+ *                  will receive. YAHOO.util.CustomEvent.LIST or
  *                  YAHOO.util.CustomEvent.FLAT.  The default is
  *                  YAHOO.util.CustomEvent.LIST.
- * @param fireOnce {boolean} If configured to fire once, the custom event 
- * will only notify subscribers a single time regardless of how many times 
- * the event is fired.  In addition, new subscribers will be notified 
+ * @param fireOnce {boolean} If configured to fire once, the custom event
+ * will only notify subscribers a single time regardless of how many times
+ * the event is fired.  In addition, new subscribers will be notified
  * immediately if the event has already been fired.
  * @namespace YAHOO.util
  * @class CustomEvent
@@ -45,7 +45,7 @@ YAHOO.util.CustomEvent = function(type, context, silent, signature, fireOnce) {
     this.scope = context || window;
 
     /**
-     * By default all custom events are logged in the debug build. Set silent to true 
+     * By default all custom events are logged in the debug build. Set silent to true
      * to disable debug output for this event.
      * @property silent
      * @type boolean
@@ -81,9 +81,9 @@ YAHOO.util.CustomEvent = function(type, context, silent, signature, fireOnce) {
 
     /**
      * Custom events support two styles of arguments provided to the event
-     * subscribers.  
+     * subscribers.
      * <ul>
-     * <li>YAHOO.util.CustomEvent.LIST: 
+     * <li>YAHOO.util.CustomEvent.LIST:
      *   <ul>
      *   <li>param1: event name</li>
      *   <li>param2: array of arguments sent to fire</li>
@@ -115,7 +115,7 @@ YAHOO.util.CustomEvent = function(type, context, silent, signature, fireOnce) {
 
     var onsubscribeType = "_YUICEOnSubscribe";
 
-    // Only add subscribe events for events that are not generated by 
+    // Only add subscribe events for events that are not generated by
     // CustomEvent
     if (type !== onsubscribeType) {
 
@@ -123,21 +123,21 @@ YAHOO.util.CustomEvent = function(type, context, silent, signature, fireOnce) {
          * Custom events provide a custom event that fires whenever there is
          * a new subscriber to the event.  This provides an opportunity to
          * handle the case where there is a non-repeating event that has
-         * already fired has a new subscriber.  
+         * already fired has a new subscriber.
          *
          * @event subscribeEvent
          * @type YAHOO.util.CustomEvent
          * @param fn {Function} The function to execute
-         * @param obj <Object> An object to be passed along when the event fires. 
+         * @param obj <Object> An object to be passed along when the event fires.
          * Defaults to the custom event.
-         * @param override <boolean|Object> If true, the obj passed in becomes the 
-         * execution context of the listener. If an object, that object becomes 
+         * @param override <boolean|Object> If true, the obj passed in becomes the
+         * execution context of the listener. If an object, that object becomes
          * the execution context. Defaults to the custom event.
          */
-        this.subscribeEvent = 
+        this.subscribeEvent =
                 new YAHOO.util.CustomEvent(onsubscribeType, this, true);
 
-    } 
+    }
 
 
     /**
@@ -162,7 +162,7 @@ YAHOO.util.CustomEvent.LIST = 0;
 
 /**
  * Subscriber listener sigature constant.  The FLAT type returns two
- * parameters: the first argument passed to fire and the optional 
+ * parameters: the first argument passed to fire and the optional
  * custom object
  * @property YAHOO.util.CustomEvent.FLAT
  * @static
@@ -176,9 +176,12 @@ YAHOO.util.CustomEvent.prototype = {
      * Subscribes the caller to this event
      * @method subscribe
      * @param {Function} fn        The function to execute
-     * @param {Object}   obj       An object to be passed along when the event fires.
-     * overrideContext <boolean|Object> If true, the obj passed in becomes the execution 
-     * context of the listener. If an object, that object becomes the execution context.
+     * @param {Object}   obj       An object to be passed along when the event
+     * fires.
+     * @param {boolean|Object} overrideContext If true, the obj passed in
+     * becomes the execution.
+     * context of the listener. If an object, that object becomes the execution
+     * context.
      */
     subscribe: function(fn, obj, overrideContext) {
 
@@ -231,18 +234,18 @@ throw new Error("Invalid callback for subscriber to '" + this.type + "'");
 
     /**
      * Notifies the subscribers.  The callback functions will be executed
-     * from the context specified when the event was created, and with the 
+     * from the context specified when the event was created, and with the
      * following parameters:
      *   <ul>
      *   <li>The type of event</li>
      *   <li>All of the arguments fire() was executed with as an array</li>
-     *   <li>The custom object (if any) that was passed into the subscribe() 
+     *   <li>The custom object (if any) that was passed into the subscribe()
      *       method</li>
      *   </ul>
-     * @method fire 
-     * @param {Object*} arguments an arbitrary set of parameters to pass to 
+     * @method fire
+     * @param {Object*} arguments an arbitrary set of parameters to pass to
      *                            the handler.
-     * @return {boolean} false if one of the subscribers returned false, 
+     * @return {boolean} false if one of the subscribers returned false,
      *                   true otherwise
      */
     fire: function() {
@@ -278,7 +281,7 @@ throw new Error("Invalid callback for subscriber to '" + this.type + "'");
 
         for (i=0; i<len; ++i) {
             var s = subs[i];
-            if (!s) {
+            if (!s || !s.fn) {
                 rebuild=true;
             } else {
 
@@ -368,7 +371,7 @@ throw new Error("Invalid callback for subscriber to '" + this.type + "'");
      * @method toString
      */
     toString: function() {
-         return "CustomEvent: " + "'" + this.type  + "', " + 
+         return "CustomEvent: " + "'" + this.type  + "', " +
              "context: " + this.scope;
 
     }
@@ -406,7 +409,7 @@ YAHOO.util.Subscriber = function(fn, obj, overrideContext) {
      * The default execution context for the event listener is defined when the
      * event is created (usually the object which contains the event).
      * By setting overrideContext to true, the execution context becomes the custom
-     * object passed in by the subscriber.  If overrideContext is an object, that 
+     * object passed in by the subscriber.  If overrideContext is an object, that
      * object becomes the context.
      * @property overrideContext
      * @type boolean|object
@@ -441,7 +444,7 @@ YAHOO.util.Subscriber.prototype.getScope = function(defaultScope) {
  * @method contains
  * @param {Function} fn the function to execute
  * @param {Object} obj an object to be passed along when the event fires
- * @return {boolean} true if the supplied arguments match this 
+ * @return {boolean} true if the supplied arguments match this
  *                   subscriber's signature.
  */
 YAHOO.util.Subscriber.prototype.contains = function(fn, obj) {
@@ -456,7 +459,7 @@ YAHOO.util.Subscriber.prototype.contains = function(fn, obj) {
  * @method toString
  */
 YAHOO.util.Subscriber.prototype.toString = function() {
-    return "Subscriber { obj: " + this.obj  + 
+    return "Subscriber { obj: " + this.obj  +
            ", overrideContext: " +  (this.overrideContext || "no") + " }";
 };
 
@@ -540,7 +543,7 @@ if (!YAHOO.util.Event) {
          * @private
          */
         counter = 0,
-        
+
         /**
          * Normalized keycodes for webkit/safari
          * @property webkitKeymap
@@ -560,12 +563,12 @@ if (!YAHOO.util.Event) {
                        // this case, even though the shiftKey modifier is set)
         },
 
-		isIE = YAHOO.env.ua.ie,
+        isIE = YAHOO.env.ua.ie,
 
         // String constants used by the addFocusListener and removeFocusListener methods
-		
-       	FOCUSIN = "focusin",
-       	FOCUSOUT = "focusout";
+
+        FOCUSIN = "focusin",
+        FOCUSOUT = "focusout";
 
         return {
 
@@ -628,7 +631,7 @@ if (!YAHOO.util.Event) {
             WFN: 3,
 
             /**
-             * Object passed in by the user that will be returned as a 
+             * Object passed in by the user that will be returned as a
              * parameter to the callback, int constant.  Specific to
              * unload listeners
              * @property OBJ
@@ -673,7 +676,7 @@ if (!YAHOO.util.Event) {
              * @static
              * @final
              */
-			CAPTURE: 7,
+            CAPTURE: 7,
 
             /**
              * addListener/removeListener can throw errors in unexpected scenarios.
@@ -693,7 +696,7 @@ if (!YAHOO.util.Event) {
              * @deprecated use YAHOO.env.ua.webkit
              */
             isSafari: YAHOO.env.ua.webkit,
-            
+
             /**
              * webkit version
              * @property webkit
@@ -703,9 +706,9 @@ if (!YAHOO.util.Event) {
              * @deprecated use YAHOO.env.ua.webkit
              */
             webkit: YAHOO.env.ua.webkit,
-            
+
             /**
-             * IE detection 
+             * IE detection
              * @property isIE
              * @private
              * @static
@@ -736,10 +739,10 @@ if (!YAHOO.util.Event) {
              * @static
              * @private
              */
-			_specialTypes: {
-				focusin: (isIE ? "focusin" : "focus"),
-				focusout: (isIE ? "focusout" : "blur")
-			},
+            _specialTypes: {
+                focusin: (isIE ? "focusin" : "focus"),
+                focusout: (isIE ? "focusout" : "blur")
+            },
 
 
             /**
@@ -805,10 +808,10 @@ if (!YAHOO.util.Event) {
                 var a = (YAHOO.lang.isString(id)) ? [id] : id;
 
                 for (var i=0; i<a.length; i=i+1) {
-                    onAvailStack.push({id:         a[i], 
-                                       fn:         fn, 
-                                       obj:        obj, 
-                                       overrideContext:   overrideContext, 
+                    onAvailStack.push({id:         a[i],
+                                       fn:         fn,
+                                       obj:        obj,
+                                       overrideContext:   overrideContext,
                                        checkReady: checkContent });
                 }
 
@@ -847,12 +850,12 @@ if (!YAHOO.util.Event) {
              * fired.   @todo the DOMContentReady event does not fire when the
              * script is dynamically injected into the page.  This means the
              * DOMReady custom event will never fire in FireFox or Opera when the
-             * library is injected.  It _will_ fire in Safari, and the IE 
+             * library is injected.  It _will_ fire in Safari, and the IE
              * implementation would allow for us to fire it if the defered script
              * is not available.  We want this to behave the same in all browsers.
-             * Is there a way to identify when the script has been injected 
-             * instead of included inline?  Is there a way to know whether the 
-             * window onload event has fired without having had a listener attached 
+             * Is there a way to identify when the script has been injected
+             * instead of included inline?  Is there a way to know whether the
+             * window onload event has fired without having had a listener attached
              * to it when it did so?
              *
              * <p>The callback is a CustomEvent, so the signature is:</p>
@@ -884,12 +887,12 @@ if (!YAHOO.util.Event) {
              *
              * @method _addListener
              *
-             * @param {String|HTMLElement|Array|NodeList} el An id, an element 
-             *  reference, or a collection of ids and/or elements to assign the 
+             * @param {String|HTMLElement|Array|NodeList} el An id, an element
+             *  reference, or a collection of ids and/or elements to assign the
              *  listener to.
              * @param {String}   sType     The type of event to append
              * @param {Function} fn        The method the event invokes
-             * @param {Object}   obj    An arbitrary object that will be 
+             * @param {Object}   obj    An arbitrary object that will be
              *                             passed as a parameter to the handler
              * @param {Boolean|object}  overrideContext  If true, the obj passed in becomes
              *                             the execution context of the listener. If an
@@ -897,7 +900,7 @@ if (!YAHOO.util.Event) {
              *                             context.
              * @param {boolen}      capture capture or bubble phase
              * @return {Boolean} True if the action was successful or defered,
-             *                        false if one or more of the elements 
+             *                        false if one or more of the elements
              *                        could not have the listener attached,
              *                        or if the operation throws an exception.
              * @private
@@ -913,22 +916,22 @@ if (!YAHOO.util.Event) {
                 if ( this._isValidCollection(el)) {
                     var ok = true;
                     for (var i=0,len=el.length; i<len; ++i) {
-                        ok = this.on(el[i], 
-                                       sType, 
-                                       fn, 
-                                       obj, 
+                        ok = this.on(el[i],
+                                       sType,
+                                       fn,
+                                       obj,
                                        overrideContext) && ok;
                     }
                     return ok;
 
                 } else if (YAHOO.lang.isString(el)) {
                     var oEl = this.getEl(el);
-                    // If the el argument is a string, we assume it is 
+                    // If the el argument is a string, we assume it is
                     // actually the id of the element.  If the page is loaded
-                    // we convert el to the actual element, otherwise we 
+                    // we convert el to the actual element, otherwise we
                     // defer attaching the event until onload event fires
 
-                    // check to see if we need to delay hooking up the event 
+                    // check to see if we need to delay hooking up the event
                     // until after the page loads.
                     if (oEl) {
                         el = oEl;
@@ -942,14 +945,14 @@ if (!YAHOO.util.Event) {
                     }
                 }
 
-                // Element should be an html element or an array if we get 
+                // Element should be an html element or an array if we get
                 // here.
                 if (!el) {
                     return false;
                 }
 
-                // we need to make sure we fire registered unload events 
-                // prior to automatically unhooking them.  So we hang on to 
+                // we need to make sure we fire registered unload events
+                // prior to automatically unhooking them.  So we hang on to
                 // these instead of attaching them to the window and fire the
                 // handles explicitly during our one unload event.
                 if ("unload" == sType && obj !== this) {
@@ -974,7 +977,7 @@ if (!YAHOO.util.Event) {
                 // wrap the function so we can return the obj object when
                 // the event fires;
                 var wrappedFn = function(e) {
-                        return fn.call(context, YAHOO.util.Event.getEvent(e, el), 
+                        return fn.call(context, YAHOO.util.Event.getEvent(e, el),
                                 obj);
                     };
 
@@ -994,24 +997,24 @@ if (!YAHOO.util.Event) {
                 }
 
                 return true;
-                
+
             },
 
             /**
-             * Checks to see if the type requested is a special type 
-			 * (as defined by the _specialTypes hash), and (if so) returns 
-			 * the special type name.
+             * Checks to see if the type requested is a special type
+             * (as defined by the _specialTypes hash), and (if so) returns
+             * the special type name.
              *
              * @method _getType
              *
              * @param {String}   sType     The type to look up
              * @private
              */
-			_getType: function (type) {
-			
-				return this._specialTypes[type] || type;
-				
-			},
+            _getType: function (type) {
+
+                return this._specialTypes[type] || type;
+
+            },
 
 
             /**
@@ -1019,129 +1022,129 @@ if (!YAHOO.util.Event) {
              *
              * @method addListener
              *
-             * @param {String|HTMLElement|Array|NodeList} el An id, an element 
-             *  reference, or a collection of ids and/or elements to assign the 
+             * @param {String|HTMLElement|Array|NodeList} el An id, an element
+             *  reference, or a collection of ids and/or elements to assign the
              *  listener to.
              * @param {String}   sType     The type of event to append
              * @param {Function} fn        The method the event invokes
-             * @param {Object}   obj    An arbitrary object that will be 
+             * @param {Object}   obj    An arbitrary object that will be
              *                             passed as a parameter to the handler
              * @param {Boolean|object}  overrideContext  If true, the obj passed in becomes
              *                             the execution context of the listener. If an
              *                             object, this object becomes the execution
              *                             context.
              * @return {Boolean} True if the action was successful or defered,
-             *                        false if one or more of the elements 
+             *                        false if one or more of the elements
              *                        could not have the listener attached,
              *                        or if the operation throws an exception.
              * @static
              */
             addListener: function (el, sType, fn, obj, overrideContext) {
 
-				var capture = ((sType == FOCUSIN || sType == FOCUSOUT) && !YAHOO.env.ua.ie) ? true : false;
+                var capture = ((sType == FOCUSIN || sType == FOCUSOUT) && !YAHOO.env.ua.ie) ? true : false;
 
                 return this._addListener(el, this._getType(sType), fn, obj, overrideContext, capture);
 
-        	},
+            },
 
 
             /**
-             * Attaches a focusin event listener to the specified element for 
- 			 * the purpose of listening for the focus event on the element's 
+             * Attaches a focusin event listener to the specified element for
+             * the purpose of listening for the focus event on the element's
              * descendants.
              * @method addFocusListener
              *
-             * @param {String|HTMLElement|Array|NodeList} el An id, an element 
-             *  reference, or a collection of ids and/or elements to assign the 
+             * @param {String|HTMLElement|Array|NodeList} el An id, an element
+             *  reference, or a collection of ids and/or elements to assign the
              *  listener to.
              * @param {Function} fn        The method the event invokes
-             * @param {Object}   obj    An arbitrary object that will be 
+             * @param {Object}   obj    An arbitrary object that will be
              *                             passed as a parameter to the handler
              * @param {Boolean|object}  overrideContext  If true, the obj passed in becomes
              *                             the execution context of the listener. If an
              *                             object, this object becomes the execution
              *                             context.
              * @return {Boolean} True if the action was successful or defered,
-             *                        false if one or more of the elements 
+             *                        false if one or more of the elements
              *                        could not have the listener attached,
              *                        or if the operation throws an exception.
              * @static
-			* @deprecated use YAHOO.util.Event.on and specify "focusin" as the event type.
+            * @deprecated use YAHOO.util.Event.on and specify "focusin" as the event type.
              */
             addFocusListener: function (el, fn, obj, overrideContext) {
                 return this.on(el, FOCUSIN, fn, obj, overrideContext);
-            },          
+            },
 
 
             /**
-             * Removes a focusin event listener to the specified element for 
-			 * the purpose of listening for the focus event on the element's 
+             * Removes a focusin event listener to the specified element for
+             * the purpose of listening for the focus event on the element's
              * descendants.
              *
              * @method removeFocusListener
              *
-             * @param {String|HTMLElement|Array|NodeList} el An id, an element 
+             * @param {String|HTMLElement|Array|NodeList} el An id, an element
              *  reference, or a collection of ids and/or elements to remove
              *  the listener from.
              * @param {Function} fn the method the event invokes.  If fn is
-             *  undefined, then all event handlers for the type of event are 
+             *  undefined, then all event handlers for the type of event are
              *  removed.
-             * @return {boolean} true if the unbind was successful, false 
+             * @return {boolean} true if the unbind was successful, false
              *  otherwise.
              * @static
-         	 * @deprecated use YAHOO.util.Event.removeListener and specify "focusin" as the event type.
+             * @deprecated use YAHOO.util.Event.removeListener and specify "focusin" as the event type.
              */
-            removeFocusListener: function (el, fn) { 
+            removeFocusListener: function (el, fn) {
                 return this.removeListener(el, FOCUSIN, fn);
             },
 
             /**
-             * Attaches a focusout event listener to the specified element for 
-			 * the purpose of listening for the blur event on the element's 
-			 * descendants.
+             * Attaches a focusout event listener to the specified element for
+             * the purpose of listening for the blur event on the element's
+             * descendants.
              *
              * @method addBlurListener
              *
-             * @param {String|HTMLElement|Array|NodeList} el An id, an element 
-             *  reference, or a collection of ids and/or elements to assign the 
+             * @param {String|HTMLElement|Array|NodeList} el An id, an element
+             *  reference, or a collection of ids and/or elements to assign the
              *  listener to.
              * @param {Function} fn        The method the event invokes
-             * @param {Object}   obj    An arbitrary object that will be 
+             * @param {Object}   obj    An arbitrary object that will be
              *                             passed as a parameter to the handler
              * @param {Boolean|object}  overrideContext  If true, the obj passed in becomes
              *                             the execution context of the listener. If an
              *                             object, this object becomes the execution
              *                             context.
              * @return {Boolean} True if the action was successful or defered,
-             *                        false if one or more of the elements 
+             *                        false if one or more of the elements
              *                        could not have the listener attached,
              *                        or if the operation throws an exception.
              * @static
-         	 * @deprecated use YAHOO.util.Event.on and specify "focusout" as the event type.
+             * @deprecated use YAHOO.util.Event.on and specify "focusout" as the event type.
              */
             addBlurListener: function (el, fn, obj, overrideContext) {
                 return this.on(el, FOCUSOUT, fn, obj, overrideContext);
-            },          
+            },
 
             /**
-             * Removes a focusout event listener to the specified element for 
-			 * the purpose of listening for the blur event on the element's 
-			 * descendants.
+             * Removes a focusout event listener to the specified element for
+             * the purpose of listening for the blur event on the element's
+             * descendants.
              *
              * @method removeBlurListener
              *
-             * @param {String|HTMLElement|Array|NodeList} el An id, an element 
+             * @param {String|HTMLElement|Array|NodeList} el An id, an element
              *  reference, or a collection of ids and/or elements to remove
              *  the listener from.
              * @param {Function} fn the method the event invokes.  If fn is
-             *  undefined, then all event handlers for the type of event are 
+             *  undefined, then all event handlers for the type of event are
              *  removed.
-             * @return {boolean} true if the unbind was successful, false 
+             * @return {boolean} true if the unbind was successful, false
              *  otherwise.
              * @static
-         	 * @deprecated use YAHOO.util.Event.removeListener and specify "focusout" as the event type.
+             * @deprecated use YAHOO.util.Event.removeListener and specify "focusout" as the event type.
              */
-            removeBlurListener: function (el, fn) { 
+            removeBlurListener: function (el, fn) {
                 return this.removeListener(el, FOCUSOUT, fn);
             },
 
@@ -1150,21 +1153,21 @@ if (!YAHOO.util.Event) {
              *
              * @method removeListener
              *
-             * @param {String|HTMLElement|Array|NodeList} el An id, an element 
+             * @param {String|HTMLElement|Array|NodeList} el An id, an element
              *  reference, or a collection of ids and/or elements to remove
              *  the listener from.
              * @param {String} sType the type of event to remove.
              * @param {Function} fn the method the event invokes.  If fn is
-             *  undefined, then all event handlers for the type of event are 
+             *  undefined, then all event handlers for the type of event are
              *  removed.
-             * @return {boolean} true if the unbind was successful, false 
+             * @return {boolean} true if the unbind was successful, false
              *  otherwise.
              * @static
              */
             removeListener: function(el, sType, fn) {
                 var i, len, li;
 
-				sType = this._getType(sType);
+                sType = this._getType(sType);
 
                 // The el argument can be a string
                 if (typeof el == "string") {
@@ -1187,9 +1190,9 @@ if (!YAHOO.util.Event) {
 
                     for (i=unloadListeners.length-1; i>-1; i--) {
                         li = unloadListeners[i];
-                        if (li && 
-                            li[0] == el && 
-                            li[1] == sType && 
+                        if (li &&
+                            li[0] == el &&
+                            li[1] == sType &&
                             li[2] == fn) {
                                 unloadListeners.splice(i, 1);
                                 // unloadListeners[i]=null;
@@ -1206,7 +1209,7 @@ if (!YAHOO.util.Event) {
                 // the method signature because it was tempting users to
                 // try and take advantage of it, which is not possible.
                 var index = arguments[3];
-  
+
                 if ("undefined" === typeof index) {
                     index = this._getCacheIndex(listeners, el, sType, fn);
                 }
@@ -1220,7 +1223,7 @@ if (!YAHOO.util.Event) {
                 }
 
 
-				var bCapture = cacheItem[this.CAPTURE] === true ? true : false;
+                var bCapture = cacheItem[this.CAPTURE] === true ? true : false;
 
                 try {
                     this._simpleRemove(el, sType, cacheItem[this.WFN], bCapture);
@@ -1246,7 +1249,7 @@ if (!YAHOO.util.Event) {
              * @method getTarget
              * @param {Event} ev the event
              * @param {boolean} resolveTextNode when set to true the target's
-             *                  parent will be returned if the target is a 
+             *                  parent will be returned if the target is a
              *                  text node.  @deprecated, the text node is
              *                  now resolved automatically
              * @return {HTMLElement} the event's target
@@ -1261,6 +1264,15 @@ if (!YAHOO.util.Event) {
              * In some cases, some browsers will return a text node inside
              * the actual element that was targeted.  This normalizes the
              * return value for getTarget and getRelatedTarget.
+             *
+             * If accessing a property of the node throws an error, this is
+             * probably the anonymous div wrapper Gecko adds inside text
+             * nodes.  This likely will only occur when attempting to access
+             * the relatedTarget.  In this case, we now return null because
+             * the anonymous div is completely useless and we do not know
+             * what the related target was because we can't even get to
+             * the element's parent node.
+             *
              * @method resolveTextNode
              * @param {HTMLElement} node node to resolve
              * @return {HTMLElement} the normized node
@@ -1271,7 +1283,9 @@ if (!YAHOO.util.Event) {
                     if (n && 3 == n.nodeType) {
                         return n.parentNode;
                     }
-                } catch(e) { }
+                } catch(e) {
+                    return null;
+                }
 
                 return n;
             },
@@ -1329,7 +1343,7 @@ if (!YAHOO.util.Event) {
             },
 
             /**
-             * Returns the event's related target 
+             * Returns the event's related target
              * @method getRelatedTarget
              * @param {Event} ev the event
              * @return {HTMLElement} the event's relatedTarget
@@ -1361,7 +1375,7 @@ if (!YAHOO.util.Event) {
                     var t = new Date().getTime();
                     try {
                         ev.time = t;
-                    } catch(ex) { 
+                    } catch(ex) {
                         this.lastError = ex;
                         return t;
                     }
@@ -1408,7 +1422,7 @@ if (!YAHOO.util.Event) {
                     ev.returnValue = false;
                 }
             },
-             
+
             /**
              * Finds the event in the window object, the caller's arguments, or
              * in the arguments of another method in the callstack.  This is
@@ -1418,7 +1432,7 @@ if (!YAHOO.util.Event) {
              * @method getEvent
              * @param {Event} e the event parameter from the handler
              * @param {HTMLElement} boundEl the element the listener is attached to
-             * @return {Event} the event 
+             * @return {Event} the event
              * @static
              */
             getEvent: function(e, boundEl) {
@@ -1465,9 +1479,9 @@ if (!YAHOO.util.Event) {
             _getCacheIndex: function(a, el, sType, fn) {
                 for (var i=0, l=a.length; i<l; i=i+1) {
                     var li = a[i];
-                    if ( li                 && 
-                         li[this.FN] == fn  && 
-                         li[this.EL] == el  && 
+                    if ( li                 &&
+                         li[this.FN] == fn  &&
+                         li[this.EL] == el  &&
                          li[this.TYPE] == sType ) {
                         return i;
                     }
@@ -1477,7 +1491,7 @@ if (!YAHOO.util.Event) {
             },
 
             /**
-             * Generates an unique ID for the element if it does not already 
+             * Generates an unique ID for the element if it does not already
              * have one.
              * @method generateId
              * @param el the element to create the id for
@@ -1499,9 +1513,9 @@ if (!YAHOO.util.Event) {
 
             /**
              * We want to be able to use getElementsByTagName as a collection
-             * to attach a group of events to.  Unfortunately, different 
+             * to attach a group of events to.  Unfortunately, different
              * browsers return different types of collections.  This function
-             * tests to determine if the object is array-like.  It will also 
+             * tests to determine if the object is array-like.  It will also
              * fail if the object is an array, but is empty.
              * @method _isValidCollection
              * @param o the object to test
@@ -1534,7 +1548,7 @@ if (!YAHOO.util.Event) {
             elCache: {},
 
             /**
-             * We cache elements bound by id because when the unload event 
+             * We cache elements bound by id because when the unload event
              * fires, we can no longer use document.getElementById
              * @method getEl
              * @static
@@ -1605,8 +1619,8 @@ if (!YAHOO.util.Event) {
             },
 
             /**
-             * Polling function that runs before the onload event fires, 
-             * attempting to attach to DOM Nodes as soon as they are 
+             * Polling function that runs before the onload event fires,
+             * attempting to attach to DOM Nodes as soon as they are
              * available
              * @method _tryPreloadAttach
              * @static
@@ -1620,7 +1634,7 @@ if (!YAHOO.util.Event) {
                         // clearInterval(this._interval);
                         this._interval.cancel();
                         this._interval = null;
-                    } 
+                    }
                     return;
                 }
 
@@ -1641,9 +1655,9 @@ if (!YAHOO.util.Event) {
                 this.locked = true;
 
 
-                // keep trying until after the page is loaded.  We need to 
-                // check the page load state prior to trying to bind the 
-                // elements so that we can be certain all elements have been 
+                // keep trying until after the page is loaded.  We need to
+                // check the page load state prior to trying to bind the
+                // elements so that we can be certain all elements have been
                 // tested appropriately
                 var tryAgain = !loadComplete;
                 if (!tryAgain) {
@@ -1687,7 +1701,7 @@ if (!YAHOO.util.Event) {
                         }
                     }
                 }
-                
+
                 // make sure onContentReady fires after onAvailable
                 for (i=0, len=ready.length; i<len; i=i+1) {
                     item = ready[i];
@@ -1751,7 +1765,7 @@ if (!YAHOO.util.Event) {
              * Returns all listeners attached to the given element via addListener.
              * Optionally, you can specify a specific type of event to return.
              * @method getListeners
-             * @param el {HTMLElement|string} the element or element id to inspect 
+             * @param el {HTMLElement|string} the element or element id to inspect
              * @param sType {string} optional type of listener to return. If
              * left out, all listeners will be returned
              * @return {Object} the listener. Contains the following fields:
@@ -1762,7 +1776,7 @@ if (!YAHOO.util.Event) {
              * &nbsp;&nbsp;scope: (boolean)  the derived context based on the adjust parameter
              * &nbsp;&nbsp;index:  (int)      its position in the Event util listener cache
              * @static
-             */           
+             */
             getListeners: function(el, sType) {
                 var results=[], searchLists;
                 if (!sType) {
@@ -1770,7 +1784,7 @@ if (!YAHOO.util.Event) {
                 } else if (sType === "unload") {
                     searchLists = [unloadListeners];
                 } else {
-					sType = this._getType(sType);
+                    sType = this._getType(sType);
                     searchLists = [listeners];
                 }
 
@@ -1781,7 +1795,7 @@ if (!YAHOO.util.Event) {
                     if (searchList) {
                         for (var i=0,len=searchList.length; i<len ; ++i) {
                             var l = searchList[i];
-                            if ( l  && l[this.EL] === oEl && 
+                            if ( l  && l[this.EL] === oEl &&
                                     (!sType || sType === l[this.TYPE]) ) {
                                 results.push({
                                     type:   l[this.TYPE],
@@ -1800,7 +1814,7 @@ if (!YAHOO.util.Event) {
             },
 
             /**
-             * Removes all listeners registered by pe.event.  Called 
+             * Removes all listeners registered by pe.event.  Called
              * automatically during the unload event.
              * @method _unload
              * @static
@@ -1815,15 +1829,17 @@ if (!YAHOO.util.Event) {
                 for (i=0, len=unloadListeners.length; i<len; ++i) {
                     l = ul[i];
                     if (l) {
-                        context = window;
-                        if (l[EU.ADJ_SCOPE]) {
-                            if (l[EU.ADJ_SCOPE] === true) {
-                                context = l[EU.UNLOAD_OBJ];
-                            } else {
-                                context = l[EU.ADJ_SCOPE];
+                        try {
+                            context = window;
+                            if (l[EU.ADJ_SCOPE]) {
+                                if (l[EU.ADJ_SCOPE] === true) {
+                                    context = l[EU.UNLOAD_OBJ];
+                                } else {
+                                    context = l[EU.ADJ_SCOPE];
+                                }
                             }
-                        }
-                        l[EU.FN].call(context, EU.getEvent(e, l[EU.EL]), l[EU.UNLOAD_OBJ] );
+                            l[EU.FN].call(context, EU.getEvent(e, l[EU.EL]), l[EU.UNLOAD_OBJ] );
+                        } catch(e1) {}
                         ul[i] = null;
                     }
                 }
@@ -1841,13 +1857,18 @@ if (!YAHOO.util.Event) {
                     for (j=listeners.length-1; j>-1; j--) {
                         l = listeners[j];
                         if (l) {
-                            EU.removeListener(l[EU.EL], l[EU.TYPE], l[EU.FN], j);
-                        } 
+                            try {
+                                EU.removeListener(l[EU.EL], l[EU.TYPE], l[EU.FN], j);
+                            } catch(e2) {}
+                        }
                     }
                     l=null;
                 }
 
-                EU._simpleRemove(window, "unload", EU._unload);
+                try {
+                    EU._simpleRemove(window, "unload", EU._unload);
+                    EU._simpleRemove(window, "load", EU._load);
+                } catch(e3) {}
 
             },
 
@@ -1872,7 +1893,7 @@ if (!YAHOO.util.Event) {
             },
 
             /**
-             * Returns the scrollTop and scrollLeft.  Used to calculate the 
+             * Returns the scrollTop and scrollLeft.  Used to calculate the
              * pageX and pageY in Internet Explorer
              * @method _getScroll
              * @static
@@ -1888,7 +1909,7 @@ if (!YAHOO.util.Event) {
                     return [0, 0];
                 }
             },
-            
+
             /**
              * Used by old versions of CustomEvent, restored for backwards
              * compatibility
@@ -1956,9 +1977,25 @@ if (!YAHOO.util.Event) {
         var EU = YAHOO.util.Event;
 
         /**
-         * YAHOO.util.Event.on is an alias for addListener
+         * Appends an event handler.  This is an alias for <code>addListener</code>
+         *
          * @method on
-         * @see addListener
+         *
+         * @param {String|HTMLElement|Array|NodeList} el An id, an element
+         *  reference, or a collection of ids and/or elements to assign the
+         *  listener to.
+         * @param {String}   sType     The type of event to append
+         * @param {Function} fn        The method the event invokes
+         * @param {Object}   obj    An arbitrary object that will be
+         *                             passed as a parameter to the handler
+         * @param {Boolean|object}  overrideContext  If true, the obj passed in becomes
+         *                             the execution context of the listener. If an
+         *                             object, this object becomes the execution
+         *                             context.
+         * @return {Boolean} True if the action was successful or defered,
+         *                        false if one or more of the elements
+         *                        could not have the listener attached,
+         *                        or if the operation throws an exception.
          * @static
          */
         EU.on = EU.addListener;
@@ -1968,7 +2005,7 @@ if (!YAHOO.util.Event) {
          * @method onFocus
          * @see addFocusListener
          * @static
-		 * @deprecated use YAHOO.util.Event.on and specify "focusin" as the event type.
+         * @deprecated use YAHOO.util.Event.on and specify "focusin" as the event type.
          */
         EU.onFocus = EU.addFocusListener;
 
@@ -1977,8 +2014,8 @@ if (!YAHOO.util.Event) {
          * @method onBlur
          * @see addBlurListener
          * @static
-		 * @deprecated use YAHOO.util.Event.on and specify "focusout" as the event type.
-         */     
+         * @deprecated use YAHOO.util.Event.on and specify "focusout" as the event type.
+         */
         EU.onBlur = EU.addBlurListener;
 
 /*! DOMReady: based on work by: Dean Edwards/John Resig/Matthias Miller/Diego Perini */
@@ -1997,13 +2034,13 @@ if (!YAHOO.util.Event) {
                 };
             } else {
 
-                // Process onAvailable/onContentReady items when the 
+                // Process onAvailable/onContentReady items when the
                 // DOM is ready.
                 YAHOO.util.Event.onDOMReady(
                         YAHOO.util.Event._tryPreloadAttach,
                         YAHOO.util.Event, true);
-                
-                var n = document.createElement('p');  
+
+                var n = document.createElement('p');
 
                 EU._dri = setInterval(function() {
                     try {
@@ -2013,9 +2050,9 @@ if (!YAHOO.util.Event) {
                         EU._dri = null;
                         EU._ready();
                         n = null;
-                    } catch (ex) { 
+                    } catch (ex) {
                     }
-                }, EU.POLL_INTERVAL); 
+                }, EU.POLL_INTERVAL);
             }
 
         // The document's readyState in Safari currently will
@@ -2029,7 +2066,7 @@ if (!YAHOO.util.Event) {
                     EU._dri = null;
                     EU._ready();
                 }
-            }, EU.POLL_INTERVAL); 
+            }, EU.POLL_INTERVAL);
 
         // FireFox and Opera: These browsers provide a event for this
         // moment.  The latest WebKit releases now support this event.
@@ -2048,8 +2085,8 @@ if (!YAHOO.util.Event) {
 
 }
 /**
- * EventProvider is designed to be used with YAHOO.augment to wrap 
- * CustomEvents in an interface that allows events to be subscribed to 
+ * EventProvider is designed to be used with YAHOO.augment to wrap
+ * CustomEvents in an interface that allows events to be subscribed to
  * and fired by name.  This makes it possible for implementing code to
  * subscribe to an event that either has not been created yet, or will
  * not be created at all.
@@ -2075,16 +2112,16 @@ YAHOO.util.EventProvider.prototype = {
      * @private
      */
     __yui_subscribers: null,
-    
+
     /**
      * Subscribe to a CustomEvent by event type
      *
      * @method subscribe
      * @param p_type     {string}   the type, or name of the event
      * @param p_fn       {function} the function to exectute when the event fires
-     * @param p_obj      {Object}   An object to be passed along when the event 
+     * @param p_obj      {Object}   An object to be passed along when the event
      *                              fires
-     * @param overrideContext {boolean}  If true, the obj passed in becomes the 
+     * @param overrideContext {boolean}  If true, the obj passed in becomes the
      *                              execution scope of the listener
      */
     subscribe: function(p_type, p_fn, p_obj, overrideContext) {
@@ -2140,7 +2177,7 @@ YAHOO.util.EventProvider.prototype = {
 
         return false;
     },
-    
+
     /**
      * Removes all listeners from the specified event.  If the event type
      * is not specified, all listeners from all hosted custom events will
@@ -2155,7 +2192,7 @@ YAHOO.util.EventProvider.prototype = {
     /**
      * Creates a new custom event of the specified type.  If a custom event
      * by that name already exists, it will not be re-created.  In either
-     * case the custom event is returned. 
+     * case the custom event is returned.
      *
      * @method createEvent
      *
@@ -2223,19 +2260,19 @@ YAHOO.util.EventProvider.prototype = {
 
    /**
      * Fire a custom event by name.  The callback functions will be executed
-     * from the scope specified when the event was created, and with the 
+     * from the scope specified when the event was created, and with the
      * following parameters:
      *   <ul>
      *   <li>The first argument fire() was executed with</li>
-     *   <li>The custom object (if any) that was passed into the subscribe() 
+     *   <li>The custom object (if any) that was passed into the subscribe()
      *       method</li>
      *   </ul>
      * @method fireEvent
      * @param p_type    {string}  the type, or name of the event
-     * @param arguments {Object*} an arbitrary set of parameters to pass to 
+     * @param arguments {Object*} an arbitrary set of parameters to pass to
      *                            the handler.
      * @return {boolean} the return value from CustomEvent.fire
-     *                   
+     *
      */
     fireEvent: function(p_type) {
 
@@ -2280,19 +2317,19 @@ YAHOO.util.EventProvider.prototype = {
 * @namespace YAHOO.util
 * @class KeyListener
 * @constructor
-* @param {HTMLElement} attachTo The element or element ID to which the key 
+* @param {HTMLElement} attachTo The element or element ID to which the key
 *                               event should be attached
 * @param {String}      attachTo The element or element ID to which the key
 *                               event should be attached
-* @param {Object}      keyData  The object literal representing the key(s) 
-*                               to detect. Possible attributes are 
-*                               shift(boolean), alt(boolean), ctrl(boolean) 
-*                               and keys(either an int or an array of ints 
+* @param {Object}      keyData  The object literal representing the key(s)
+*                               to detect. Possible attributes are
+*                               shift(boolean), alt(boolean), ctrl(boolean)
+*                               and keys(either an int or an array of ints
 *                               representing keycodes).
-* @param {Function}    handler  The CustomEvent handler to fire when the 
+* @param {Function}    handler  The CustomEvent handler to fire when the
 *                               key event is detected
-* @param {Object}      handler  An object literal representing the handler. 
-* @param {String}      event    Optional. The event (keydown or keyup) to 
+* @param {Object}      handler  An object literal representing the handler.
+* @param {String}      event    Optional. The event (keydown or keyup) to
 *                               listen for. Defaults automatically to keydown.
 *
 * @knownissue the "keypress" event is completely broken in Safari 2.x and below.
@@ -2308,8 +2345,8 @@ YAHOO.util.KeyListener = function(attachTo, keyData, handler, event) {
     if (!attachTo) {
     } else if (!keyData) {
     } else if (!handler) {
-    } 
-    
+    }
+
     if (!event) {
         event = YAHOO.util.KeyListener.KEYDOWN;
     }
@@ -2318,31 +2355,31 @@ YAHOO.util.KeyListener = function(attachTo, keyData, handler, event) {
     * The CustomEvent fired internally when a key is pressed
     * @event keyEvent
     * @private
-    * @param {Object} keyData The object literal representing the key(s) to 
-    *                         detect. Possible attributes are shift(boolean), 
-    *                         alt(boolean), ctrl(boolean) and keys(either an 
+    * @param {Object} keyData The object literal representing the key(s) to
+    *                         detect. Possible attributes are shift(boolean),
+    *                         alt(boolean), ctrl(boolean) and keys(either an
     *                         int or an array of ints representing keycodes).
     */
     var keyEvent = new YAHOO.util.CustomEvent("keyPressed");
-    
+
     /**
-    * The CustomEvent fired when the KeyListener is enabled via the enable() 
+    * The CustomEvent fired when the KeyListener is enabled via the enable()
     * function
     * @event enabledEvent
-    * @param {Object} keyData The object literal representing the key(s) to 
-    *                         detect. Possible attributes are shift(boolean), 
-    *                         alt(boolean), ctrl(boolean) and keys(either an 
+    * @param {Object} keyData The object literal representing the key(s) to
+    *                         detect. Possible attributes are shift(boolean),
+    *                         alt(boolean), ctrl(boolean) and keys(either an
     *                         int or an array of ints representing keycodes).
     */
     this.enabledEvent = new YAHOO.util.CustomEvent("enabled");
 
     /**
-    * The CustomEvent fired when the KeyListener is disabled via the 
+    * The CustomEvent fired when the KeyListener is disabled via the
     * disable() function
     * @event disabledEvent
-    * @param {Object} keyData The object literal representing the key(s) to 
-    *                         detect. Possible attributes are shift(boolean), 
-    *                         alt(boolean), ctrl(boolean) and keys(either an 
+    * @param {Object} keyData The object literal representing the key(s) to
+    *                         detect. Possible attributes are shift(boolean),
+    *                         alt(boolean), ctrl(boolean) and keys(either an
     *                         int or an array of ints representing keycodes).
     */
     this.disabledEvent = new YAHOO.util.CustomEvent("disabled");
@@ -2365,10 +2402,10 @@ YAHOO.util.KeyListener = function(attachTo, keyData, handler, event) {
     * @private
     */
     function handleKeyPress(e, obj) {
-        if (! keyData.shift) {  
-            keyData.shift = false; 
+        if (! keyData.shift) {
+            keyData.shift = false;
         }
-        if (! keyData.alt) {    
+        if (! keyData.alt) {
             keyData.alt = false;
         }
         if (! keyData.ctrl) {
@@ -2376,10 +2413,10 @@ YAHOO.util.KeyListener = function(attachTo, keyData, handler, event) {
         }
 
         // check held down modifying keys first
-        if (e.shiftKey == keyData.shift && 
+        if (e.shiftKey == keyData.shift &&
             e.altKey   == keyData.alt &&
             e.ctrlKey  == keyData.ctrl) { // if we pass this, all modifiers match
-            
+
             var dataItem, keys = keyData.keys, key;
 
             if (YAHOO.lang.isArray(keys)) {
@@ -2402,7 +2439,7 @@ YAHOO.util.KeyListener = function(attachTo, keyData, handler, event) {
     }
 
     /**
-    * Enables the KeyListener by attaching the DOM event listeners to the 
+    * Enables the KeyListener by attaching the DOM event listeners to the
     * target DOM element
     * @method enable
     */
@@ -2420,7 +2457,7 @@ YAHOO.util.KeyListener = function(attachTo, keyData, handler, event) {
     };
 
     /**
-    * Disables the KeyListener by removing the DOM event listeners from the 
+    * Disables the KeyListener by removing the DOM event listeners from the
     * target DOM element
     * @method disable
     */
@@ -2436,9 +2473,9 @@ YAHOO.util.KeyListener = function(attachTo, keyData, handler, event) {
     * Returns a String representation of the object.
     * @method toString
     * @return {String}  The string representation of the KeyListener
-    */ 
+    */
     this.toString = function() {
-        return "KeyListener [" + keyData.keys + "] " + attachTo.tagName + 
+        return "KeyListener [" + keyData.keys + "] " + attachTo.tagName +
                 (attachTo.id ? "[" + attachTo.id + "]" : "");
     };
 
@@ -2485,7 +2522,7 @@ KeyListener.KEY = {
     META         : 224,
     NUM_LOCK     : 144,
     PAGE_DOWN    : 34,
-    PAGE_UP      : 33, 
+    PAGE_UP      : 33,
     PAUSE        : 19,
     PRINTSCREEN  : 44,
     RIGHT        : 39,
@@ -2497,4 +2534,4 @@ KeyListener.KEY = {
 };
 
 })();
-YAHOO.register("event", YAHOO.util.Event, {version: "2.8.2r1", build: "7"});
+YAHOO.register("event", YAHOO.util.Event, {version: "2.9.0", build: "2800"});

http://git-wip-us.apache.org/repos/asf/wicket/blob/e4194d49/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/yahoo/yahoo-min.js
----------------------------------------------------------------------
diff --git a/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/yahoo/yahoo-min.js b/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/yahoo/yahoo-min.js
index eb944a6..4f18140 100644
--- a/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/yahoo/yahoo-min.js
+++ b/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/yahoo/yahoo-min.js
@@ -1,7 +1,8 @@
 /*
-Copyright (c) 2010, Yahoo! Inc. All rights reserved.
+Copyright (c) 2011, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.com/yui/license.html
-version: 2.8.2r1
+version: 2.9.0
 */
-if(typeof YAHOO=="undefined"||!YAHOO){var YAHOO={};}YAHOO.namespace=function(){var A=arguments,E=null,C,B,D;for(C=0;C<A.length;C=C+1){D=(""+A[C]).split(".");E=YAHOO;for(B=(D[0]=="YAHOO")?1:0;B<D.length;B=B+1){E[D[B]]=E[D[B]]||{};E=E[D[B]];}}return E;};YAHOO.log=function(D,A,C){var B=YAHOO.widget.Logger;if(B&&B.log){return B.log(D,A,C);}else{return false;}};YAHOO.register=function(A,E,D){var I=YAHOO.env.modules,B,H,G,F,C;if(!I[A]){I[A]={versions:[],builds:[]};}B=I[A];H=D.version;G=D.build;F=YAHOO.env.listeners;B.name=A;B.version=H;B.build=G;B.versions.push(H);B.builds.push(G);B.mainClass=E;for(C=0;C<F.length;C=C+1){F[C](B);}if(E){E.VERSION=H;E.BUILD=G;}else{YAHOO.log("mainClass is undefined for module "+A,"warn");}};YAHOO.env=YAHOO.env||{modules:[],listeners:[]};YAHOO.env.getVersion=function(A){return YAHOO.env.modules[A]||null;};YAHOO.env.ua=function(){var D=function(H){var I=0;return parseFloat(H.replace(/\./g,function(){return(I++==1)?"":".";}));},G=navigator,F={ie:0,opera
 :0,gecko:0,webkit:0,mobile:null,air:0,caja:G.cajaVersion,secure:false,os:null},C=navigator&&navigator.userAgent,E=window&&window.location,B=E&&E.href,A;F.secure=B&&(B.toLowerCase().indexOf("https")===0);if(C){if((/windows|win32/i).test(C)){F.os="windows";}else{if((/macintosh/i).test(C)){F.os="macintosh";}}if((/KHTML/).test(C)){F.webkit=1;}A=C.match(/AppleWebKit\/([^\s]*)/);if(A&&A[1]){F.webkit=D(A[1]);if(/ Mobile\//.test(C)){F.mobile="Apple";}else{A=C.match(/NokiaN[^\/]*/);if(A){F.mobile=A[0];}}A=C.match(/AdobeAIR\/([^\s]*)/);if(A){F.air=A[0];}}if(!F.webkit){A=C.match(/Opera[\s\/]([^\s]*)/);if(A&&A[1]){F.opera=D(A[1]);A=C.match(/Opera Mini[^;]*/);if(A){F.mobile=A[0];}}else{A=C.match(/MSIE\s([^;]*)/);if(A&&A[1]){F.ie=D(A[1]);}else{A=C.match(/Gecko\/([^\s]*)/);if(A){F.gecko=1;A=C.match(/rv:([^\s\)]*)/);if(A&&A[1]){F.gecko=D(A[1]);}}}}}}return F;}();(function(){YAHOO.namespace("util","widget","example");if("undefined"!==typeof YAHOO_config){var B=YAHOO_config.listener,A=YAHOO.e
 nv.listeners,D=true,C;if(B){for(C=0;C<A.length;C++){if(A[C]==B){D=false;break;}}if(D){A.push(B);}}}})();YAHOO.lang=YAHOO.lang||{};(function(){var B=YAHOO.lang,A=Object.prototype,H="[object Array]",C="[object Function]",G="[object Object]",E=[],F=["toString","valueOf"],D={isArray:function(I){return A.toString.apply(I)===H;},isBoolean:function(I){return typeof I==="boolean";},isFunction:function(I){return(typeof I==="function")||A.toString.apply(I)===C;},isNull:function(I){return I===null;},isNumber:function(I){return typeof I==="number"&&isFinite(I);},isObject:function(I){return(I&&(typeof I==="object"||B.isFunction(I)))||false;},isString:function(I){return typeof I==="string";},isUndefined:function(I){return typeof I==="undefined";},_IEEnumFix:(YAHOO.env.ua.ie)?function(K,J){var I,M,L;for(I=0;I<F.length;I=I+1){M=F[I];L=J[M];if(B.isFunction(L)&&L!=A[M]){K[M]=L;}}}:function(){},extend:function(L,M,K){if(!M||!L){throw new Error("extend failed, please check that "+"all dependenc
 ies are included.");}var J=function(){},I;J.prototype=M.prototype;L.prototype=new J();L.prototype.constructor=L;L.superclass=M.prototype;if(M.prototype.constructor==A.constructor){M.prototype.constructor=M;}if(K){for(I in K){if(B.hasOwnProperty(K,I)){L.prototype[I]=K[I];}}B._IEEnumFix(L.prototype,K);}},augmentObject:function(M,L){if(!L||!M){throw new Error("Absorb failed, verify dependencies.");}var I=arguments,K,N,J=I[2];if(J&&J!==true){for(K=2;K<I.length;K=K+1){M[I[K]]=L[I[K]];}}else{for(N in L){if(J||!(N in M)){M[N]=L[N];}}B._IEEnumFix(M,L);}},augmentProto:function(L,K){if(!K||!L){throw new Error("Augment failed, verify dependencies.");}var I=[L.prototype,K.prototype],J;for(J=2;J<arguments.length;J=J+1){I.push(arguments[J]);}B.augmentObject.apply(this,I);},dump:function(I,N){var K,M,P=[],Q="{...}",J="f(){...}",O=", ",L=" => ";if(!B.isObject(I)){return I+"";}else{if(I instanceof Date||("nodeType" in I&&"tagName" in I)){return I;}else{if(B.isFunction(I)){return J;}}}N=(B.is
 Number(N))?N:3;if(B.isArray(I)){P.push("[");for(K=0,M=I.length;K<M;K=K+1){if(B.isObject(I[K])){P.push((N>0)?B.dump(I[K],N-1):Q);}else{P.push(I[K]);}P.push(O);}if(P.length>1){P.pop();}P.push("]");}else{P.push("{");for(K in I){if(B.hasOwnProperty(I,K)){P.push(K+L);if(B.isObject(I[K])){P.push((N>0)?B.dump(I[K],N-1):Q);}else{P.push(I[K]);}P.push(O);}}if(P.length>1){P.pop();}P.push("}");}return P.join("");},substitute:function(Y,J,R){var N,M,L,U,V,X,T=[],K,O="dump",S=" ",I="{",W="}",Q,P;for(;;){N=Y.lastIndexOf(I);if(N<0){break;}M=Y.indexOf(W,N);if(N+1>=M){break;}K=Y.substring(N+1,M);U=K;X=null;L=U.indexOf(S);if(L>-1){X=U.substring(L+1);U=U.substring(0,L);}V=J[U];if(R){V=R(U,V,X);}if(B.isObject(V)){if(B.isArray(V)){V=B.dump(V,parseInt(X,10));}else{X=X||"";Q=X.indexOf(O);if(Q>-1){X=X.substring(4);}P=V.toString();if(P===G||Q>-1){V=B.dump(V,parseInt(X,10));}else{V=P;}}}else{if(!B.isString(V)&&!B.isNumber(V)){V="~-"+T.length+"-~";T[T.length]=K;}}Y=Y.substring(0,N)+V+Y.substring(M+1);}
 for(N=T.length-1;N>=0;N=N-1){Y=Y.replace(new RegExp("~-"+N+"-~"),"{"+T[N]+"}","g");}return Y;},trim:function(I){try{return I.replace(/^\s+|\s+$/g,"");}catch(J){return I;}},merge:function(){var L={},J=arguments,I=J.length,K;for(K=0;K<I;K=K+1){B.augmentObject(L,J[K],true);}return L;},later:function(P,J,Q,L,M){P=P||0;J=J||{};var K=Q,O=L,N,I;if(B.isString(Q)){K=J[Q];}if(!K){throw new TypeError("method undefined");}if(O&&!B.isArray(O)){O=[L];}N=function(){K.apply(J,O||E);};I=(M)?setInterval(N,P):setTimeout(N,P);return{interval:M,cancel:function(){if(this.interval){clearInterval(I);}else{clearTimeout(I);}}};},isValue:function(I){return(B.isObject(I)||B.isString(I)||B.isNumber(I)||B.isBoolean(I));}};B.hasOwnProperty=(A.hasOwnProperty)?function(I,J){return I&&I.hasOwnProperty(J);}:function(I,J){return !B.isUndefined(I[J])&&I.constructor.prototype[J]!==I[J];};D.augmentObject(B,D,true);YAHOO.util.Lang=B;B.augment=B.augmentProto;YAHOO.augment=B.augmentProto;YAHOO.extend=B.extend;})();Y
 AHOO.register("yahoo",YAHOO,{version:"2.8.2r1",build:"7"});
+if(typeof YAHOO=="undefined"||!YAHOO){var YAHOO={};}YAHOO.namespace=function(){var b=arguments,g=null,e,c,f;for(e=0;e<b.length;e=e+1){f=(""+b[e]).split(".");g=YAHOO;for(c=(f[0]=="YAHOO")?1:0;c<f.length;c=c+1){g[f[c]]=g[f[c]]||{};g=g[f[c]];}}return g;};YAHOO.log=function(d,a,c){var b=YAHOO.widget.Logger;if(b&&b.log){return b.log(d,a,c);}else{return false;}};YAHOO.register=function(a,f,e){var k=YAHOO.env.modules,c,j,h,g,d;if(!k[a]){k[a]={versions:[],builds:[]};}c=k[a];j=e.version;h=e.build;g=YAHOO.env.listeners;c.name=a;c.version=j;c.build=h;c.versions.push(j);c.builds.push(h);c.mainClass=f;for(d=0;d<g.length;d=d+1){g[d](c);}if(f){f.VERSION=j;f.BUILD=h;}else{YAHOO.log("mainClass is undefined for module "+a,"warn");}};YAHOO.env=YAHOO.env||{modules:[],listeners:[]};YAHOO.env.getVersion=function(a){return YAHOO.env.modules[a]||null;};YAHOO.env.parseUA=function(d){var e=function(i){var j=0;return parseFloat(i.replace(/\./g,function(){return(j++==1)?"":".";}));},h=navigator,g={ie:0
 ,opera:0,gecko:0,webkit:0,chrome:0,mobile:null,air:0,ipad:0,iphone:0,ipod:0,ios:null,android:0,webos:0,caja:h&&h.cajaVersion,secure:false,os:null},c=d||(navigator&&navigator.userAgent),f=window&&window.location,b=f&&f.href,a;g.secure=b&&(b.toLowerCase().indexOf("https")===0);if(c){if((/windows|win32/i).test(c)){g.os="windows";}else{if((/macintosh/i).test(c)){g.os="macintosh";}else{if((/rhino/i).test(c)){g.os="rhino";}}}if((/KHTML/).test(c)){g.webkit=1;}a=c.match(/AppleWebKit\/([^\s]*)/);if(a&&a[1]){g.webkit=e(a[1]);if(/ Mobile\//.test(c)){g.mobile="Apple";a=c.match(/OS ([^\s]*)/);if(a&&a[1]){a=e(a[1].replace("_","."));}g.ios=a;g.ipad=g.ipod=g.iphone=0;a=c.match(/iPad|iPod|iPhone/);if(a&&a[0]){g[a[0].toLowerCase()]=g.ios;}}else{a=c.match(/NokiaN[^\/]*|Android \d\.\d|webOS\/\d\.\d/);if(a){g.mobile=a[0];}if(/webOS/.test(c)){g.mobile="WebOS";a=c.match(/webOS\/([^\s]*);/);if(a&&a[1]){g.webos=e(a[1]);}}if(/ Android/.test(c)){g.mobile="Android";a=c.match(/Android ([^\s]*);/);if(a&&
 a[1]){g.android=e(a[1]);}}}a=c.match(/Chrome\/([^\s]*)/);if(a&&a[1]){g.chrome=e(a[1]);}else{a=c.match(/AdobeAIR\/([^\s]*)/);if(a){g.air=a[0];}}}if(!g.webkit){a=c.match(/Opera[\s\/]([^\s]*)/);if(a&&a[1]){g.opera=e(a[1]);a=c.match(/Version\/([^\s]*)/);if(a&&a[1]){g.opera=e(a[1]);}a=c.match(/Opera Mini[^;]*/);if(a){g.mobile=a[0];}}else{a=c.match(/MSIE\s([^;]*)/);if(a&&a[1]){g.ie=e(a[1]);}else{a=c.match(/Gecko\/([^\s]*)/);if(a){g.gecko=1;a=c.match(/rv:([^\s\)]*)/);if(a&&a[1]){g.gecko=e(a[1]);}}}}}}return g;};YAHOO.env.ua=YAHOO.env.parseUA();(function(){YAHOO.namespace("util","widget","example");if("undefined"!==typeof YAHOO_config){var b=YAHOO_config.listener,a=YAHOO.env.listeners,d=true,c;if(b){for(c=0;c<a.length;c++){if(a[c]==b){d=false;break;}}if(d){a.push(b);}}}})();YAHOO.lang=YAHOO.lang||{};(function(){var f=YAHOO.lang,a=Object.prototype,c="[object Array]",h="[object Function]",i="[object Object]",b=[],g={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","/":"&#x2
 F;","`":"&#x60;"},d=["toString","valueOf"],e={isArray:function(j){return a.toString.apply(j)===c;},isBoolean:function(j){return typeof j==="boolean";},isFunction:function(j){return(typeof j==="function")||a.toString.apply(j)===h;},isNull:function(j){return j===null;},isNumber:function(j){return typeof j==="number"&&isFinite(j);},isObject:function(j){return(j&&(typeof j==="object"||f.isFunction(j)))||false;},isString:function(j){return typeof j==="string";},isUndefined:function(j){return typeof j==="undefined";},_IEEnumFix:(YAHOO.env.ua.ie)?function(l,k){var j,n,m;for(j=0;j<d.length;j=j+1){n=d[j];m=k[n];if(f.isFunction(m)&&m!=a[n]){l[n]=m;}}}:function(){},escapeHTML:function(j){return j.replace(/[&<>"'\/`]/g,function(k){return g[k];});},extend:function(m,n,l){if(!n||!m){throw new Error("extend failed, please check that "+"all dependencies are included.");}var k=function(){},j;k.prototype=n.prototype;m.prototype=new k();m.prototype.constructor=m;m.superclass=n.prototype;if(n.p
 rototype.constructor==a.constructor){n.prototype.constructor=n;}if(l){for(j in l){if(f.hasOwnProperty(l,j)){m.prototype[j]=l[j];}}f._IEEnumFix(m.prototype,l);}},augmentObject:function(n,m){if(!m||!n){throw new Error("Absorb failed, verify dependencies.");}var j=arguments,l,o,k=j[2];if(k&&k!==true){for(l=2;l<j.length;l=l+1){n[j[l]]=m[j[l]];}}else{for(o in m){if(k||!(o in n)){n[o]=m[o];}}f._IEEnumFix(n,m);}return n;},augmentProto:function(m,l){if(!l||!m){throw new Error("Augment failed, verify dependencies.");}var j=[m.prototype,l.prototype],k;for(k=2;k<arguments.length;k=k+1){j.push(arguments[k]);}f.augmentObject.apply(this,j);return m;},dump:function(j,p){var l,n,r=[],t="{...}",k="f(){...}",q=", ",m=" => ";if(!f.isObject(j)){return j+"";}else{if(j instanceof Date||("nodeType" in j&&"tagName" in j)){return j;}else{if(f.isFunction(j)){return k;}}}p=(f.isNumber(p))?p:3;if(f.isArray(j)){r.push("[");for(l=0,n=j.length;l<n;l=l+1){if(f.isObject(j[l])){r.push((p>0)?f.dump(j[l],p-1):
 t);}else{r.push(j[l]);}r.push(q);}if(r.length>1){r.pop();}r.push("]");}else{r.push("{");for(l in j){if(f.hasOwnProperty(j,l)){r.push(l+m);if(f.isObject(j[l])){r.push((p>0)?f.dump(j[l],p-1):t);}else{r.push(j[l]);}r.push(q);}}if(r.length>1){r.pop();}r.push("}");}return r.join("");},substitute:function(x,y,E,l){var D,C,B,G,t,u,F=[],p,z=x.length,A="dump",r=" ",q="{",m="}",n,w;for(;;){D=x.lastIndexOf(q,z);if(D<0){break;}C=x.indexOf(m,D);if(D+1>C){break;}p=x.substring(D+1,C);G=p;u=null;B=G.indexOf(r);if(B>-1){u=G.substring(B+1);G=G.substring(0,B);}t=y[G];if(E){t=E(G,t,u);}if(f.isObject(t)){if(f.isArray(t)){t=f.dump(t,parseInt(u,10));}else{u=u||"";n=u.indexOf(A);if(n>-1){u=u.substring(4);}w=t.toString();if(w===i||n>-1){t=f.dump(t,parseInt(u,10));}else{t=w;}}}else{if(!f.isString(t)&&!f.isNumber(t)){t="~-"+F.length+"-~";F[F.length]=p;}}x=x.substring(0,D)+t+x.substring(C+1);if(l===false){z=D-1;}}for(D=F.length-1;D>=0;D=D-1){x=x.replace(new RegExp("~-"+D+"-~"),"{"+F[D]+"}","g");}return
  x;},trim:function(j){try{return j.replace(/^\s+|\s+$/g,"");}catch(k){return j;
+}},merge:function(){var n={},k=arguments,j=k.length,m;for(m=0;m<j;m=m+1){f.augmentObject(n,k[m],true);}return n;},later:function(t,k,u,n,p){t=t||0;k=k||{};var l=u,s=n,q,j;if(f.isString(u)){l=k[u];}if(!l){throw new TypeError("method undefined");}if(!f.isUndefined(n)&&!f.isArray(s)){s=[n];}q=function(){l.apply(k,s||b);};j=(p)?setInterval(q,t):setTimeout(q,t);return{interval:p,cancel:function(){if(this.interval){clearInterval(j);}else{clearTimeout(j);}}};},isValue:function(j){return(f.isObject(j)||f.isString(j)||f.isNumber(j)||f.isBoolean(j));}};f.hasOwnProperty=(a.hasOwnProperty)?function(j,k){return j&&j.hasOwnProperty&&j.hasOwnProperty(k);}:function(j,k){return !f.isUndefined(j[k])&&j.constructor.prototype[k]!==j[k];};e.augmentObject(f,e,true);YAHOO.util.Lang=f;f.augment=f.augmentProto;YAHOO.augment=f.augmentProto;YAHOO.extend=f.extend;})();YAHOO.register("yahoo",YAHOO,{version:"2.9.0",build:"2800"});
\ No newline at end of file