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

[3/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/calendar/calendar.js
----------------------------------------------------------------------
diff --git a/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/calendar.js b/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/calendar.js
index 79ae2f0..05ce3ce 100644
--- a/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/calendar.js
+++ b/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/calendar.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
 */
 (function () {
 
@@ -235,27 +235,18 @@ version: 2.8.2r1
         * @return {Boolean} True is the property was reset, false if not
         */
         resetProperty: function (key) {
-    
             key = key.toLowerCase();
-        
+
             var property = this.config[key];
-    
+
             if (property && property.event) {
-    
-                if (this.initialConfig[key] && 
-                    !Lang.isUndefined(this.initialConfig[key])) {
-    
+                if (key in this.initialConfig) {
                     this.setProperty(key, this.initialConfig[key]);
-
                     return true;
-    
                 }
-    
             } else {
-    
                 return false;
             }
-    
         },
         
         /**
@@ -1289,6 +1280,7 @@ Calendar.DEFAULT_CONFIG = {
     MINDATE : {key:"mindate", value:null},
     MAXDATE : {key:"maxdate", value:null},
     MULTI_SELECT : {key:"multi_select", value:false},
+    OOM_SELECT : {key:"oom_select", value:false},
     START_WEEKDAY : {key:"start_weekday", value:0},
     SHOW_WEEKDAYS : {key:"show_weekdays", value:true},
     SHOW_WEEK_HEADER : {key:"show_week_header", value:false},
@@ -1614,9 +1606,12 @@ Calendar.prototype = {
 
         this.oDomContainer = Dom.get(container);
 
+        this._oDoc = this.oDomContainer.ownerDocument;
+
         if (!this.oDomContainer.id) {
             this.oDomContainer.id = Dom.generateId();
         }
+
         if (!id) {
             id = this.oDomContainer.id + "_t";
         }
@@ -2012,7 +2007,7 @@ Calendar.prototype = {
                             cal.deselectCell(index);
                         } else {
                             cal.selectCell(index);
-                        } 
+                        }
 
                     } else {
                         link = cell.getElementsByTagName("a")[0];
@@ -2108,9 +2103,9 @@ Calendar.prototype = {
         cfg.addProperty(DEF_CFG.SELECTED.key, { value:DEF_CFG.SELECTED.value.concat(), handler:this.configSelected } );
 
         /**
-        * The title to display above the Calendar's month header
+        * The title to display above the Calendar's month header. The title is inserted into the DOM as HTML, and should be escaped by the implementor if coming from an external source.   
         * @config title
-        * @type String
+        * @type HTML
         * @default ""
         */
         cfg.addProperty(DEF_CFG.TITLE.key, { value:DEF_CFG.TITLE.value, handler:this.configTitle } );
@@ -2161,6 +2156,14 @@ Calendar.prototype = {
         cfg.addProperty(DEF_CFG.MULTI_SELECT.key, { value:DEF_CFG.MULTI_SELECT.value, handler:this.configOptions, validator:cfg.checkBoolean } );
 
         /**
+        * True if the Calendar should allow selection of out-of-month dates. False by default.
+        * @config OOM_SELECT
+        * @type Boolean
+        * @default false
+        */
+        cfg.addProperty(DEF_CFG.OOM_SELECT.key, { value:DEF_CFG.OOM_SELECT.value, handler:this.configOptions, validator:cfg.checkBoolean } );
+
+        /**
         * The weekday the week begins on. Default is 0 (Sunday = 0, Monday = 1 ... Saturday = 6).
         * @config START_WEEKDAY
         * @type number
@@ -2201,7 +2204,7 @@ Calendar.prototype = {
         cfg.addProperty(DEF_CFG.HIDE_BLANK_WEEKS.key, { value:DEF_CFG.HIDE_BLANK_WEEKS.value, handler:this.configOptions, validator:cfg.checkBoolean } );
         
         /**
-        * The image that should be used for the left navigation arrow.
+        * The image URL that should be used for the left navigation arrow. The image URL is inserted into the DOM as HTML, and should be escaped by the implementor if coming from an external source.
         * @config NAV_ARROW_LEFT
         * @type String
         * @deprecated You can customize the image by overriding the default CSS class for the left arrow - "calnavleft"  
@@ -2210,7 +2213,7 @@ Calendar.prototype = {
         cfg.addProperty(DEF_CFG.NAV_ARROW_LEFT.key, { value:DEF_CFG.NAV_ARROW_LEFT.value, handler:this.configOptions } );
     
         /**
-        * The image that should be used for the right navigation arrow.
+        * The image URL that should be used for the right navigation arrow. The image URL is inserted into the DOM as HTML, and should be escaped by the implementor if coming from an external source.
         * @config NAV_ARROW_RIGHT
         * @type String
         * @deprecated You can customize the image by overriding the default CSS class for the right arrow - "calnavright"
@@ -2221,49 +2224,49 @@ Calendar.prototype = {
         // Locale properties
     
         /**
-        * The short month labels for the current locale.
+        * The short month labels for the current locale. The month labels are inserted into the DOM as HTML, and should be escaped by the implementor if coming from an external source.
         * @config MONTHS_SHORT
-        * @type String[]
+        * @type HTML[]
         * @default ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
         */
         cfg.addProperty(DEF_CFG.MONTHS_SHORT.key, { value:DEF_CFG.MONTHS_SHORT.value, handler:this.configLocale } );
-        
+
         /**
-        * The long month labels for the current locale.
+        * The long month labels for the current locale. The month labels are inserted into the DOM as HTML, and should be escaped by the implementor if coming from an external source.
         * @config MONTHS_LONG
-        * @type String[]
+        * @type HTML[]
         * @default ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
         */ 
         cfg.addProperty(DEF_CFG.MONTHS_LONG.key,  { value:DEF_CFG.MONTHS_LONG.value, handler:this.configLocale } );
 
         /**
-        * The 1-character weekday labels for the current locale.
+        * The 1-character weekday labels for the current locale. The weekday labels are inserted into the DOM as HTML, and should be escaped by the implementor if coming from an external source.
         * @config WEEKDAYS_1CHAR
-        * @type String[]
+        * @type HTML[]
         * @default ["S", "M", "T", "W", "T", "F", "S"]
         */ 
         cfg.addProperty(DEF_CFG.WEEKDAYS_1CHAR.key, { value:DEF_CFG.WEEKDAYS_1CHAR.value, handler:this.configLocale } );
         
         /**
-        * The short weekday labels for the current locale.
+        * The short weekday labels for the current locale. The weekday labels are inserted into the DOM as HTML, and should be escaped by the implementor if coming from an external source.
         * @config WEEKDAYS_SHORT
-        * @type String[]
+        * @type HTML[]
         * @default ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"]
         */ 
         cfg.addProperty(DEF_CFG.WEEKDAYS_SHORT.key, { value:DEF_CFG.WEEKDAYS_SHORT.value, handler:this.configLocale } );
         
         /**
-        * The medium weekday labels for the current locale.
+        * The medium weekday labels for the current locale. The weekday labels are inserted into the DOM as HTML, and should be escaped by the implementor if coming from an external source.
         * @config WEEKDAYS_MEDIUM
-        * @type String[]
+        * @type HTML[]
         * @default ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
         */ 
         cfg.addProperty(DEF_CFG.WEEKDAYS_MEDIUM.key, { value:DEF_CFG.WEEKDAYS_MEDIUM.value, handler:this.configLocale } );
         
         /**
-        * The long weekday labels for the current locale.
+        * The long weekday labels for the current locale. The weekday labels are inserted into the DOM as HTML, and should be escaped by the implementor if coming from an external source.
         * @config WEEKDAYS_LONG
-        * @type String[]
+        * @type HTML[]
         * @default ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
         */ 
         cfg.addProperty(DEF_CFG.WEEKDAYS_LONG.key, { value:DEF_CFG.WEEKDAYS_LONG.value, handler:this.configLocale } );
@@ -2410,17 +2413,17 @@ Calendar.prototype = {
         cfg.addProperty(DEF_CFG.MY_LABEL_YEAR_POSITION.key, { value:DEF_CFG.MY_LABEL_YEAR_POSITION.value, handler:this.configLocale, validator:cfg.checkNumber } );
         
         /**
-        * The suffix used after the month when rendering the Calendar header
+        * The suffix used after the month when rendering the Calendar header. The suffix is inserted into the DOM as HTML, and should be escaped by the implementor if coming from an external source.
         * @config MY_LABEL_MONTH_SUFFIX
-        * @type String
+        * @type HTML
         * @default " "
         */
         cfg.addProperty(DEF_CFG.MY_LABEL_MONTH_SUFFIX.key, { value:DEF_CFG.MY_LABEL_MONTH_SUFFIX.value, handler:this.configLocale } );
         
         /**
-        * The suffix used after the year when rendering the Calendar header
+        * The suffix used after the year when rendering the Calendar header. The suffix is inserted into the DOM as HTML, and should be escaped by the implementor if coming from an external source.
         * @config MY_LABEL_YEAR_SUFFIX
-        * @type String
+        * @type HTML
         * @default ""
         */
         cfg.addProperty(DEF_CFG.MY_LABEL_YEAR_SUFFIX.key, { value:DEF_CFG.MY_LABEL_YEAR_SUFFIX.value, handler:this.configLocale } );
@@ -2441,13 +2444,13 @@ Calendar.prototype = {
         * </p>
         * <dl>
         * <dt>strings</dt>
-        * <dd><em>Object</em> :  An object with the properties shown below, defining the string labels to use in the Navigator's UI
+        * <dd><em>Object</em> :  An object with the properties shown below, defining the string labels to use in the Navigator's UI. The strings are inserted into the DOM as HTML, and should be escaped by the implementor if coming from an external source. 
         *     <dl>
-        *         <dt>month</dt><dd><em>String</em> : The string to use for the month label. Defaults to "Month".</dd>
-        *         <dt>year</dt><dd><em>String</em> : The string to use for the year label. Defaults to "Year".</dd>
-        *         <dt>submit</dt><dd><em>String</em> : The string to use for the submit button label. Defaults to "Okay".</dd>
-        *         <dt>cancel</dt><dd><em>String</em> : The string to use for the cancel button label. Defaults to "Cancel".</dd>
-        *         <dt>invalidYear</dt><dd><em>String</em> : The string to use for invalid year values. Defaults to "Year needs to be a number".</dd>
+        *         <dt>month</dt><dd><em>HTML</em> : The markup to use for the month label. Defaults to "Month".</dd>
+        *         <dt>year</dt><dd><em>HTML</em> : The markup to use for the year label. Defaults to "Year".</dd>
+        *         <dt>submit</dt><dd><em>HTML</em> : The markup to use for the submit button label. Defaults to "Okay".</dd>
+        *         <dt>cancel</dt><dd><em>HTML</em> : The markup to use for the cancel button label. Defaults to "Cancel".</dd>
+        *         <dt>invalidYear</dt><dd><em>HTML</em> : The markup to use for invalid year values. Defaults to "Year needs to be a number".</dd>
         *     </dl>
         * </dd>
         * <dt>monthFormat</dt><dd><em>String</em> : The month format to use. Either YAHOO.widget.Calendar.LONG, or YAHOO.widget.Calendar.SHORT. Defaults to YAHOO.widget.Calendar.LONG</dd>
@@ -2480,9 +2483,9 @@ Calendar.prototype = {
          * @type {Object}
          * @default An object with the properties shown below:
          *     <dl>
-         *         <dt>previousMonth</dt><dd><em>String</em> : The string to use for the "Previous Month" navigation UI. Defaults to "Previous Month".</dd>
-         *         <dt>nextMonth</dt><dd><em>String</em> : The string to use for the "Next Month" navigation UI. Defaults to "Next Month".</dd>
-         *         <dt>close</dt><dd><em>String</em> : The string to use for the close button label. Defaults to "Close".</dd>
+         *         <dt>previousMonth</dt><dd><em>HTML</em> : The markup to use for the "Previous Month" navigation label. Defaults to "Previous Month". The string is added to the DOM as HTML, and should be escaped by the implementor if coming from an external source.</dd>
+         *         <dt>nextMonth</dt><dd><em>HTML</em> : The markup to use for the "Next Month" navigation UI. Defaults to "Next Month". The string is added to the DOM as HTML, and should be escaped by the implementor if coming from an external source.</dd>
+         *         <dt>close</dt><dd><em>HTML</em> : The markup to use for the close button label. Defaults to "Close". The string is added to the DOM as HTML, and should be escaped by the implementor if coming from an external source.</dd>
          *     </dl>
          */
         cfg.addProperty(DEF_CFG.STRINGS.key, { 
@@ -2667,7 +2670,7 @@ Calendar.prototype = {
     },
 
     /**
-    * Defines the style constants for the Calendar
+    * Defines the class names used by Calendar when rendering to DOM. NOTE: The class names are added to the DOM as HTML and should be escaped by the implementor if coming from an external source. 
     * @method initStyles
     */
     initStyles : function() {
@@ -2822,7 +2825,7 @@ Calendar.prototype = {
     * Builds the date label that will be displayed in the calendar header or
     * footer, depending on configuration.
     * @method buildMonthLabel
-    * @return {String} The formatted calendar month label
+    * @return {HTML} The formatted calendar month label
     */
     buildMonthLabel : function() {
         return this._buildMonthLabel(this.cfg.getProperty(DEF_CFG.PAGEDATE.key));
@@ -2835,7 +2838,7 @@ Calendar.prototype = {
      * @method _buildMonthLabel
      * @private
      * @param {Date} date
-     * @return {String} Formated month, year string
+     * @return {HTML} Formated month, year string
      */
     _buildMonthLabel : function(date) {
         var monthLabel  = this.Locale.LOCALE_MONTHS[date.getMonth()] + this.Locale.MY_LABEL_MONTH_SUFFIX,
@@ -2847,22 +2850,22 @@ Calendar.prototype = {
             return monthLabel + yearLabel;
         }
     },
-    
+
     /**
     * Builds the date digit that will be displayed in calendar cells
     * @method buildDayLabel
     * @param {Date} workingDate The current working date
-    * @return {String} The formatted day label
+    * @return {Number} The day
     */
     buildDayLabel : function(workingDate) {
         return workingDate.getDate();
     },
-    
+
     /**
-     * Creates the title bar element and adds it to Calendar container DIV
+     * Creates the title bar element and adds it to Calendar container DIV. NOTE: The title parameter passed into this method is added to the DOM as HTML and should be escaped by the implementor if coming from an external source.  
      * 
      * @method createTitleBar
-     * @param {String} strTitle The title to display in the title bar
+     * @param {HTML} strTitle The title to display in the title bar
      * @return The title bar element
      */
     createTitleBar : function(strTitle) {
@@ -2889,18 +2892,18 @@ Calendar.prototype = {
         }
         Dom.removeClass(this.oDomContainer, this.Style.CSS_WITH_TITLE);
     },
-    
+
     /**
      * Creates the close button HTML element and adds it to Calendar container DIV
      * 
      * @method createCloseButton
-     * @return The close HTML element created
+     * @return {HTMLElement} The close HTML element created
      */
     createCloseButton : function() {
         var cssClose = YAHOO.widget.CalendarGroup.CSS_2UPCLOSE,
             cssLinkClose = this.Style.CSS_LINK_CLOSE,
             DEPR_CLOSE_PATH = "us/my/bn/x_d.gif",
-            
+
             lnk = Dom.getElementsByClassName(cssLinkClose, "a", this.oDomContainer)[0],
             strings = this.cfg.getProperty(DEF_CFG.STRINGS.key),
             closeStr = (strings && strings.close) ? strings.close : "";
@@ -2943,10 +2946,10 @@ Calendar.prototype = {
     },
 
     /**
-    * Renders the calendar header.
+    * Renders the calendar header. NOTE: The contents of the array passed into this method are added to the DOM as HTML, and should be escaped by the implementor if coming from an external source.
     * @method renderHeader
-    * @param {Array} html The current working HTML array
-    * @return {Array} The current working HTML array
+    * @param {HTML[]} html The current working HTML array
+    * @return {HTML[]} The current working HTML array
     */
     renderHeader : function(html) {
 
@@ -3028,12 +3031,12 @@ Calendar.prototype = {
     
         return html;
     },
-    
+
     /**
-    * Renders the Calendar's weekday headers.
+    * Renders the Calendar's weekday headers. NOTE: The contents of the array passed into this method are added to the DOM as HTML, and should be escaped by the implementor if coming from an external source.
     * @method buildWeekdays
-    * @param {Array} html The current working HTML array
-    * @return {Array} The current working HTML array
+    * @param {HTML[]} html The current working HTML array
+    * @return {HTML[]} The current working HTML array
     */
     buildWeekdays : function(html) {
 
@@ -3057,11 +3060,11 @@ Calendar.prototype = {
     },
     
     /**
-    * Renders the calendar body.
+    * Renders the calendar body. NOTE: The contents of the array passed into this method are added to the DOM as HTML, and should be escaped by the implementor if coming from an external source.
     * @method renderBody
     * @param {Date} workingDate The current working Date being used for the render process
-    * @param {Array} html The current working HTML array
-    * @return {Array} The current working HTML array
+    * @param {HTML[]} html The current working HTML array
+    * @return {HTML[]} The current working HTML array
     */
     renderBody : function(workingDate, html) {
 
@@ -3091,6 +3094,7 @@ Calendar.prototype = {
             renderer,
             t = this.today,
             cfg = this.cfg,
+            oom,
             todayYear = t.getFullYear(),
             todayMonth = t.getMonth(),
             todayDate = t.getDate(),
@@ -3098,6 +3102,7 @@ Calendar.prototype = {
             hideBlankWeeks = cfg.getProperty(DEF_CFG.HIDE_BLANK_WEEKS.key),
             showWeekFooter = cfg.getProperty(DEF_CFG.SHOW_WEEK_FOOTER.key),
             showWeekHeader = cfg.getProperty(DEF_CFG.SHOW_WEEK_HEADER.key),
+            oomSelect = cfg.getProperty(DEF_CFG.OOM_SELECT.key),
             mindate = cfg.getProperty(DEF_CFG.MINDATE.key),
             maxdate = cfg.getProperty(DEF_CFG.MAXDATE.key),
             yearOffset = this.Locale.YEAR_OFFSET;
@@ -3119,7 +3124,7 @@ Calendar.prototype = {
 
         var cal = this.parent || this;
 
-        for (var r=0;r<6;r++) {
+        for (var r = 0; r < 6; r++) {
             weekNum = DateMath.getWeekNumber(workingDate, startDay);
             weekClass = weekPrefix + weekNum;
 
@@ -3149,17 +3154,22 @@ Calendar.prototype = {
                     this.cellDates[this.cellDates.length] = workingArray; // Add this date to cellDates
 
                     // Local OOM check for performance, since we already have pagedate
-                    if (workingDate.getMonth() != useDate.getMonth()) {
+                    oom = workingDate.getMonth() != useDate.getMonth(); 
+                    if (oom && !oomSelect) {
                         cellRenderers[cellRenderers.length]=cal.renderCellNotThisMonth;
                     } else {
                         Dom.addClass(cell, workingDayPrefix + workingDate.getDay());
                         Dom.addClass(cell, dayPrefix + workingDate.getDate());
 
-                        for (var s=0;s<this.renderStack.length;++s) {
+                        // Concat, so that we're not splicing from an array 
+                        // which we're also iterating
+                        var rs = this.renderStack.concat();
+
+                        for (var s=0, l = rs.length; s < l; ++s) {
 
                             renderer = null;
 
-                            var rArray = this.renderStack[s],
+                            var rArray = rs[s],
                                 type = rArray[0],
                                 month,
                                 day,
@@ -3175,6 +3185,7 @@ Calendar.prototype = {
                                         renderer = rArray[2];
                                         this.renderStack.splice(s,1);
                                     }
+
                                     break;
                                 case Calendar.MONTH_DAY:
                                     month = rArray[1][0];
@@ -3230,13 +3241,15 @@ Calendar.prototype = {
                         cellRenderers[cellRenderers.length]=cal.renderCellStyleSelected; 
                     }
 
-                    if ((mindate && (workingDate.getTime() < mindate.getTime())) ||
-                        (maxdate && (workingDate.getTime() > maxdate.getTime()))
-                    ) {
-                        cellRenderers[cellRenderers.length]=cal.renderOutOfBoundsDate;
+                    if (oom) {
+                        cellRenderers[cellRenderers.length] = cal.styleCellNotThisMonth; 
+                    }
+
+                    if ((mindate && (workingDate.getTime() < mindate.getTime())) || (maxdate && (workingDate.getTime() > maxdate.getTime()))) {
+                        cellRenderers[cellRenderers.length] = cal.renderOutOfBoundsDate;
                     } else {
-                        cellRenderers[cellRenderers.length]=cal.styleCellDefault;
-                        cellRenderers[cellRenderers.length]=cal.renderCellDefault; 
+                        cellRenderers[cellRenderers.length] = cal.styleCellDefault;
+                        cellRenderers[cellRenderers.length] = cal.renderCellDefault;
                     }
 
                     for (var x=0; x < cellRenderers.length; ++x) {
@@ -3287,19 +3300,17 @@ Calendar.prototype = {
     },
     
     /**
-    * Renders the calendar footer. In the default implementation, there is
-    * no footer.
+    * Renders the calendar footer. In the default implementation, there is no footer. NOTE: The contents of the array passed into this method are added to the DOM as HTML, and should be escaped by the implementor if coming from an external source.
     * @method renderFooter
-    * @param {Array} html The current working HTML array
-    * @return {Array} The current working HTML array
+    * @param {HTML[]} html The current working HTML array
+    * @return {HTML[]} The current working HTML array
     */
     renderFooter : function(html) { return html; },
     
     /**
     * Renders the calendar after it has been configured. The render() method has a specific call chain that will execute
     * when the method is called: renderHeader, renderBody, renderFooter.
-    * Refer to the documentation for those methods for information on 
-    * individual render tasks.
+    * Refer to the documentation for those methods for information on individual render tasks.
     * @method render
     */
     render : function() {
@@ -3313,7 +3324,8 @@ Calendar.prototype = {
 
         Event.purgeElement(this.oDomContainer, true);
 
-        var html = [];
+        var html = [], 
+            table;
 
         html[html.length] = '<table cellSpacing="0" class="' + this.Style.CSS_CALENDAR + ' y' + (workingDate.getFullYear() + this.Locale.YEAR_OFFSET) +'" id="' + this.id + '">';
         html = this.renderHeader(html);
@@ -3321,24 +3333,15 @@ Calendar.prototype = {
         html = this.renderFooter(html);
         html[html.length] = '</table>';
 
-        try {
-			this.oDomContainer.innerHTML = html.join("\n");
-		} catch (e) {
-			// attempt workaround when innerHTML replacement fails
-			var c=this.oDomContainer;
-			if (c.childNodes&&c.childNodes.length&&c.childNodes.length>0) {
-				while (c.childNodes.length>0) {
-					c.removeChild(c.childNodes[0]);
-				}
-			}
-			var a=document.createElement("div");
-			a.innerHTML = html.join("\n");
-			c.appendChild(a);
-		}
+        this.oDomContainer.innerHTML = html.join("\n");
 
         this.applyListeners();
-        this.cells = Dom.getElementsByClassName(this.Style.CSS_CELL, "td", this.id);
-    
+
+        // Using oDomContainer.ownerDocument, to allow for cross-frame rendering
+        table = ((this._oDoc) && this._oDoc.getElementById(this.id)) || (this.id);
+
+        this.cells = Dom.getElementsByClassName(this.Style.CSS_CELL, "td", table);
+
         this.cfg.refireEvent(DEF_CFG.TITLE.key);
         this.cfg.refireEvent(DEF_CFG.CLOSE.key);
         this.cfg.refireEvent(DEF_CFG.IFRAME.key);
@@ -3401,6 +3404,10 @@ Calendar.prototype = {
         Event.addListener(this.oDomContainer, "mouseout", this.doCellMouseOut, this);
     },
 
+    /**
+    * Applies the DOM listeners to activate the Calendar Navigator.
+    * @method applyNavListeners
+    */
     applyNavListeners : function() {
         var calParent = this.parent || this,
             cal = this,
@@ -3504,7 +3511,6 @@ Calendar.prototype = {
     
     /**
     * Renders a cell that falls before the minimum date or after the maximum date.
-    * widget class.
     * @method renderOutOfBoundsDate
     * @param {Date}     workingDate  The current working Date object being used to generate the calendar
     * @param {HTMLTableCellElement} cell   The current working cell in the calendar
@@ -3518,10 +3524,11 @@ Calendar.prototype = {
     },
 
     /**
-    * Renders the row header for a week.
+    * Renders the row header HTML for a week.
+    *
     * @method renderRowHeader
     * @param {Number} weekNum The week number of the current row
-    * @param {Array} cell The current working HTML array
+    * @param {HTML[]} cell The current working HTML array
     */
     renderRowHeader : function(weekNum, html) {
         html[html.length] = '<th class="' + this.Style.CSS_ROW_HEADER + '">' + weekNum + '</th>';
@@ -3529,21 +3536,24 @@ Calendar.prototype = {
     },
 
     /**
-    * Renders the row footer for a week.
+    * Renders the row footer HTML for a week.
+    *
     * @method renderRowFooter
     * @param {Number} weekNum The week number of the current row
-    * @param {Array} cell The current working HTML array
+    * @param {HTML[]} cell The current working HTML array
     */
     renderRowFooter : function(weekNum, html) {
         html[html.length] = '<th class="' + this.Style.CSS_ROW_FOOTER + '">' + weekNum + '</th>';
         return html;
     },
-    
+
     /**
     * Renders a single standard calendar cell in the calendar widget table.
+    *
     * All logic for determining how a standard default cell will be rendered is 
     * encapsulated in this method, and must be accounted for when extending the
     * widget class.
+    *
     * @method renderCellDefault
     * @param {Date}     workingDate  The current working Date object being used to generate the calendar
     * @param {HTMLTableCellElement} cell   The current working cell in the calendar
@@ -3624,10 +3634,11 @@ Calendar.prototype = {
     renderCellStyleSelected : function(workingDate, cell) {
         Dom.addClass(cell, this.Style.CSS_CELL_SELECTED);
     },
-    
+
     /**
     * Applies the default style used for rendering dates that are not a part of the current
     * month (preceding or trailing the cells for the current month)
+    *
     * @method renderCellNotThisMonth
     * @param {Date}     workingDate  The current working Date object being used to generate the calendar
     * @param {HTMLTableCellElement} cell   The current working cell in the calendar
@@ -3635,11 +3646,20 @@ Calendar.prototype = {
     *   should not be terminated
     */
     renderCellNotThisMonth : function(workingDate, cell) {
-        Dom.addClass(cell, this.Style.CSS_CELL_OOM);
+        this.styleCellNotThisMonth(workingDate, cell);
         cell.innerHTML=workingDate.getDate();
         return Calendar.STOP_RENDER;
     },
-    
+
+    /** Applies the style used for rendering out-of-month dates to the current calendar cell
+    * @method styleCellNotThisMonth
+    * @param {Date}                 workingDate     The current working Date object being used to generate the calendar
+    * @param {HTMLTableCellElement} cell            The current working cell in the calendar
+    */
+    styleCellNotThisMonth : function(workingDate, cell) {
+        YAHOO.util.Dom.addClass(cell, this.Style.CSS_CELL_OOM);
+    },
+
     /**
     * Renders the current calendar cell as a non-selectable "black-out" date using the default
     * restricted style.
@@ -3959,8 +3979,8 @@ Calendar.prototype = {
                 selectDate = cellDate.concat();
 
             if (cellDateIndex > -1) {
-                if (this.cfg.getProperty(DEF_CFG.PAGEDATE.key).getMonth() == dCellDate.getMonth() &&
-                    this.cfg.getProperty(DEF_CFG.PAGEDATE.key).getFullYear() == dCellDate.getFullYear()) {
+                if ((this.cfg.getProperty(DEF_CFG.PAGEDATE.key).getMonth() == dCellDate.getMonth() &&
+                    this.cfg.getProperty(DEF_CFG.PAGEDATE.key).getFullYear() == dCellDate.getFullYear()) || this.cfg.getProperty(DEF_CFG.OOM_SELECT.key)) {
                     Dom.removeClass(cell, this.Style.CSS_CELL_SELECTED);
                 }
                 selected.splice(cellDateIndex, 1);
@@ -4342,7 +4362,7 @@ Calendar.prototype = {
     resetRenderers : function() {
         this.renderStack = this._renderStack.concat();
     },
-    
+
     /**
      * Removes all custom renderers added to the Calendar through the addRenderer, addMonthRenderer and 
      * addWeekdayRenderer methods. Calendar's render method needs to be called after removing renderers 
@@ -4366,6 +4386,9 @@ Calendar.prototype = {
     /**
     * Adds a renderer to the render stack. The function reference passed to this method will be executed
     * when a date cell matches the conditions specified in the date string for this renderer.
+    * 
+    * <p>NOTE: The contents of the cell set by the renderer will be added to the DOM as HTML. The custom renderer implementation should 
+    * escape markup used to set the cell contents, if coming from an external source.<p>
     * @method addRenderer
     * @param {String} sDates  A date string to associate with the specified renderer. Valid formats
     *         include date (12/24/2005), month/day (12/24), and range (12/1/2004-1/1/2005)
@@ -4407,8 +4430,11 @@ Calendar.prototype = {
     },
 
     /**
-    * Adds a month to the render stack. The function reference passed to this method will be executed
-    * when a date cell matches the month passed to this method.
+    * Adds a month renderer to the render stack. The function reference passed to this method will be executed
+    * when a date cell matches the month passed to this method
+    * 
+    * <p>NOTE: The contents of the cell set by the renderer will be added to the DOM as HTML. The custom renderer implementation should 
+    * escape markup used to set the cell contents, if coming from an external source.<p>
     * @method addMonthRenderer
     * @param {Number} month  The month (1-12) to associate with this renderer
     * @param {Function} fnRender The function executed to render cells that match the render rules for this renderer.
@@ -4418,8 +4444,12 @@ Calendar.prototype = {
     },
 
     /**
-    * Adds a weekday to the render stack. The function reference passed to this method will be executed
+    * Adds a weekday renderer to the render stack. The function reference passed to this method will be executed
     * when a date cell matches the weekday passed to this method.
+    *
+    * <p>NOTE: The contents of the cell set by the renderer will be added to the DOM as HTML. The custom renderer implementation should 
+    * escape HTML used to set the cell contents, if coming from an external source.<p>
+    *
     * @method addWeekdayRenderer
     * @param {Number} weekday  The weekday (Sunday = 1, Monday = 2 ... Saturday = 7) to associate with this renderer
     * @param {Function} fnRender The function executed to render cells that match the render rules for this renderer.
@@ -4769,12 +4799,6 @@ CalendarGroup.prototype = {
 
         this.cfg.fireQueue();
 
-        // OPERA HACK FOR MISWRAPPED FLOATS
-        if (YAHOO.env.ua.opera){
-            this.renderEvent.subscribe(this._fixWidth, this, true);
-            this.showEvent.subscribe(this._fixWidth, this, true);
-        }
-
     },
 
     setupConfig : function() {
@@ -4827,9 +4851,9 @@ CalendarGroup.prototype = {
         cfg.addProperty(DEF_CFG.SELECTED.key, { value:[], handler:this.configSelected } );
 
         /**
-        * The title to display above the CalendarGroup's month header
+        * The title to display above the CalendarGroup's month header. The title is inserted into the DOM as HTML, and should be escaped by the implementor if coming from an external source.
         * @config title
-        * @type String
+        * @type HTML
         * @default ""
         */
         cfg.addProperty(DEF_CFG.TITLE.key, { value:DEF_CFG.TITLE.value, handler:this.configTitle } );
@@ -4869,8 +4893,6 @@ CalendarGroup.prototype = {
         */
         cfg.addProperty(DEF_CFG.MAXDATE.key, { value:DEF_CFG.MAXDATE.value, handler:this.delegateConfig  } );
 
-        // Options properties
-
         /**
         * True if the Calendar should allow multiple selections. False by default.
         * @config MULTI_SELECT
@@ -4880,6 +4902,14 @@ CalendarGroup.prototype = {
         cfg.addProperty(DEF_CFG.MULTI_SELECT.key, { value:DEF_CFG.MULTI_SELECT.value, handler:this.delegateConfig, validator:cfg.checkBoolean } );
 
         /**
+        * True if the Calendar should allow selection of out-of-month dates. False by default.
+        * @config OOM_SELECT
+        * @type Boolean
+        * @default false
+        */
+        cfg.addProperty(DEF_CFG.OOM_SELECT.key, { value:DEF_CFG.OOM_SELECT.value, handler:this.delegateConfig, validator:cfg.checkBoolean } );
+
+        /**
         * The weekday the week begins on. Default is 0 (Sunday).
         * @config START_WEEKDAY
         * @type number
@@ -4918,18 +4948,18 @@ CalendarGroup.prototype = {
         * @default false
         */  
         cfg.addProperty(DEF_CFG.HIDE_BLANK_WEEKS.key,{ value:DEF_CFG.HIDE_BLANK_WEEKS.value, handler:this.delegateConfig, validator:cfg.checkBoolean } );
-        
+
         /**
-        * The image that should be used for the left navigation arrow.
+        * The image URL that should be used for the left navigation arrow. The image URL is inserted into the DOM as HTML, and should be escaped by the implementor if coming from an external source.
         * @config NAV_ARROW_LEFT
         * @type String
         * @deprecated You can customize the image by overriding the default CSS class for the left arrow - "calnavleft"
         * @default null
         */  
         cfg.addProperty(DEF_CFG.NAV_ARROW_LEFT.key, { value:DEF_CFG.NAV_ARROW_LEFT.value, handler:this.delegateConfig } );
-        
+
         /**
-        * The image that should be used for the right navigation arrow.
+        * The image URL that should be used for the right navigation arrow. The image URL is inserted into the DOM as HTML, and should be escaped by the implementor if coming from an external source.
         * @config NAV_ARROW_RIGHT
         * @type String
         * @deprecated You can customize the image by overriding the default CSS class for the right arrow - "calnavright"
@@ -4940,51 +4970,51 @@ CalendarGroup.prototype = {
         // Locale properties
         
         /**
-        * The short month labels for the current locale.
+        * The short month labels for the current locale. The month labels are inserted into the DOM as HTML, and should be escaped by the implementor if coming from an external source.
         * @config MONTHS_SHORT
-        * @type String[]
+        * @type HTML[]
         * @default ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
         */
         cfg.addProperty(DEF_CFG.MONTHS_SHORT.key, { value:DEF_CFG.MONTHS_SHORT.value, handler:this.delegateConfig } );
         
         /**
-        * The long month labels for the current locale.
+        * The long month labels for the current locale. The month labels are inserted into the DOM as HTML, and should be escaped by the implementor if coming from an external source.
         * @config MONTHS_LONG
-        * @type String[]
+        * @type HTML[]
         * @default ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
-        */  
+        */ 
         cfg.addProperty(DEF_CFG.MONTHS_LONG.key,  { value:DEF_CFG.MONTHS_LONG.value, handler:this.delegateConfig } );
         
         /**
-        * The 1-character weekday labels for the current locale.
+        * The 1-character weekday labels for the current locale. The weekday labels are inserted into the DOM as HTML, and should be escaped by the implementor if coming from an external source.
         * @config WEEKDAYS_1CHAR
-        * @type String[]
+        * @type HTML[]
         * @default ["S", "M", "T", "W", "T", "F", "S"]
-        */  
+        */ 
         cfg.addProperty(DEF_CFG.WEEKDAYS_1CHAR.key, { value:DEF_CFG.WEEKDAYS_1CHAR.value, handler:this.delegateConfig } );
         
         /**
-        * The short weekday labels for the current locale.
+        * The short weekday labels for the current locale. The weekday labels are inserted into the DOM as HTML, and should be escaped by the implementor if coming from an external source.
         * @config WEEKDAYS_SHORT
-        * @type String[]
+        * @type HTML[]
         * @default ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"]
-        */  
+        */ 
         cfg.addProperty(DEF_CFG.WEEKDAYS_SHORT.key, { value:DEF_CFG.WEEKDAYS_SHORT.value, handler:this.delegateConfig } );
         
         /**
-        * The medium weekday labels for the current locale.
+        * The medium weekday labels for the current locale. The weekday labels are inserted into the DOM as HTML, and should be escaped by the implementor if coming from an external source.
         * @config WEEKDAYS_MEDIUM
-        * @type String[]
+        * @type HTML[]
         * @default ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
-        */  
+        */ 
         cfg.addProperty(DEF_CFG.WEEKDAYS_MEDIUM.key, { value:DEF_CFG.WEEKDAYS_MEDIUM.value, handler:this.delegateConfig } );
         
         /**
-        * The long weekday labels for the current locale.
+        * The long weekday labels for the current locale. The weekday labels are inserted into the DOM as HTML, and should be escaped by the implementor if coming from an external source.
         * @config WEEKDAYS_LONG
-        * @type String[]
+        * @type HTML[]
         * @default ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
-        */  
+        */ 
         cfg.addProperty(DEF_CFG.WEEKDAYS_LONG.key, { value:DEF_CFG.WEEKDAYS_LONG.value, handler:this.delegateConfig } );
     
         /**
@@ -5116,9 +5146,49 @@ CalendarGroup.prototype = {
         cfg.addProperty(DEF_CFG.MY_LABEL_YEAR_SUFFIX.key, { value:DEF_CFG.MY_LABEL_YEAR_SUFFIX.value, handler:this.delegateConfig } );
 
         /**
-        * Configuration for the Month Year Navigation UI. By default it is disabled
-        * @config NAV
-        * @type Object
+        * Configuration for the Month/Year CalendarNavigator UI which allows the user to jump directly to a 
+        * specific Month/Year without having to scroll sequentially through months.
+        * <p>
+        * Setting this property to null (default value) or false, will disable the CalendarNavigator UI.
+        * </p>
+        * <p>
+        * Setting this property to true will enable the CalendarNavigatior UI with the default CalendarNavigator configuration values.
+        * </p>
+        * <p>
+        * This property can also be set to an object literal containing configuration properties for the CalendarNavigator UI.
+        * The configuration object expects the the following case-sensitive properties, with the "strings" property being a nested object.
+        * Any properties which are not provided will use the default values (defined in the CalendarNavigator class).
+        * </p>
+        * <dl>
+        * <dt>strings</dt>
+        * <dd><em>Object</em> :  An object with the properties shown below, defining the string labels to use in the Navigator's UI. The strings are inserted into the DOM as HTML, and should be escaped by the implementor if coming from an external source. 
+        *     <dl>
+        *         <dt>month</dt><dd><em>HTML</em> : The markup to use for the month label. Defaults to "Month".</dd>
+        *         <dt>year</dt><dd><em>HTML</em> : The markup to use for the year label. Defaults to "Year".</dd>
+        *         <dt>submit</dt><dd><em>HTML</em> : The markup to use for the submit button label. Defaults to "Okay".</dd>
+        *         <dt>cancel</dt><dd><em>HTML</em> : The markup to use for the cancel button label. Defaults to "Cancel".</dd>
+        *         <dt>invalidYear</dt><dd><em>HTML</em> : The markup to use for invalid year values. Defaults to "Year needs to be a number".</dd>
+        *     </dl>
+        * </dd>
+        * <dt>monthFormat</dt><dd><em>String</em> : The month format to use. Either YAHOO.widget.Calendar.LONG, or YAHOO.widget.Calendar.SHORT. Defaults to YAHOO.widget.Calendar.LONG</dd>
+        * <dt>initialFocus</dt><dd><em>String</em> : Either "year" or "month" specifying which input control should get initial focus. Defaults to "year"</dd>
+        * </dl>
+        * <p>E.g.</p>
+        * <pre>
+        * var navConfig = {
+        *   strings: {
+        *    month:"Calendar Month",
+        *    year:"Calendar Year",
+        *    submit: "Submit",
+        *    cancel: "Cancel",
+        *    invalidYear: "Please enter a valid year"
+        *   },
+        *   monthFormat: YAHOO.widget.Calendar.SHORT,
+        *   initialFocus: "month"
+        * }
+        * </pre>
+        * @config navigator
+        * @type {Object|Boolean}
         * @default null
         */
         cfg.addProperty(DEF_CFG.NAV.key, { value:DEF_CFG.NAV.value, handler:this.configNavigator } );
@@ -5130,9 +5200,9 @@ CalendarGroup.prototype = {
          * @type {Object}
          * @default An object with the properties shown below:
          *     <dl>
-         *         <dt>previousMonth</dt><dd><em>String</em> : The string to use for the "Previous Month" navigation UI. Defaults to "Previous Month".</dd>
-         *         <dt>nextMonth</dt><dd><em>String</em> : The string to use for the "Next Month" navigation UI. Defaults to "Next Month".</dd>
-         *         <dt>close</dt><dd><em>String</em> : The string to use for the close button label. Defaults to "Close".</dd>
+         *         <dt>previousMonth</dt><dd><em>HTML</em> : The markup to use for the "Previous Month" navigation label. Defaults to "Previous Month". The string is added to the DOM as HTML, and should be escaped by the implementor if coming from an external source.</dd>
+         *         <dt>nextMonth</dt><dd><em>HTML</em> : The markup to use for the "Next Month" navigation UI. Defaults to "Next Month". The string is added to the DOM as HTML, and should be escaped by the implementor if coming from an external source.</dd>
+         *         <dt>close</dt><dd><em>HTML</em> : The markup to use for the close button label. Defaults to "Close". The string is added to the DOM as HTML, and should be escaped by the implementor if coming from an external source.</dd>
          *     </dl>
          */
         cfg.addProperty(DEF_CFG.STRINGS.key, { 
@@ -5734,6 +5804,9 @@ CalendarGroup.prototype = {
     /**
     * Adds a renderer to the render stack. The function reference passed to this method will be executed
     * when a date cell matches the conditions specified in the date string for this renderer.
+    * 
+    * <p>NOTE: The contents of the cell set by the renderer will be added to the DOM as HTML. The custom renderer implementation should 
+    * escape markup used to set the cell contents, if coming from an external source.<p>
     * @method addRenderer
     * @param {String} sDates  A date string to associate with the specified renderer. Valid formats
     *         include date (12/24/2005), month/day (12/24), and range (12/1/2004-1/1/2005)
@@ -5747,8 +5820,11 @@ CalendarGroup.prototype = {
     },
 
     /**
-    * Adds a month to the render stack. The function reference passed to this method will be executed
-    * when a date cell matches the month passed to this method.
+    * Adds a month renderer to the render stack. The function reference passed to this method will be executed
+    * when a date cell matches the month passed to this method
+    * 
+    * <p>NOTE: The contents of the cell set by the renderer will be added to the DOM as HTML. The custom renderer implementation should 
+    * escape markup used to set the cell contents, if coming from an external source.<p>
     * @method addMonthRenderer
     * @param {Number} month  The month (1-12) to associate with this renderer
     * @param {Function} fnRender The function executed to render cells that match the render rules for this renderer.
@@ -5761,10 +5837,14 @@ CalendarGroup.prototype = {
     },
 
     /**
-    * Adds a weekday to the render stack. The function reference passed to this method will be executed
+    * Adds a weekday renderer to the render stack. The function reference passed to this method will be executed
     * when a date cell matches the weekday passed to this method.
+    *
+    * <p>NOTE: The contents of the cell set by the renderer will be added to the DOM as HTML. The custom renderer implementation should 
+    * escape HTML used to set the cell contents, if coming from an external source.<p>
+    *
     * @method addWeekdayRenderer
-    * @param {Number} weekday  The weekday (1-7) to associate with this renderer. 1=Sunday, 2=Monday etc.
+    * @param {Number} weekday  The weekday (Sunday = 1, Monday = 2 ... Saturday = 7) to associate with this renderer
     * @param {Function} fnRender The function executed to render cells that match the render rules for this renderer.
     */
     addWeekdayRenderer : function(weekday, fnRender) {
@@ -6010,6 +6090,7 @@ YAHOO.lang.augmentProto(CalendarGroup, Calendar, "buildDayLabel",
                                                  "renderCellStyleToday",
                                                  "renderCellStyleSelected",
                                                  "renderCellNotThisMonth",
+                                                 "styleCellNotThisMonth",
                                                  "renderBodyCellRestricted",
                                                  "initStyles",
                                                  "configTitle",
@@ -6172,11 +6253,11 @@ YAHOO.widget.CalendarNavigator = function(cal) {
      * <dt>strings</dt>
      * <dd><em>Object</em> :  An object with the properties shown below, defining the string labels to use in the Navigator's UI
      *     <dl>
-     *         <dt>month</dt><dd><em>String</em> : The string to use for the month label. Defaults to "Month".</dd>
-     *         <dt>year</dt><dd><em>String</em> : The string to use for the year label. Defaults to "Year".</dd>
-     *         <dt>submit</dt><dd><em>String</em> : The string to use for the submit button label. Defaults to "Okay".</dd>
-     *         <dt>cancel</dt><dd><em>String</em> : The string to use for the cancel button label. Defaults to "Cancel".</dd>
-     *         <dt>invalidYear</dt><dd><em>String</em> : The string to use for invalid year values. Defaults to "Year needs to be a number".</dd>
+     *         <dt>month</dt><dd><em>HTML</em> : The markup to use for the month label. Defaults to "Month".</dd>
+     *         <dt>year</dt><dd><em>HTML</em> : The markup to use for the year label. Defaults to "Year".</dd>
+     *         <dt>submit</dt><dd><em>HTML</em> : The markup to use for the submit button label. Defaults to "Okay".</dd>
+     *         <dt>cancel</dt><dd><em>HTML</em> : The markup to use for the cancel button label. Defaults to "Cancel".</dd>
+     *         <dt>invalidYear</dt><dd><em>HTML</em> : The markup to use for invalid year values. Defaults to "Year needs to be a number".</dd>
      *     </dl>
      * </dd>
      * <dt>monthFormat</dt><dd><em>String</em> : The month format to use. Either YAHOO.widget.Calendar.LONG, or YAHOO.widget.Calendar.SHORT. Defaults to YAHOO.widget.Calendar.LONG</dd>
@@ -6197,7 +6278,7 @@ YAHOO.widget.CalendarNavigator = function(cal) {
         monthFormat: YAHOO.widget.Calendar.LONG,
         initialFocus: "year"
     };
-    
+
     /**
      * Object literal containing the default configuration values for the CalendarNavigator
      * @property _DEFAULT_CFG
@@ -6665,12 +6746,12 @@ YAHOO.widget.CalendarNavigator.prototype = {
     },
 
     /**
-     * Renders the contents of the navigator
+     * Renders the contents of the navigator. NOTE: The contents of the array passed into this method are added to the DOM as HTML, and should be escaped by the implementor if coming from an external source.
      * 
      * @method renderNavContents
      * 
-     * @param {Array} html The HTML buffer to append the HTML to.
-     * @return {Array} A reference to the buffer passed in.
+     * @param {HTML[]} html The HTML buffer to append the HTML to.
+     * @return {HTML[]} A reference to the buffer passed in.
      */
     renderNavContents : function(html) {
         var NAV = YAHOO.widget.CalendarNavigator,
@@ -6692,11 +6773,11 @@ YAHOO.widget.CalendarNavigator.prototype = {
     },
 
     /**
-     * Renders the month label and control for the navigator
+     * Renders the month label and control for the navigator. NOTE: The contents of the array passed into this method are added to the DOM as HTML, and should be escaped by the implementor if coming from an external source.
      * 
      * @method renderNavContents
-     * @param {Array} html The HTML buffer to append the HTML to.
-     * @return {Array} A reference to the buffer passed in.
+     * @param {HTML[]} html The HTML buffer to append the HTML to.
+     * @return {HTML[]} A reference to the buffer passed in.
      */
     renderMonth : function(html) {
         var NAV = YAHOO.widget.CalendarNavigator,
@@ -6723,7 +6804,7 @@ YAHOO.widget.CalendarNavigator.prototype = {
     },
 
     /**
-     * Renders the year label and control for the navigator
+     * Renders the year label and control for the navigator. NOTE: The contents of the array passed into this method are added to the DOM as HTML, and should be escaped by the implementor if coming from an external source. 
      * 
      * @method renderYear
      * @param {Array} html The HTML buffer to append the HTML to.
@@ -6745,10 +6826,11 @@ YAHOO.widget.CalendarNavigator.prototype = {
     },
 
     /**
-     * Renders the submit/cancel buttons for the navigator
+     * Renders the submit/cancel buttons for the navigator. NOTE: The contents of the array passed into this method are added to the DOM as HTML, and should be escaped by the implementor if coming from an external source.
      * 
-     * @method renderButton
-     * @return {String} The HTML created for the Button UI
+     * @method renderButtons
+     * @param {Array} html The HTML buffer to append the HTML to.
+     * @return {Array} A reference to the buffer passed in.
      */
     renderButtons : function(html) {
         var C = YAHOO.widget.CalendarNavigator.CLASSES;
@@ -6936,9 +7018,10 @@ YAHOO.widget.CalendarNavigator.prototype = {
     },
 
     /**
-     * Displays an error message in the Navigator's error panel
+     * Displays an error message in the Navigator's error panel.
+     * 
      * @method setError
-     * @param {String} msg The error message to display
+     * @param {HTML} msg The markup for the error message to display. NOTE: The msg passed into this method is added to the DOM as HTML, and should be escaped by the implementor if coming from an external source. 
      */
     setError : function(msg) {
         if (this.errorEl) {
@@ -7304,4 +7387,4 @@ YAHOO.widget.CalendarNavigator.prototype = {
     __isMac : (navigator.userAgent.toLowerCase().indexOf("macintosh") != -1)
 
 };
-YAHOO.register("calendar", YAHOO.widget.Calendar, {version: "2.8.2r1", build: "7"});
+YAHOO.register("calendar", YAHOO.widget.Calendar, {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/calendar/wicket-date.js
----------------------------------------------------------------------
diff --git a/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/wicket-date.js b/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/wicket-date.js
index a892bbf..d2c295b 100644
--- a/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/wicket-date.js
+++ b/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/calendar/wicket-date.js
@@ -303,4 +303,4 @@ Wicket.DateTime.init2 = function(widgetId, componentId, calendarInit, datePatter
 	});
 }
 
-YAHOO.register("wicket-date", Wicket.DateTime, {version: "1.5", build: "RC6"});
+YAHOO.register("wicket-date", Wicket.DateTime, {version: "1.5.5", build: "1"});

http://git-wip-us.apache.org/repos/asf/wicket/blob/e4194d49/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/dom/dom-min.js
----------------------------------------------------------------------
diff --git a/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/dom/dom-min.js b/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/dom/dom-min.js
index 6abc47b..194f1e8 100644
--- a/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/dom/dom-min.js
+++ b/wicket-datetime/src/main/java/org/apache/wicket/extensions/yui/dom/dom-min.js
@@ -1,9 +1,9 @@
 /*
-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
 */
-(function(){YAHOO.env._id_counter=YAHOO.env._id_counter||0;var E=YAHOO.util,L=YAHOO.lang,m=YAHOO.env.ua,A=YAHOO.lang.trim,d={},h={},N=/^t(?:able|d|h)$/i,X=/color$/i,K=window.document,W=K.documentElement,e="ownerDocument",n="defaultView",v="documentElement",t="compatMode",b="offsetLeft",P="offsetTop",u="offsetParent",Z="parentNode",l="nodeType",C="tagName",O="scrollLeft",i="scrollTop",Q="getBoundingClientRect",w="getComputedStyle",a="currentStyle",M="CSS1Compat",c="BackCompat",g="class",F="className",J="",B=" ",s="(?:^|\\s)",k="(?= |$)",U="g",p="position",f="fixed",V="relative",j="left",o="top",r="medium",q="borderLeftWidth",R="borderTopWidth",D=m.opera,I=m.webkit,H=m.gecko,T=m.ie;E.Dom={CUSTOM_ATTRIBUTES:(!W.hasAttribute)?{"for":"htmlFor","class":F}:{"htmlFor":"for","className":g},DOT_ATTRIBUTES:{},get:function(z){var AB,x,AA,y,Y,G;if(z){if(z[l]||z.item){return z;}if(typeof z==="string"){AB=z;z=K.getElementById(z);G=(z)?z.attributes:null;if(z&&G&&G.id&&G.id.value===AB){retur
 n z;}else{if(z&&K.all){z=null;x=K.all[AB];for(y=0,Y=x.length;y<Y;++y){if(x[y].id===AB){return x[y];}}}}return z;}if(YAHOO.util.Element&&z instanceof YAHOO.util.Element){z=z.get("element");}if("length" in z){AA=[];for(y=0,Y=z.length;y<Y;++y){AA[AA.length]=E.Dom.get(z[y]);}return AA;}return z;}return null;},getComputedStyle:function(G,Y){if(window[w]){return G[e][n][w](G,null)[Y];}else{if(G[a]){return E.Dom.IE_ComputedStyle.get(G,Y);}}},getStyle:function(G,Y){return E.Dom.batch(G,E.Dom._getStyle,Y);},_getStyle:function(){if(window[w]){return function(G,y){y=(y==="float")?y="cssFloat":E.Dom._toCamel(y);var x=G.style[y],Y;if(!x){Y=G[e][n][w](G,null);if(Y){x=Y[y];}}return x;};}else{if(W[a]){return function(G,y){var x;switch(y){case"opacity":x=100;try{x=G.filters["DXImageTransform.Microsoft.Alpha"].opacity;}catch(z){try{x=G.filters("alpha").opacity;}catch(Y){}}return x/100;case"float":y="styleFloat";default:y=E.Dom._toCamel(y);x=G[a]?G[a][y]:null;return(G.style[y]||x);}};}}}(),set
 Style:function(G,Y,x){E.Dom.batch(G,E.Dom._setStyle,{prop:Y,val:x});},_setStyle:function(){if(T){return function(Y,G){var x=E.Dom._toCamel(G.prop),y=G.val;if(Y){switch(x){case"opacity":if(L.isString(Y.style.filter)){Y.style.filter="alpha(opacity="+y*100+")";if(!Y[a]||!Y[a].hasLayout){Y.style.zoom=1;}}break;case"float":x="styleFloat";default:Y.style[x]=y;}}else{}};}else{return function(Y,G){var x=E.Dom._toCamel(G.prop),y=G.val;if(Y){if(x=="float"){x="cssFloat";}Y.style[x]=y;}else{}};}}(),getXY:function(G){return E.Dom.batch(G,E.Dom._getXY);},_canPosition:function(G){return(E.Dom._getStyle(G,"display")!=="none"&&E.Dom._inDoc(G));},_getXY:function(){if(K[v][Q]){return function(y){var z,Y,AA,AF,AE,AD,AC,G,x,AB=Math.floor,AG=false;if(E.Dom._canPosition(y)){AA=y[Q]();AF=y[e];z=E.Dom.getDocumentScrollLeft(AF);Y=E.Dom.getDocumentScrollTop(AF);AG=[AB(AA[j]),AB(AA[o])];if(T&&m.ie<8){AE=2;AD=2;AC=AF[t];if(m.ie===6){if(AC!==c){AE=0;AD=0;}}if((AC===c)){G=S(AF[v],q);x=S(AF[v],R);if(G!==r)
 {AE=parseInt(G,10);}if(x!==r){AD=parseInt(x,10);}}AG[0]-=AE;AG[1]-=AD;}if((Y||z)){AG[0]+=z;AG[1]+=Y;}AG[0]=AB(AG[0]);AG[1]=AB(AG[1]);}else{}return AG;};}else{return function(y){var x,Y,AA,AB,AC,z=false,G=y;if(E.Dom._canPosition(y)){z=[y[b],y[P]];x=E.Dom.getDocumentScrollLeft(y[e]);Y=E.Dom.getDocumentScrollTop(y[e]);AC=((H||m.webkit>519)?true:false);while((G=G[u])){z[0]+=G[b];z[1]+=G[P];if(AC){z=E.Dom._calcBorders(G,z);}}if(E.Dom._getStyle(y,p)!==f){G=y;while((G=G[Z])&&G[C]){AA=G[i];AB=G[O];if(H&&(E.Dom._getStyle(G,"overflow")!=="visible")){z=E.Dom._calcBorders(G,z);}if(AA||AB){z[0]-=AB;z[1]-=AA;}}z[0]+=x;z[1]+=Y;}else{if(D){z[0]-=x;z[1]-=Y;}else{if(I||H){z[0]+=x;z[1]+=Y;}}}z[0]=Math.floor(z[0]);z[1]=Math.floor(z[1]);}else{}return z;};}}(),getX:function(G){var Y=function(x){return E.Dom.getXY(x)[0];};return E.Dom.batch(G,Y,E.Dom,true);},getY:function(G){var Y=function(x){return E.Dom.getXY(x)[1];};return E.Dom.batch(G,Y,E.Dom,true);},setXY:function(G,x,Y){E.Dom.batch(G,E.Dom.
 _setXY,{pos:x,noRetry:Y});},_setXY:function(G,z){var AA=E.Dom._getStyle(G,p),y=E.Dom.setStyle,AD=z.pos,Y=z.noRetry,AB=[parseInt(E.Dom.getComputedStyle(G,j),10),parseInt(E.Dom.getComputedStyle(G,o),10)],AC,x;if(AA=="static"){AA=V;y(G,p,AA);}AC=E.Dom._getXY(G);if(!AD||AC===false){return false;}if(isNaN(AB[0])){AB[0]=(AA==V)?0:G[b];}if(isNaN(AB[1])){AB[1]=(AA==V)?0:G[P];}if(AD[0]!==null){y(G,j,AD[0]-AC[0]+AB[0]+"px");}if(AD[1]!==null){y(G,o,AD[1]-AC[1]+AB[1]+"px");}if(!Y){x=E.Dom._getXY(G);if((AD[0]!==null&&x[0]!=AD[0])||(AD[1]!==null&&x[1]!=AD[1])){E.Dom._setXY(G,{pos:AD,noRetry:true});}}},setX:function(Y,G){E.Dom.setXY(Y,[G,null]);},setY:function(G,Y){E.Dom.setXY(G,[null,Y]);},getRegion:function(G){var Y=function(x){var y=false;if(E.Dom._canPosition(x)){y=E.Region.getRegion(x);}else{}return y;};return E.Dom.batch(G,Y,E.Dom,true);},getClientWidth:function(){return E.Dom.getViewportWidth();},getClientHeight:function(){return E.Dom.getViewportHeight();},getElementsByClassName:fu
 nction(AB,AF,AC,AE,x,AD){AF=AF||"*";AC=(AC)?E.Dom.get(AC):null||K;if(!AC){return[];}var Y=[],G=AC.getElementsByTagName(AF),z=E.Dom.hasClass;for(var y=0,AA=G.length;y<AA;++y){if(z(G[y],AB)){Y[Y.length]=G[y];}}if(AE){E.Dom.batch(Y,AE,x,AD);}return Y;},hasClass:function(Y,G){return E.Dom.batch(Y,E.Dom._hasClass,G);},_hasClass:function(x,Y){var G=false,y;if(x&&Y){y=E.Dom._getAttribute(x,F)||J;if(Y.exec){G=Y.test(y);}else{G=Y&&(B+y+B).indexOf(B+Y+B)>-1;}}else{}return G;},addClass:function(Y,G){return E.Dom.batch(Y,E.Dom._addClass,G);},_addClass:function(x,Y){var G=false,y;if(x&&Y){y=E.Dom._getAttribute(x,F)||J;if(!E.Dom._hasClass(x,Y)){E.Dom.setAttribute(x,F,A(y+B+Y));G=true;}}else{}return G;},removeClass:function(Y,G){return E.Dom.batch(Y,E.Dom._removeClass,G);},_removeClass:function(y,x){var Y=false,AA,z,G;if(y&&x){AA=E.Dom._getAttribute(y,F)||J;E.Dom.setAttribute(y,F,AA.replace(E.Dom._getClassRegex(x),J));z=E.Dom._getAttribute(y,F);if(AA!==z){E.Dom.setAttribute(y,F,A(z));Y=tru
 e;if(E.Dom._getAttribute(y,F)===""){G=(y.hasAttribute&&y.hasAttribute(g))?g:F;
-y.removeAttribute(G);}}}else{}return Y;},replaceClass:function(x,Y,G){return E.Dom.batch(x,E.Dom._replaceClass,{from:Y,to:G});},_replaceClass:function(y,x){var Y,AB,AA,G=false,z;if(y&&x){AB=x.from;AA=x.to;if(!AA){G=false;}else{if(!AB){G=E.Dom._addClass(y,x.to);}else{if(AB!==AA){z=E.Dom._getAttribute(y,F)||J;Y=(B+z.replace(E.Dom._getClassRegex(AB),B+AA)).split(E.Dom._getClassRegex(AA));Y.splice(1,0,B+AA);E.Dom.setAttribute(y,F,A(Y.join(J)));G=true;}}}}else{}return G;},generateId:function(G,x){x=x||"yui-gen";var Y=function(y){if(y&&y.id){return y.id;}var z=x+YAHOO.env._id_counter++;if(y){if(y[e]&&y[e].getElementById(z)){return E.Dom.generateId(y,z+x);}y.id=z;}return z;};return E.Dom.batch(G,Y,E.Dom,true)||Y.apply(E.Dom,arguments);},isAncestor:function(Y,x){Y=E.Dom.get(Y);x=E.Dom.get(x);var G=false;if((Y&&x)&&(Y[l]&&x[l])){if(Y.contains&&Y!==x){G=Y.contains(x);}else{if(Y.compareDocumentPosition){G=!!(Y.compareDocumentPosition(x)&16);}}}else{}return G;},inDocument:function(G,Y){
 return E.Dom._inDoc(E.Dom.get(G),Y);},_inDoc:function(Y,x){var G=false;if(Y&&Y[C]){x=x||Y[e];G=E.Dom.isAncestor(x[v],Y);}else{}return G;},getElementsBy:function(Y,AF,AB,AD,y,AC,AE){AF=AF||"*";AB=(AB)?E.Dom.get(AB):null||K;if(!AB){return[];}var x=[],G=AB.getElementsByTagName(AF);for(var z=0,AA=G.length;z<AA;++z){if(Y(G[z])){if(AE){x=G[z];break;}else{x[x.length]=G[z];}}}if(AD){E.Dom.batch(x,AD,y,AC);}return x;},getElementBy:function(x,G,Y){return E.Dom.getElementsBy(x,G,Y,null,null,null,true);},batch:function(x,AB,AA,z){var y=[],Y=(z)?AA:window;x=(x&&(x[C]||x.item))?x:E.Dom.get(x);if(x&&AB){if(x[C]||x.length===undefined){return AB.call(Y,x,AA);}for(var G=0;G<x.length;++G){y[y.length]=AB.call(Y,x[G],AA);}}else{return false;}return y;},getDocumentHeight:function(){var Y=(K[t]!=M||I)?K.body.scrollHeight:W.scrollHeight,G=Math.max(Y,E.Dom.getViewportHeight());return G;},getDocumentWidth:function(){var Y=(K[t]!=M||I)?K.body.scrollWidth:W.scrollWidth,G=Math.max(Y,E.Dom.getViewportWid
 th());return G;},getViewportHeight:function(){var G=self.innerHeight,Y=K[t];if((Y||T)&&!D){G=(Y==M)?W.clientHeight:K.body.clientHeight;}return G;},getViewportWidth:function(){var G=self.innerWidth,Y=K[t];if(Y||T){G=(Y==M)?W.clientWidth:K.body.clientWidth;}return G;},getAncestorBy:function(G,Y){while((G=G[Z])){if(E.Dom._testElement(G,Y)){return G;}}return null;},getAncestorByClassName:function(Y,G){Y=E.Dom.get(Y);if(!Y){return null;}var x=function(y){return E.Dom.hasClass(y,G);};return E.Dom.getAncestorBy(Y,x);},getAncestorByTagName:function(Y,G){Y=E.Dom.get(Y);if(!Y){return null;}var x=function(y){return y[C]&&y[C].toUpperCase()==G.toUpperCase();};return E.Dom.getAncestorBy(Y,x);},getPreviousSiblingBy:function(G,Y){while(G){G=G.previousSibling;if(E.Dom._testElement(G,Y)){return G;}}return null;},getPreviousSibling:function(G){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getPreviousSiblingBy(G);},getNextSiblingBy:function(G,Y){while(G){G=G.nextSibling;if(E.Dom._testElement
 (G,Y)){return G;}}return null;},getNextSibling:function(G){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getNextSiblingBy(G);},getFirstChildBy:function(G,x){var Y=(E.Dom._testElement(G.firstChild,x))?G.firstChild:null;return Y||E.Dom.getNextSiblingBy(G.firstChild,x);},getFirstChild:function(G,Y){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getFirstChildBy(G);},getLastChildBy:function(G,x){if(!G){return null;}var Y=(E.Dom._testElement(G.lastChild,x))?G.lastChild:null;return Y||E.Dom.getPreviousSiblingBy(G.lastChild,x);},getLastChild:function(G){G=E.Dom.get(G);return E.Dom.getLastChildBy(G);},getChildrenBy:function(Y,y){var x=E.Dom.getFirstChildBy(Y,y),G=x?[x]:[];E.Dom.getNextSiblingBy(x,function(z){if(!y||y(z)){G[G.length]=z;}return false;});return G;},getChildren:function(G){G=E.Dom.get(G);if(!G){}return E.Dom.getChildrenBy(G);},getDocumentScrollLeft:function(G){G=G||K;return Math.max(G[v].scrollLeft,G.body.scrollLeft);},getDocumentScrollTop:function(G){G=G||K;return Ma
 th.max(G[v].scrollTop,G.body.scrollTop);},insertBefore:function(Y,G){Y=E.Dom.get(Y);G=E.Dom.get(G);if(!Y||!G||!G[Z]){return null;}return G[Z].insertBefore(Y,G);},insertAfter:function(Y,G){Y=E.Dom.get(Y);G=E.Dom.get(G);if(!Y||!G||!G[Z]){return null;}if(G.nextSibling){return G[Z].insertBefore(Y,G.nextSibling);}else{return G[Z].appendChild(Y);}},getClientRegion:function(){var x=E.Dom.getDocumentScrollTop(),Y=E.Dom.getDocumentScrollLeft(),y=E.Dom.getViewportWidth()+Y,G=E.Dom.getViewportHeight()+x;return new E.Region(x,y,G,Y);},setAttribute:function(Y,G,x){E.Dom.batch(Y,E.Dom._setAttribute,{attr:G,val:x});},_setAttribute:function(x,Y){var G=E.Dom._toCamel(Y.attr),y=Y.val;if(x&&x.setAttribute){if(E.Dom.DOT_ATTRIBUTES[G]){x[G]=y;}else{G=E.Dom.CUSTOM_ATTRIBUTES[G]||G;x.setAttribute(G,y);}}else{}},getAttribute:function(Y,G){return E.Dom.batch(Y,E.Dom._getAttribute,G);},_getAttribute:function(Y,G){var x;G=E.Dom.CUSTOM_ATTRIBUTES[G]||G;if(Y&&Y.getAttribute){x=Y.getAttribute(G,2);}else{
 }return x;},_toCamel:function(Y){var x=d;function G(y,z){return z.toUpperCase();}return x[Y]||(x[Y]=Y.indexOf("-")===-1?Y:Y.replace(/-([a-z])/gi,G));},_getClassRegex:function(Y){var G;if(Y!==undefined){if(Y.exec){G=Y;}else{G=h[Y];if(!G){Y=Y.replace(E.Dom._patterns.CLASS_RE_TOKENS,"\\$1");G=h[Y]=new RegExp(s+Y+k,U);}}}return G;},_patterns:{ROOT_TAG:/^body|html$/i,CLASS_RE_TOKENS:/([\.\(\)\^\$\*\+\?\|\[\]\{\}\\])/g},_testElement:function(G,Y){return G&&G[l]==1&&(!Y||Y(G));},_calcBorders:function(x,y){var Y=parseInt(E.Dom[w](x,R),10)||0,G=parseInt(E.Dom[w](x,q),10)||0;if(H){if(N.test(x[C])){Y=0;G=0;}}y[0]+=G;y[1]+=Y;return y;}};var S=E.Dom[w];if(m.opera){E.Dom[w]=function(Y,G){var x=S(Y,G);if(X.test(G)){x=E.Dom.Color.toRGB(x);}return x;};}if(m.webkit){E.Dom[w]=function(Y,G){var x=S(Y,G);if(x==="rgba(0, 0, 0, 0)"){x="transparent";}return x;};}if(m.ie&&m.ie>=8&&K.documentElement.hasAttribute){E.Dom.DOT_ATTRIBUTES.type=true;}})();YAHOO.util.Region=function(C,D,A,B){this.top=C;this
 .y=C;this[1]=C;this.right=D;this.bottom=A;this.left=B;this.x=B;this[0]=B;
-this.width=this.right-this.left;this.height=this.bottom-this.top;};YAHOO.util.Region.prototype.contains=function(A){return(A.left>=this.left&&A.right<=this.right&&A.top>=this.top&&A.bottom<=this.bottom);};YAHOO.util.Region.prototype.getArea=function(){return((this.bottom-this.top)*(this.right-this.left));};YAHOO.util.Region.prototype.intersect=function(E){var C=Math.max(this.top,E.top),D=Math.min(this.right,E.right),A=Math.min(this.bottom,E.bottom),B=Math.max(this.left,E.left);if(A>=C&&D>=B){return new YAHOO.util.Region(C,D,A,B);}else{return null;}};YAHOO.util.Region.prototype.union=function(E){var C=Math.min(this.top,E.top),D=Math.max(this.right,E.right),A=Math.max(this.bottom,E.bottom),B=Math.min(this.left,E.left);return new YAHOO.util.Region(C,D,A,B);};YAHOO.util.Region.prototype.toString=function(){return("Region {"+"top: "+this.top+", right: "+this.right+", bottom: "+this.bottom+", left: "+this.left+", height: "+this.height+", width: "+this.width+"}");};YAHOO.util.Regio
 n.getRegion=function(D){var F=YAHOO.util.Dom.getXY(D),C=F[1],E=F[0]+D.offsetWidth,A=F[1]+D.offsetHeight,B=F[0];return new YAHOO.util.Region(C,E,A,B);};YAHOO.util.Point=function(A,B){if(YAHOO.lang.isArray(A)){B=A[1];A=A[0];}YAHOO.util.Point.superclass.constructor.call(this,B,A,B,A);};YAHOO.extend(YAHOO.util.Point,YAHOO.util.Region);(function(){var B=YAHOO.util,A="clientTop",F="clientLeft",J="parentNode",K="right",W="hasLayout",I="px",U="opacity",L="auto",D="borderLeftWidth",G="borderTopWidth",P="borderRightWidth",V="borderBottomWidth",S="visible",Q="transparent",N="height",E="width",H="style",T="currentStyle",R=/^width|height$/,O=/^(\d[.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz|%){1}?/i,M={get:function(X,Z){var Y="",a=X[T][Z];if(Z===U){Y=B.Dom.getStyle(X,U);}else{if(!a||(a.indexOf&&a.indexOf(I)>-1)){Y=a;}else{if(B.Dom.IE_COMPUTED[Z]){Y=B.Dom.IE_COMPUTED[Z](X,Z);}else{if(O.test(a)){Y=B.Dom.IE.ComputedStyle.getPixel(X,Z);}else{Y=a;}}}}return Y;},getO
 ffset:function(Z,e){var b=Z[T][e],X=e.charAt(0).toUpperCase()+e.substr(1),c="offset"+X,Y="pixel"+X,a="",d;if(b==L){d=Z[c];if(d===undefined){a=0;}a=d;if(R.test(e)){Z[H][e]=d;if(Z[c]>d){a=d-(Z[c]-d);}Z[H][e]=L;}}else{if(!Z[H][Y]&&!Z[H][e]){Z[H][e]=b;}a=Z[H][Y];}return a+I;},getBorderWidth:function(X,Z){var Y=null;if(!X[T][W]){X[H].zoom=1;}switch(Z){case G:Y=X[A];break;case V:Y=X.offsetHeight-X.clientHeight-X[A];break;case D:Y=X[F];break;case P:Y=X.offsetWidth-X.clientWidth-X[F];break;}return Y+I;},getPixel:function(Y,X){var a=null,b=Y[T][K],Z=Y[T][X];Y[H][K]=Z;a=Y[H].pixelRight;Y[H][K]=b;return a+I;},getMargin:function(Y,X){var Z;if(Y[T][X]==L){Z=0+I;}else{Z=B.Dom.IE.ComputedStyle.getPixel(Y,X);}return Z;},getVisibility:function(Y,X){var Z;while((Z=Y[T])&&Z[X]=="inherit"){Y=Y[J];}return(Z)?Z[X]:S;},getColor:function(Y,X){return B.Dom.Color.toRGB(Y[T][X])||Q;},getBorderColor:function(Y,X){var Z=Y[T],a=Z[X]||Z.color;return B.Dom.Color.toRGB(B.Dom.Color.toHex(a));}},C={};C.top=C.
 right=C.bottom=C.left=C[E]=C[N]=M.getOffset;C.color=M.getColor;C[G]=C[P]=C[V]=C[D]=M.getBorderWidth;C.marginTop=C.marginRight=C.marginBottom=C.marginLeft=M.getMargin;C.visibility=M.getVisibility;C.borderColor=C.borderTopColor=C.borderRightColor=C.borderBottomColor=C.borderLeftColor=M.getBorderColor;B.Dom.IE_COMPUTED=C;B.Dom.IE_ComputedStyle=M;})();(function(){var C="toString",A=parseInt,B=RegExp,D=YAHOO.util;D.Dom.Color={KEYWORDS:{black:"000",silver:"c0c0c0",gray:"808080",white:"fff",maroon:"800000",red:"f00",purple:"800080",fuchsia:"f0f",green:"008000",lime:"0f0",olive:"808000",yellow:"ff0",navy:"000080",blue:"00f",teal:"008080",aqua:"0ff"},re_RGB:/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i,re_hex:/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i,re_hex3:/([0-9A-F])/gi,toRGB:function(E){if(!D.Dom.Color.re_RGB.test(E)){E=D.Dom.Color.toHex(E);}if(D.Dom.Color.re_hex.exec(E)){E="rgb("+[A(B.$1,16),A(B.$2,16),A(B.$3,16)].join(", ")+")";}return E;},toHex:function(H){H=D.Dom.Co
 lor.KEYWORDS[H]||H;if(D.Dom.Color.re_RGB.exec(H)){var G=(B.$1.length===1)?"0"+B.$1:Number(B.$1),F=(B.$2.length===1)?"0"+B.$2:Number(B.$2),E=(B.$3.length===1)?"0"+B.$3:Number(B.$3);H=[G[C](16),F[C](16),E[C](16)].join("");}if(H.length<6){H=H.replace(D.Dom.Color.re_hex3,"$1$1");}if(H!=="transparent"&&H.indexOf("#")<0){H="#"+H;}return H.toLowerCase();}};}());YAHOO.register("dom",YAHOO.util.Dom,{version:"2.8.2r1",build:"7"});
\ No newline at end of file
+(function(){YAHOO.env._id_counter=YAHOO.env._id_counter||0;var e=YAHOO.util,k=YAHOO.lang,L=YAHOO.env.ua,a=YAHOO.lang.trim,B={},F={},m=/^t(?:able|d|h)$/i,w=/color$/i,j=window.document,v=j.documentElement,C="ownerDocument",M="defaultView",U="documentElement",S="compatMode",z="offsetLeft",o="offsetTop",T="offsetParent",x="parentNode",K="nodeType",c="tagName",n="scrollLeft",H="scrollTop",p="getBoundingClientRect",V="getComputedStyle",y="currentStyle",l="CSS1Compat",A="BackCompat",E="class",f="className",i="",b=" ",R="(?:^|\\s)",J="(?= |$)",t="g",O="position",D="fixed",u="relative",I="left",N="top",Q="medium",P="borderLeftWidth",q="borderTopWidth",d=L.opera,h=L.webkit,g=L.gecko,s=L.ie;e.Dom={CUSTOM_ATTRIBUTES:(!v.hasAttribute)?{"for":"htmlFor","class":f}:{"htmlFor":"for","className":E},DOT_ATTRIBUTES:{checked:true},get:function(aa){var ac,X,ab,Z,W,G,Y=null;if(aa){if(typeof aa=="string"||typeof aa=="number"){ac=aa+"";aa=j.getElementById(aa);G=(aa)?aa.attributes:null;if(aa&&G&&G.id
 &&G.id.value===ac){return aa;}else{if(aa&&j.all){aa=null;X=j.all[ac];if(X&&X.length){for(Z=0,W=X.length;Z<W;++Z){if(X[Z].id===ac){return X[Z];}}}}}}else{if(e.Element&&aa instanceof e.Element){aa=aa.get("element");}else{if(!aa.nodeType&&"length" in aa){ab=[];for(Z=0,W=aa.length;Z<W;++Z){ab[ab.length]=e.Dom.get(aa[Z]);}aa=ab;}}}Y=aa;}return Y;},getComputedStyle:function(G,W){if(window[V]){return G[C][M][V](G,null)[W];}else{if(G[y]){return e.Dom.IE_ComputedStyle.get(G,W);}}},getStyle:function(G,W){return e.Dom.batch(G,e.Dom._getStyle,W);},_getStyle:function(){if(window[V]){return function(G,Y){Y=(Y==="float")?Y="cssFloat":e.Dom._toCamel(Y);var X=G.style[Y],W;if(!X){W=G[C][M][V](G,null);if(W){X=W[Y];}}return X;};}else{if(v[y]){return function(G,Y){var X;switch(Y){case"opacity":X=100;try{X=G.filters["DXImageTransform.Microsoft.Alpha"].opacity;}catch(Z){try{X=G.filters("alpha").opacity;}catch(W){}}return X/100;case"float":Y="styleFloat";default:Y=e.Dom._toCamel(Y);X=G[y]?G[y][Y]:n
 ull;return(G.style[Y]||X);}};}}}(),setStyle:function(G,W,X){e.Dom.batch(G,e.Dom._setStyle,{prop:W,val:X});},_setStyle:function(){if(!window.getComputedStyle&&j.documentElement.currentStyle){return function(W,G){var X=e.Dom._toCamel(G.prop),Y=G.val;if(W){switch(X){case"opacity":if(Y===""||Y===null||Y===1){W.style.removeAttribute("filter");}else{if(k.isString(W.style.filter)){W.style.filter="alpha(opacity="+Y*100+")";if(!W[y]||!W[y].hasLayout){W.style.zoom=1;}}}break;case"float":X="styleFloat";default:W.style[X]=Y;}}else{}};}else{return function(W,G){var X=e.Dom._toCamel(G.prop),Y=G.val;if(W){if(X=="float"){X="cssFloat";}W.style[X]=Y;}else{}};}}(),getXY:function(G){return e.Dom.batch(G,e.Dom._getXY);},_canPosition:function(G){return(e.Dom._getStyle(G,"display")!=="none"&&e.Dom._inDoc(G));},_getXY:function(W){var X,G,Z,ab,Y,aa,ac=Math.round,ad=false;if(e.Dom._canPosition(W)){Z=W[p]();ab=W[C];X=e.Dom.getDocumentScrollLeft(ab);G=e.Dom.getDocumentScrollTop(ab);ad=[Z[I],Z[N]];if(Y|
 |aa){ad[0]-=aa;ad[1]-=Y;}if((G||X)){ad[0]+=X;ad[1]+=G;}ad[0]=ac(ad[0]);ad[1]=ac(ad[1]);}else{}return ad;},getX:function(G){var W=function(X){return e.Dom.getXY(X)[0];};return e.Dom.batch(G,W,e.Dom,true);},getY:function(G){var W=function(X){return e.Dom.getXY(X)[1];};return e.Dom.batch(G,W,e.Dom,true);},setXY:function(G,X,W){e.Dom.batch(G,e.Dom._setXY,{pos:X,noRetry:W});},_setXY:function(G,Z){var aa=e.Dom._getStyle(G,O),Y=e.Dom.setStyle,ad=Z.pos,W=Z.noRetry,ab=[parseInt(e.Dom.getComputedStyle(G,I),10),parseInt(e.Dom.getComputedStyle(G,N),10)],ac,X;ac=e.Dom._getXY(G);if(!ad||ac===false){return false;}if(aa=="static"){aa=u;Y(G,O,aa);}if(isNaN(ab[0])){ab[0]=(aa==u)?0:G[z];}if(isNaN(ab[1])){ab[1]=(aa==u)?0:G[o];}if(ad[0]!==null){Y(G,I,ad[0]-ac[0]+ab[0]+"px");}if(ad[1]!==null){Y(G,N,ad[1]-ac[1]+ab[1]+"px");}if(!W){X=e.Dom._getXY(G);if((ad[0]!==null&&X[0]!=ad[0])||(ad[1]!==null&&X[1]!=ad[1])){e.Dom._setXY(G,{pos:ad,noRetry:true});}}},setX:function(W,G){e.Dom.setXY(W,[G,null]);},set
 Y:function(G,W){e.Dom.setXY(G,[null,W]);},getRegion:function(G){var W=function(X){var Y=false;if(e.Dom._canPosition(X)){Y=e.Region.getRegion(X);}else{}return Y;};return e.Dom.batch(G,W,e.Dom,true);},getClientWidth:function(){return e.Dom.getViewportWidth();},getClientHeight:function(){return e.Dom.getViewportHeight();},getElementsByClassName:function(ab,af,ac,ae,X,ad){af=af||"*";ac=(ac)?e.Dom.get(ac):null||j;if(!ac){return[];}var W=[],G=ac.getElementsByTagName(af),Z=e.Dom.hasClass;for(var Y=0,aa=G.length;Y<aa;++Y){if(Z(G[Y],ab)){W[W.length]=G[Y];}}if(ae){e.Dom.batch(W,ae,X,ad);}return W;},hasClass:function(W,G){return e.Dom.batch(W,e.Dom._hasClass,G);},_hasClass:function(X,W){var G=false,Y;if(X&&W){Y=e.Dom._getAttribute(X,f)||i;if(Y){Y=Y.replace(/\s+/g,b);}if(W.exec){G=W.test(Y);}else{G=W&&(b+Y+b).indexOf(b+W+b)>-1;}}else{}return G;},addClass:function(W,G){return e.Dom.batch(W,e.Dom._addClass,G);},_addClass:function(X,W){var G=false,Y;if(X&&W){Y=e.Dom._getAttribute(X,f)||i;i
 f(!e.Dom._hasClass(X,W)){e.Dom.setAttribute(X,f,a(Y+b+W));G=true;}}else{}return G;},removeClass:function(W,G){return e.Dom.batch(W,e.Dom._removeClass,G);},_removeClass:function(Y,X){var W=false,aa,Z,G;if(Y&&X){aa=e.Dom._getAttribute(Y,f)||i;e.Dom.setAttribute(Y,f,aa.replace(e.Dom._getClassRegex(X),i));Z=e.Dom._getAttribute(Y,f);if(aa!==Z){e.Dom.setAttribute(Y,f,a(Z));W=true;if(e.Dom._getAttribute(Y,f)===""){G=(Y.hasAttribute&&Y.hasAttribute(E))?E:f;Y.removeAttribute(G);}}}else{}return W;},replaceClass:function(X,W,G){return e.Dom.batch(X,e.Dom._replaceClass,{from:W,to:G});},_replaceClass:function(Y,X){var W,ab,aa,G=false,Z;if(Y&&X){ab=X.from;aa=X.to;if(!aa){G=false;}else{if(!ab){G=e.Dom._addClass(Y,X.to);}else{if(ab!==aa){Z=e.Dom._getAttribute(Y,f)||i;W=(b+Z.replace(e.Dom._getClassRegex(ab),b+aa).replace(/\s+/g,b)).split(e.Dom._getClassRegex(aa));W.splice(1,0,b+aa);e.Dom.setAttribute(Y,f,a(W.join(i)));G=true;}}}}else{}return G;},generateId:function(G,X){X=X||"yui-gen";var W=
 function(Y){if(Y&&Y.id){return Y.id;}var Z=X+YAHOO.env._id_counter++;
+if(Y){if(Y[C]&&Y[C].getElementById(Z)){return e.Dom.generateId(Y,Z+X);}Y.id=Z;}return Z;};return e.Dom.batch(G,W,e.Dom,true)||W.apply(e.Dom,arguments);},isAncestor:function(W,X){W=e.Dom.get(W);X=e.Dom.get(X);var G=false;if((W&&X)&&(W[K]&&X[K])){if(W.contains&&W!==X){G=W.contains(X);}else{if(W.compareDocumentPosition){G=!!(W.compareDocumentPosition(X)&16);}}}else{}return G;},inDocument:function(G,W){return e.Dom._inDoc(e.Dom.get(G),W);},_inDoc:function(W,X){var G=false;if(W&&W[c]){X=X||W[C];G=e.Dom.isAncestor(X[U],W);}else{}return G;},getElementsBy:function(W,af,ab,ad,X,ac,ae){af=af||"*";ab=(ab)?e.Dom.get(ab):null||j;var aa=(ae)?null:[],G;if(ab){G=ab.getElementsByTagName(af);for(var Y=0,Z=G.length;Y<Z;++Y){if(W(G[Y])){if(ae){aa=G[Y];break;}else{aa[aa.length]=G[Y];}}}if(ad){e.Dom.batch(aa,ad,X,ac);}}return aa;},getElementBy:function(X,G,W){return e.Dom.getElementsBy(X,G,W,null,null,null,true);},batch:function(X,ab,aa,Z){var Y=[],W=(Z)?aa:null;X=(X&&(X[c]||X.item))?X:e.Dom.get(
 X);if(X&&ab){if(X[c]||X.length===undefined){return ab.call(W,X,aa);}for(var G=0;G<X.length;++G){Y[Y.length]=ab.call(W||X[G],X[G],aa);}}else{return false;}return Y;},getDocumentHeight:function(){var W=(j[S]!=l||h)?j.body.scrollHeight:v.scrollHeight,G=Math.max(W,e.Dom.getViewportHeight());return G;},getDocumentWidth:function(){var W=(j[S]!=l||h)?j.body.scrollWidth:v.scrollWidth,G=Math.max(W,e.Dom.getViewportWidth());return G;},getViewportHeight:function(){var G=self.innerHeight,W=j[S];if((W||s)&&!d){G=(W==l)?v.clientHeight:j.body.clientHeight;}return G;},getViewportWidth:function(){var G=self.innerWidth,W=j[S];if(W||s){G=(W==l)?v.clientWidth:j.body.clientWidth;}return G;},getAncestorBy:function(G,W){while((G=G[x])){if(e.Dom._testElement(G,W)){return G;}}return null;},getAncestorByClassName:function(W,G){W=e.Dom.get(W);if(!W){return null;}var X=function(Y){return e.Dom.hasClass(Y,G);};return e.Dom.getAncestorBy(W,X);},getAncestorByTagName:function(W,G){W=e.Dom.get(W);if(!W){ret
 urn null;}var X=function(Y){return Y[c]&&Y[c].toUpperCase()==G.toUpperCase();};return e.Dom.getAncestorBy(W,X);},getPreviousSiblingBy:function(G,W){while(G){G=G.previousSibling;if(e.Dom._testElement(G,W)){return G;}}return null;},getPreviousSibling:function(G){G=e.Dom.get(G);if(!G){return null;}return e.Dom.getPreviousSiblingBy(G);},getNextSiblingBy:function(G,W){while(G){G=G.nextSibling;if(e.Dom._testElement(G,W)){return G;}}return null;},getNextSibling:function(G){G=e.Dom.get(G);if(!G){return null;}return e.Dom.getNextSiblingBy(G);},getFirstChildBy:function(G,X){var W=(e.Dom._testElement(G.firstChild,X))?G.firstChild:null;return W||e.Dom.getNextSiblingBy(G.firstChild,X);},getFirstChild:function(G,W){G=e.Dom.get(G);if(!G){return null;}return e.Dom.getFirstChildBy(G);},getLastChildBy:function(G,X){if(!G){return null;}var W=(e.Dom._testElement(G.lastChild,X))?G.lastChild:null;return W||e.Dom.getPreviousSiblingBy(G.lastChild,X);},getLastChild:function(G){G=e.Dom.get(G);return 
 e.Dom.getLastChildBy(G);},getChildrenBy:function(W,Y){var X=e.Dom.getFirstChildBy(W,Y),G=X?[X]:[];e.Dom.getNextSiblingBy(X,function(Z){if(!Y||Y(Z)){G[G.length]=Z;}return false;});return G;},getChildren:function(G){G=e.Dom.get(G);if(!G){}return e.Dom.getChildrenBy(G);},getDocumentScrollLeft:function(G){G=G||j;return Math.max(G[U].scrollLeft,G.body.scrollLeft);},getDocumentScrollTop:function(G){G=G||j;return Math.max(G[U].scrollTop,G.body.scrollTop);},insertBefore:function(W,G){W=e.Dom.get(W);G=e.Dom.get(G);if(!W||!G||!G[x]){return null;}return G[x].insertBefore(W,G);},insertAfter:function(W,G){W=e.Dom.get(W);G=e.Dom.get(G);if(!W||!G||!G[x]){return null;}if(G.nextSibling){return G[x].insertBefore(W,G.nextSibling);}else{return G[x].appendChild(W);}},getClientRegion:function(){var X=e.Dom.getDocumentScrollTop(),W=e.Dom.getDocumentScrollLeft(),Y=e.Dom.getViewportWidth()+W,G=e.Dom.getViewportHeight()+X;return new e.Region(X,Y,G,W);},setAttribute:function(W,G,X){e.Dom.batch(W,e.Dom
 ._setAttribute,{attr:G,val:X});},_setAttribute:function(X,W){var G=e.Dom._toCamel(W.attr),Y=W.val;if(X&&X.setAttribute){if(e.Dom.DOT_ATTRIBUTES[G]&&X.tagName&&X.tagName!="BUTTON"){X[G]=Y;}else{G=e.Dom.CUSTOM_ATTRIBUTES[G]||G;X.setAttribute(G,Y);}}else{}},getAttribute:function(W,G){return e.Dom.batch(W,e.Dom._getAttribute,G);},_getAttribute:function(W,G){var X;G=e.Dom.CUSTOM_ATTRIBUTES[G]||G;if(e.Dom.DOT_ATTRIBUTES[G]){X=W[G];}else{if(W&&"getAttribute" in W){if(/^(?:href|src)$/.test(G)){X=W.getAttribute(G,2);}else{X=W.getAttribute(G);}}else{}}return X;},_toCamel:function(W){var X=B;function G(Y,Z){return Z.toUpperCase();}return X[W]||(X[W]=W.indexOf("-")===-1?W:W.replace(/-([a-z])/gi,G));},_getClassRegex:function(W){var G;if(W!==undefined){if(W.exec){G=W;}else{G=F[W];if(!G){W=W.replace(e.Dom._patterns.CLASS_RE_TOKENS,"\\$1");W=W.replace(/\s+/g,b);G=F[W]=new RegExp(R+W+J,t);}}}return G;},_patterns:{ROOT_TAG:/^body|html$/i,CLASS_RE_TOKENS:/([\.\(\)\^\$\*\+\?\|\[\]\{\}\\])/g},_t
 estElement:function(G,W){return G&&G[K]==1&&(!W||W(G));},_calcBorders:function(X,Y){var W=parseInt(e.Dom[V](X,q),10)||0,G=parseInt(e.Dom[V](X,P),10)||0;if(g){if(m.test(X[c])){W=0;G=0;}}Y[0]+=G;Y[1]+=W;return Y;}};var r=e.Dom[V];if(L.opera){e.Dom[V]=function(W,G){var X=r(W,G);if(w.test(G)){X=e.Dom.Color.toRGB(X);}return X;};}if(L.webkit){e.Dom[V]=function(W,G){var X=r(W,G);if(X==="rgba(0, 0, 0, 0)"){X="transparent";}return X;};}if(L.ie&&L.ie>=8){e.Dom.DOT_ATTRIBUTES.type=true;}})();YAHOO.util.Region=function(d,e,a,c){this.top=d;this.y=d;this[1]=d;this.right=e;this.bottom=a;this.left=c;this.x=c;this[0]=c;this.width=this.right-this.left;this.height=this.bottom-this.top;};YAHOO.util.Region.prototype.contains=function(a){return(a.left>=this.left&&a.right<=this.right&&a.top>=this.top&&a.bottom<=this.bottom);};YAHOO.util.Region.prototype.getArea=function(){return((this.bottom-this.top)*(this.right-this.left));};YAHOO.util.Region.prototype.intersect=function(f){var d=Math.max(this.t
 op,f.top),e=Math.min(this.right,f.right),a=Math.min(this.bottom,f.bottom),c=Math.max(this.left,f.left);
+if(a>=d&&e>=c){return new YAHOO.util.Region(d,e,a,c);}else{return null;}};YAHOO.util.Region.prototype.union=function(f){var d=Math.min(this.top,f.top),e=Math.max(this.right,f.right),a=Math.max(this.bottom,f.bottom),c=Math.min(this.left,f.left);return new YAHOO.util.Region(d,e,a,c);};YAHOO.util.Region.prototype.toString=function(){return("Region {"+"top: "+this.top+", right: "+this.right+", bottom: "+this.bottom+", left: "+this.left+", height: "+this.height+", width: "+this.width+"}");};YAHOO.util.Region.getRegion=function(e){var g=YAHOO.util.Dom.getXY(e),d=g[1],f=g[0]+e.offsetWidth,a=g[1]+e.offsetHeight,c=g[0];return new YAHOO.util.Region(d,f,a,c);};YAHOO.util.Point=function(a,b){if(YAHOO.lang.isArray(a)){b=a[1];a=a[0];}YAHOO.util.Point.superclass.constructor.call(this,b,a,b,a);};YAHOO.extend(YAHOO.util.Point,YAHOO.util.Region);(function(){var b=YAHOO.util,a="clientTop",f="clientLeft",j="parentNode",k="right",w="hasLayout",i="px",u="opacity",l="auto",d="borderLeftWidth",g="b
 orderTopWidth",p="borderRightWidth",v="borderBottomWidth",s="visible",q="transparent",n="height",e="width",h="style",t="currentStyle",r=/^width|height$/,o=/^(\d[.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz|%){1}?/i,m={get:function(x,z){var y="",A=x[t][z];if(z===u){y=b.Dom.getStyle(x,u);}else{if(!A||(A.indexOf&&A.indexOf(i)>-1)){y=A;}else{if(b.Dom.IE_COMPUTED[z]){y=b.Dom.IE_COMPUTED[z](x,z);}else{if(o.test(A)){y=b.Dom.IE.ComputedStyle.getPixel(x,z);}else{y=A;}}}}return y;},getOffset:function(z,E){var B=z[t][E],x=E.charAt(0).toUpperCase()+E.substr(1),C="offset"+x,y="pixel"+x,A="",D;if(B==l){D=z[C];if(D===undefined){A=0;}A=D;if(r.test(E)){z[h][E]=D;if(z[C]>D){A=D-(z[C]-D);}z[h][E]=l;}}else{if(!z[h][y]&&!z[h][E]){z[h][E]=B;}A=z[h][y];}return A+i;},getBorderWidth:function(x,z){var y=null;if(!x[t][w]){x[h].zoom=1;}switch(z){case g:y=x[a];break;case v:y=x.offsetHeight-x.clientHeight-x[a];break;case d:y=x[f];break;case p:y=x.offsetWidth-x.clientWidth-x[f];b
 reak;}return y+i;},getPixel:function(y,x){var A=null,B=y[t][k],z=y[t][x];y[h][k]=z;A=y[h].pixelRight;y[h][k]=B;return A+i;},getMargin:function(y,x){var z;if(y[t][x]==l){z=0+i;}else{z=b.Dom.IE.ComputedStyle.getPixel(y,x);}return z;},getVisibility:function(y,x){var z;while((z=y[t])&&z[x]=="inherit"){y=y[j];}return(z)?z[x]:s;},getColor:function(y,x){return b.Dom.Color.toRGB(y[t][x])||q;},getBorderColor:function(y,x){var z=y[t],A=z[x]||z.color;return b.Dom.Color.toRGB(b.Dom.Color.toHex(A));}},c={};c.top=c.right=c.bottom=c.left=c[e]=c[n]=m.getOffset;c.color=m.getColor;c[g]=c[p]=c[v]=c[d]=m.getBorderWidth;c.marginTop=c.marginRight=c.marginBottom=c.marginLeft=m.getMargin;c.visibility=m.getVisibility;c.borderColor=c.borderTopColor=c.borderRightColor=c.borderBottomColor=c.borderLeftColor=m.getBorderColor;b.Dom.IE_COMPUTED=c;b.Dom.IE_ComputedStyle=m;})();(function(){var c="toString",a=parseInt,b=RegExp,d=YAHOO.util;d.Dom.Color={KEYWORDS:{black:"000",silver:"c0c0c0",gray:"808080",white
 :"fff",maroon:"800000",red:"f00",purple:"800080",fuchsia:"f0f",green:"008000",lime:"0f0",olive:"808000",yellow:"ff0",navy:"000080",blue:"00f",teal:"008080",aqua:"0ff"},re_RGB:/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i,re_hex:/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i,re_hex3:/([0-9A-F])/gi,toRGB:function(e){if(!d.Dom.Color.re_RGB.test(e)){e=d.Dom.Color.toHex(e);}if(d.Dom.Color.re_hex.exec(e)){e="rgb("+[a(b.$1,16),a(b.$2,16),a(b.$3,16)].join(", ")+")";}return e;},toHex:function(f){f=d.Dom.Color.KEYWORDS[f]||f;if(d.Dom.Color.re_RGB.exec(f)){f=[Number(b.$1).toString(16),Number(b.$2).toString(16),Number(b.$3).toString(16)];for(var e=0;e<f.length;e++){if(f[e].length<2){f[e]="0"+f[e];}}f=f.join("");}if(f.length<6){f=f.replace(d.Dom.Color.re_hex3,"$1$1");}if(f!=="transparent"&&f.indexOf("#")<0){f="#"+f;}return f.toUpperCase();}};}());YAHOO.register("dom",YAHOO.util.Dom,{version:"2.9.0",build:"2800"});
\ No newline at end of file