You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by we...@apache.org on 2012/12/13 15:33:43 UTC

svn commit: r1421312 [4/4] - in /myfaces/tomahawk/trunk: core/src/main/java/org/apache/myfaces/custom/calendar/ core/src/main/resources/org/apache/myfaces/custom/calendar/resource/ core20/src/main/java/org/apache/myfaces/custom/calendar/ core20/src/mai...

Modified: myfaces/tomahawk/trunk/core20/src/main/javascript/oam.custom.calendar/popcalendar.js
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core20/src/main/javascript/oam.custom.calendar/popcalendar.js?rev=1421312&r1=1421311&r2=1421312&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core20/src/main/javascript/oam.custom.calendar/popcalendar.js (original)
+++ myfaces/tomahawk/trunk/core20/src/main/javascript/oam.custom.calendar/popcalendar.js Thu Dec 13 14:33:42 2012
@@ -6,1699 +6,1512 @@
 // @author Martin Marinschek
 // @author Sylvain Vieujot
 
+//we reserve the namespace correctly
+window.org = window.org || {};
+org.apache = org.apache || {};
+org.apache.myfaces = org.apache.myfaces || {};
+
+if (!org.apache.myfaces.PopupCalendar) {
+    org.apache.myfaces.CalendarInitData = function () {
+        // x position (-1 if to appear below control)
+        this.fixedX = -1;
+
+        // y position (-1 if to appear below control)
+        this.fixedY = -1;
+
+        // 0 - sunday ; 1 - monday (aka firstDayOfWeek)
+        this.startAt = 1;
+
+        // 0 - don't show; 1 - show
+        this.showWeekNumber = 1;
+
+        // 0 - don't show; 1 - show
+        this.showToday = 1;
+
+        // directory for images ... e.g. this.imgDir="/img/"
+        this.imgDir = "images/";
+
+        this.imgDirSuffix = "";
+
+        this.themePrefix = "jscalendar-DB";
+
+        this.gotoString = "Go To Current Month";
+        this.todayString = "Today is";
+        this.todayDateFormat = null;
+        this.weekString = "Wk";
+        this.scrollLeftMessage = "Click to scroll to previous month. Hold mouse button to scroll automatically.";
+        this.scrollRightMessage = "Click to scroll to next month. Hold mouse button to scroll automatically.";
+        this.selectMonthMessage = "Click to select a month.";
+        this.selectYearMessage = "Click to select a year.";
+        this.selectDateMessage = "Select [date] as date."; // do not replace [date], it will be replaced by date.
+
+        this.popupLeft = false;
+
+        this.monthName = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
+        this.dayName = this.startAt == 0 ? new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat") : new Array("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun");
+
+        this.selectMode = "day";
+
+    };
+
+    org.apache.myfaces.DateParts = function (sec, min, hour, date, month, year) {
+        this.sec = sec;
+        this.min = min;
+        this.hour = hour;
+        this.date = date;
+        this.month = month;
+        this.year = year;
+    };
+
+    org.apache.myfaces.HolidayRec = function (d, m, y, desc) {
+        this.d = d;
+        this.m = m;
+        this.y = y;
+        this.desc = desc;
+    };
 
-org_apache_myfaces_CalendarInitData = function()
-{
-    // x position (-1 if to appear below control)
-    this.fixedX = -1;
-
-    // y position (-1 if to appear below control)
-    this.fixedY = -1;
-
-    // 0 - sunday ; 1 - monday (aka firstDayOfWeek)
-    this.startAt = 1;
-
-    // 0 - don't show; 1 - show
-    this.showWeekNumber = 1;
-
-    // 0 - don't show; 1 - show
-    this.showToday = 1;
-
-    // directory for images ... e.g. this.imgDir="/img/"
-    this.imgDir = "images/";
-    
-    this.imgDirSuffix = "";
-
-    this.themePrefix = "jscalendar-DB";
-
-    this.gotoString = "Go To Current Month";
-    this.todayString = "Today is";
-    this.todayDateFormat = null;
-    this.weekString = "Wk";
-    this.scrollLeftMessage = "Click to scroll to previous month. Hold mouse button to scroll automatically.";
-    this.scrollRightMessage = "Click to scroll to next month. Hold mouse button to scroll automatically.";
-    this.selectMonthMessage = "Click to select a month.";
-    this.selectYearMessage = "Click to select a year.";
-    this.selectDateMessage = "Select [date] as date."; // do not replace [date], it will be replaced by date.
-
-    this.popupLeft=false;
-
-    this.monthName = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
-    this.dayName = this.startAt == 0 ? new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat") : new Array("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun");
-
-    this.selectMode = "day";
-};
-
-org_apache_myfaces_DateParts = function(sec, min, hour, date, month, year)
-{
-    this.sec = sec;
-    this.min = min;
-    this.hour = hour;
-    this.date = date;
-    this.month = month;
-    this.year = year;
-};
-
-org_apache_myfaces_HolidayRec = function(d, m, y, desc)
-{
-    this.d = d;
-    this.m = m;
-    this.y = y;
-    this.desc = desc;
-};
-
-org_apache_myfaces_PopupCalendar = function()
-{
-    this.idPrefix = "org_apache_myfaces_PopupCalendar";
-
-    this.selectedDate = new org_apache_myfaces_DateParts(0, 0, 0, 0, 0, 0);
-    this.saveSelectedDate = new org_apache_myfaces_DateParts(0, 0, 0, 0, 0, 0);
-
-    this.monthConstructed = false;
-    this.yearConstructed = false;
-    this.intervalID1 = null;
-    this.intervalID2 = null;
-    this.timeoutID1 = null;
-    this.timeoutID2 = null;
-    this.ctlToPlaceValue = null;
-    this.ctlNow = null;
-    this.containerCtl = null;
-    this.dateFormat="MM/dd/yyyy";
-    this.nStartingYear = null;
-    this.bPageLoaded = false;
-
-    // Detect whether the browser is Microsoft Internet Explorer.
-    // Testing for the presence of document.all is not sufficient, as Opera provides that.
-    // However hopefully nothing but IE implements ActiveX..
-    // it is only needed to test for ie6 and before ie7 and quirks mode
-    // do not expose the bleed through bug anymore
-    this.ieVersion = this.getInternetExplorerVersion();
-    this.ie6 = this.ieVersion != -1 && this.ieVersion < 7;
-
-    this.dom = document.getElementById;
-    this.ns4 = document.layers;
-    this.dateFormatSymbols = new org_apache_myfaces_dateformat_DateFormatSymbols();
-    this.initData = new org_apache_myfaces_CalendarInitData();
-    this.today = new Date();
-    this.dateNow = this.today.getDate();
-    this.monthNow = this.today.getMonth();
-    this.yearNow = this.today.getFullYear();
-    
-    // list of images to be preloaded from the server
-    this.imgSrc = new Array("drop1.gif", "drop2.gif", "left1.gif", "left2.gif", "right1.gif", "right2.gif");
-    this.img = new Array();
-
-    //elements which need to change their dynamical
-    //representation over time
-    this.calendarDiv;
-    this.selectMonthDiv;
-    this.selectYearDiv;
-    this.todaySpan = null;
-    this.captionSpan = null;
-    this.contentSpan = null;
-    this.acceptMonthSpan = null;
-    this.closeCalendarSpan = null;
-    this.monthSpan = null;
-    this.yearSpan = null
-    this.changeMonthImg = null;
-    this.changeYearImg = null;
-
-    this.holidaysCounter = 0;
-    this.holidays = new Array();
-
-    this.bClickOnCalendar = false;
-    this.bCalendarHidden = true;
-
-    this.myFacesCtlType = "x:inputCalendar";
-    this.inputDateClientId;
-};
+    org.apache.myfaces.PopupCalendar = function () {
+        this.idPrefix = "org.apache.myfaces.PopupCalendar";
+
+        this.selectedDate = new org.apache.myfaces.DateParts(0, 0, 0, 0, 0, 0);
+        this.saveSelectedDate = new org.apache.myfaces.DateParts(0, 0, 0, 0, 0, 0);
+
+        this.monthConstructed = false;
+        this.yearConstructed = false;
+        this.intervalID1 = null;
+        this.intervalID2 = null;
+        this.timeoutID1 = null;
+        this.timeoutID2 = null;
+        this.ctlToPlaceValue = null;
+        this.ctlNow = null;
+        this.containerCtl = null;
+        this.dateFormat = "MM/dd/yyyy";
+        this.nStartingYear = null;
+        this.bPageLoaded = false;
+
+        // Detect whether the browser is Microsoft Internet Explorer.
+        // Testing for the presence of document.all is not sufficient, as Opera provides that.
+        // However hopefully nothing but IE implements ActiveX..
+        // it is only needed to test for ie6 and before ie7 and quirks mode
+        // do not expose the bleed through bug anymore
+        this.ieVersion = this.getInternetExplorerVersion();
+        this.ie6 = this.ieVersion != -1 && this.ieVersion < 7;
+
+        this.dom = document.getElementById;
+        this.ns4 = document.layers;
+        this.dateFormatSymbols = new org.apache.myfaces.dateformat.DateFormatSymbols();
+        this.initData = new org.apache.myfaces.CalendarInitData();
+        this.today = new Date();
+        this.dateNow = this.today.getDate();
+        this.monthNow = this.today.getMonth();
+        this.yearNow = this.today.getFullYear();
+
+        // list of images to be preloaded from the server
+        this.imgSrc = new Array("drop1.gif", "drop2.gif", "left1.gif", "left2.gif", "right1.gif", "right2.gif");
+        this.img = new Array();
+
+        //elements which need to change their dynamical
+        //representation over time
+        this.calendarDiv;
+        this.selectMonthDiv;
+        this.selectYearDiv;
+        this.todaySpan = null;
+        this.captionSpan = null;
+        this.contentSpan = null;
+        this.acceptMonthSpan = null;
+        this.closeCalendarSpan = null;
+        this.monthSpan = null;
+        this.yearSpan = null
+        this.changeMonthImg = null;
+        this.changeYearImg = null;
+
+        this.holidaysCounter = 0;
+        this.holidays = new Array();
+
+        this.bClickOnCalendar = false;
+        this.bCalendarHidden = true;
+
+        this.myFacesCtlType = "x:inputCalendar";
+        this.inputDateClientId;
+    };
 
 //http://msdn.microsoft.com/en-us/library/ms537509%28v=vs.85%29.aspx
-org_apache_myfaces_PopupCalendar.prototype.getInternetExplorerVersion = function ()
-    // Returns the version of Internet Explorer or a -1
-    // (indicating the use of another browser).
-{
-    var rv = -1; // Return value assumes failure.
-    if (navigator.appName == 'Microsoft Internet Explorer') {
-        var ua = navigator.userAgent;
-        var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
-        if (re.exec(ua) != null)
-            rv = parseFloat(RegExp.$1);
-    }
-    return rv;
-};
-
-org_apache_myfaces_PopupCalendar.prototype._MSECS_PER_DAY = 24*60*60*1000;
-
-/**
-popups always have to be
-at the dom level nowhere else
-*/
-org_apache_myfaces_PopupCalendar.prototype._fixPopupDomOrder = function(overDiv) {
-	if(document.body != overDiv.parentNode) {
-		overDiv.parentNode.removeChild(overDiv);
-		document.body.appendChild(overDiv);
-	}	
-};
+    org.apache.myfaces.PopupCalendar.prototype.getInternetExplorerVersion = function ()
+        // Returns the version of Internet Explorer or a -1
+        // (indicating the use of another browser).
+    {
+        var rv = -1; // Return value assumes failure.
+        if (navigator.appName == 'Microsoft Internet Explorer') {
+            var ua = navigator.userAgent;
+            var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
+            if (re.exec(ua) != null)
+                rv = parseFloat(RegExp.$1);
+        }
+        return rv;
+    };
+
+    org.apache.myfaces.PopupCalendar.prototype._MSECS_PER_DAY = 24 * 60 * 60 * 1000;
+
+    /**
+     popups always have to be
+     at the dom level nowhere else
+     */
+    org.apache.myfaces.PopupCalendar.prototype._fixPopupDomOrder = function (overDiv) {
+        if (document.body != overDiv.parentNode) {
+            overDiv.parentNode.removeChild(overDiv);
+            document.body.appendChild(overDiv);
+        }
+    };
 
 // IE bug workaround: hide background controls under the specified div.
-org_apache_myfaces_PopupCalendar.prototype._showPopupPostProcess = function(overDiv)
-{
-	
-    //ie6 detection over object inspections
-    if (this.ie6)
-    {
-        // The iframe created here is a hack to work around an IE bug. In IE,
-        // "windowed controls" (esp selectboxes) do not respect the z-index
-        // setting of "non-windowed controls", meaning they will be drawn on
-        // top of components that they should theoretically be underneath.
-        // However a selectbox will NOT be drawn on top of an iframe, so the
-        // workaround is to create an iframe with no content, then in function
-        // _recalculateElement position the iframe under the "popup" div to
-        // "mask out" the unwanted elements. 
-        var iframe = document.getElementById(overDiv.id + "_IFRAME");
+    org.apache.myfaces.PopupCalendar.prototype._showPopupPostProcess = function (overDiv) {
 
-        if (iframe == null)
-        {
-            // the source attribute is to avoid a IE error message about non secure content on https connections
-            iframe = document.createElement("iframe");
-            iframe.setAttribute("id", overDiv.id + "_IFRAME");
-            iframe.setAttribute("src", "javascript:false;");
-            Element.setStyle(iframe, "visibility:hidden; position: absolute; top:0px;left:0px;");
-
-            //we can append it lazily since we are late here anyway and everything is rendered
-            document.body.appendChild(iframe);
-        }
+        //ie6 detection over object inspections
+        if (this.ie6) {
+            // The iframe created here is a hack to work around an IE bug. In IE,
+            // "windowed controls" (esp selectboxes) do not respect the z-index
+            // setting of "non-windowed controls", meaning they will be drawn on
+            // top of components that they should theoretically be underneath.
+            // However a selectbox will NOT be drawn on top of an iframe, so the
+            // workaround is to create an iframe with no content, then in function
+            // _recalculateElement position the iframe under the "popup" div to
+            // "mask out" the unwanted elements. 
+            var iframe = document.getElementById(overDiv.id + "_IFRAME");
+
+            if (iframe == null) {
+                // the source attribute is to avoid a IE error message about non secure content on https connections
+                iframe = document.createElement("iframe");
+                iframe.setAttribute("id", overDiv.id + "_IFRAME");
+                iframe.setAttribute("src", "javascript:false;");
+                Element.setStyle(iframe, "visibility:hidden; position: absolute; top:0px;left:0px;");
+
+                //we can append it lazily since we are late here anyway and everything is rendered
+                document.body.appendChild(iframe);
+            }
 
-        // now put the iframe at the appropriate location, and make it visible.
-        this._recalculateElement(overDiv);
-    }
-};
+            // now put the iframe at the appropriate location, and make it visible.
+            this._recalculateElement(overDiv);
+        }
+    };
 
 // IE bug workaround: hide background controls under the specified div; see _showPopupPostProcess.
 // This should be called whenever a popup div is moved.
-org_apache_myfaces_PopupCalendar.prototype._recalculateElement = function(overDiv)
-{
-    if (this.ie6)
-    {
-        var iframe = document.getElementById(overDiv.id + "_IFRAME");
-
-        if (iframe)
-        {
-            // ok, there is a "masking iframe" associated with this div, so make its
-            // size and position match the div exactly, and set its z-index to just
-            // below the div. This hack blocks IE selectboxes from being drawn on top
-            // of the div. 
-
-            overDiv.style.zIndex = 98;
-
-            iframe.style.zIndex = overDiv.style.zIndex - 1;
-            iframe.style.width = overDiv.offsetWidth;
-            iframe.style.height = overDiv.offsetHeight;
-            iframe.style.top = overDiv.style.top;
-            iframe.style.left = overDiv.style.left;
-            iframe.style.display = "block";
-            iframe.style.visibility = "visible";
-            /*we have to set an explicit visible otherwise it wont work*/
+    org.apache.myfaces.PopupCalendar.prototype._recalculateElement = function (overDiv) {
+        if (this.ie6) {
+            var iframe = document.getElementById(overDiv.id + "_IFRAME");
+
+            if (iframe) {
+                // ok, there is a "masking iframe" associated with this div, so make its
+                // size and position match the div exactly, and set its z-index to just
+                // below the div. This hack blocks IE selectboxes from being drawn on top
+                // of the div. 
+
+                overDiv.style.zIndex = 98;
+
+                iframe.style.zIndex = overDiv.style.zIndex - 1;
+                iframe.style.width = overDiv.offsetWidth;
+                iframe.style.height = overDiv.offsetHeight;
+                iframe.style.top = overDiv.style.top;
+                iframe.style.left = overDiv.style.left;
+                iframe.style.display = "block";
+                iframe.style.visibility = "visible";
+                /*we have to set an explicit visible otherwise it wont work*/
+            }
         }
-    }
-};
+    };
 
 // IE bug workaround: unhide background controls that are beneath the specified div; see _showPopupPostProcess.
 // Note that although this is called _showeElement, it is called when the popup is being *hidden*,
 // in order to *show* the underlying controls again.
 // we also reallign the floating div 
-org_apache_myfaces_PopupCalendar.prototype._hidePopupPostProcess = function(overDiv)
-{
-	
+    org.apache.myfaces.PopupCalendar.prototype._hidePopupPostProcess = function (overDiv) {
 
-    if (this.ie6)
-    {
-        var iframe = document.getElementById(overDiv.id + "_IFRAME");
-        if (iframe) iframe.style.display = "none";
-    }
-};
-
-org_apache_myfaces_PopupCalendar.prototype.addHoliday = function(d, m, y, desc)
-{
-    this.holidays[this.holidaysCounter++] = new org_apache_myfaces_HolidayRec (d, m, y, desc);
-};
-
-org_apache_myfaces_PopupCalendar.prototype._swapImage = function(srcImg, destImg)
-{
-
-    if (srcImg)
-        srcImg.setAttribute("src", this.initData.imgDir + destImg+ this.initData.imgDirSuffix);
-};
-
-org_apache_myfaces_PopupCalendar.prototype._keypresshandler = function()
-{
-    // This method is intended for use on IE browsers only; they are the only
-    // browsers that define window.event and window.event.keyCode.
-    // Q: Why is this done only for IE?
-    if (window["event"] && window.event["keyCode"] && (window.event.keyCode == 27))
-    {
-        this._hideCalendar();
-    }
-};
+        if (this.ie6) {
+            var iframe = document.getElementById(overDiv.id + "_IFRAME");
+            if (iframe) iframe.style.display = "none";
+        }
+    };
 
-org_apache_myfaces_PopupCalendar.prototype._clickhandler = function()
-{
-    if (!this.bClickOnCalendar)
-    {
-        this._hideCalendar();
-    }
+    org.apache.myfaces.PopupCalendar.prototype.addHoliday = function (d, m, y, desc) {
+        this.holidays[this.holidaysCounter++] = new org.apache.myfaces.HolidayRec(d, m, y, desc);
+    };
 
-    this.bClickOnCalendar = false;
-};
+    org.apache.myfaces.PopupCalendar.prototype._swapImage = function (srcImg, destImg) {
 
-org_apache_myfaces_PopupCalendar.prototype._isDaySelectable = function()
-{
-  return (this.initData.selectMode == "day");
-};
-
-org_apache_myfaces_PopupCalendar.prototype._isWeekSelectable = function()
-{
-  return (this.initData.selectMode == "week");
-};
-
-org_apache_myfaces_PopupCalendar.prototype._isMonthSelectable = function()
-{
-  return (this.initData.selectMode == "month");
-};
-
-org_apache_myfaces_PopupCalendar.prototype.init = function(containerCtl)
-{
-    if (this.dom)
-    {
+        if (srcImg)
+            srcImg.setAttribute("src", this.initData.imgDir + destImg + this.initData.imgDirSuffix);
+    };
 
-        if (!this.calendarDiv)
-        {
-            for (var i = 0; i < this.imgSrc.length; i++)
-            {
-                // force preload of all images, so that when DOM nodes have their src set to
-                // the name of this image, it has already been loaded from the server.
-                this.img[i] = new Image;
-                this.img[i].src = this.initData.imgDir + this.imgSrc[i]+ this.initData.imgDirSuffix;
-            }
-
-            this.containerCtl = containerCtl;
-
-            this.calendarDiv = document.createElement("div");
-            this.calendarDiv.id = containerCtl.id + "_calendarDiv";
-            this.calendarDiv.className = this.initData.themePrefix + "-div-style";
-
-            Event.observe(this.calendarDiv, "click", function()
-            {
-                this.bClickOnCalendar = true;
-            }.bind(this), false);
+    org.apache.myfaces.PopupCalendar.prototype._keypresshandler = function () {
+        // This method is intended for use on IE browsers only; they are the only
+        // browsers that define window.event and window.event.keyCode.
+        // Q: Why is this done only for IE?
+        if (window["event"] && window.event["keyCode"] && (window.event.keyCode == 27)) {
+            this._hideCalendar();
+        }
+    };
+
+    org.apache.myfaces.PopupCalendar.prototype._clickhandler = function () {
+        if (!this.bClickOnCalendar) {
+            this._hideCalendar();
+        }
 
-            this.containerCtl.appendChild(this.calendarDiv);
+        this.bClickOnCalendar = false;
+    };
 
-            var mainTable = document.createElement("table");
-            Element.setStyle(mainTable, "width:" + ((this.initData.showWeekNumber == 1)?250:220) + "px;");
-            mainTable.className = this.initData.themePrefix + "-table-style";
+    org.apache.myfaces.PopupCalendar.prototype._isDaySelectable = function () {
+        return (this.initData.selectMode == "day");
+    };
 
-            this.calendarDiv.appendChild(mainTable);
+    org.apache.myfaces.PopupCalendar.prototype._isWeekSelectable = function () {
+        return (this.initData.selectMode == "week");
+    };
 
-            //This is necessary for IE. If you don't create a tbody element, the table will never show up!
-            var mainBody = document.createElement("tbody");
-            mainTable.appendChild(mainBody);
+    org.apache.myfaces.PopupCalendar.prototype._isMonthSelectable = function () {
+        return (this.initData.selectMode == "month");
+    };
 
-            var mainRow = document.createElement("tr");
-            mainRow.className = this.initData.themePrefix + "-title-background-style";
+    org.apache.myfaces.PopupCalendar.prototype.init = function (containerCtl) {
+        if (this.dom) {
 
-            mainBody.appendChild(mainRow);
+            if (!this.calendarDiv) {
+                for (var i = 0; i < this.imgSrc.length; i++) {
+                    // force preload of all images, so that when DOM nodes have their src set to
+                    // the name of this image, it has already been loaded from the server.
+                    this.img[i] = new Image;
+                    this.img[i].src = this.initData.imgDir + this.imgSrc[i] + this.initData.imgDirSuffix;
+                }
 
-            var mainCell = document.createElement("td");
+                this.containerCtl = containerCtl;
 
-            mainRow.appendChild(mainCell);
+                this.calendarDiv = document.createElement("div");
+                this.calendarDiv.id = containerCtl.id + "_calendarDiv";
+                this.calendarDiv.className = this.initData.themePrefix + "-div-style";
 
-            var contentTable = document.createElement("table");
-            Element.setStyle(contentTable, "width:" + ((this.initData.showWeekNumber == 1)?248:218) + "px;");
+                Event.observe(this.calendarDiv, "click", function () {
+                    this.bClickOnCalendar = true;
+                }.bind(this), false);
 
-            var contentBody = document.createElement("tbody");
-            contentTable.appendChild(contentBody);
+                this.containerCtl.appendChild(this.calendarDiv);
 
-            mainCell.appendChild(contentTable);
+                var mainTable = document.createElement("table");
+                Element.setStyle(mainTable, "width:" + ((this.initData.showWeekNumber == 1) ? 250 : 220) + "px;");
+                mainTable.className = this.initData.themePrefix + "-table-style";
 
-            var headerRow = document.createElement("tr");
-            contentBody.appendChild(headerRow);
+                this.calendarDiv.appendChild(mainTable);
 
-            var captionCell = document.createElement("td");
-            captionCell.className = this.initData.themePrefix + "-title-style";
-            headerRow.appendChild(captionCell);
+                //This is necessary for IE. If you don't create a tbody element, the table will never show up!
+                var mainBody = document.createElement("tbody");
+                mainTable.appendChild(mainBody);
 
-            this.captionSpan = document.createElement("span");
-            captionCell.appendChild(this.captionSpan);
+                var mainRow = document.createElement("tr");
+                mainRow.className = this.initData.themePrefix + "-title-background-style";
 
-            if (this._isMonthSelectable())
-            {
-                var acceptMonthCell = document.createElement("td");
-                Element.setStyle(acceptMonthCell, "text-align:right;");
-                headerRow.appendChild(acceptMonthCell);
-    
-                var acceptMonthLink = document.createElement("a");
-                acceptMonthLink.setAttribute("href", "#");
-                Event.observe(acceptMonthLink, "click", function(event)
-                {
-                    this.selectedDate.date = 1; // force first of the selected month
-                    this._closeCalendar();
+                mainBody.appendChild(mainRow);
+
+                var mainCell = document.createElement("td");
+
+                mainRow.appendChild(mainCell);
+
+                var contentTable = document.createElement("table");
+                Element.setStyle(contentTable, "width:" + ((this.initData.showWeekNumber == 1) ? 248 : 218) + "px;");
+
+                var contentBody = document.createElement("tbody");
+                contentTable.appendChild(contentBody);
+
+                mainCell.appendChild(contentTable);
+
+                var headerRow = document.createElement("tr");
+                contentBody.appendChild(headerRow);
+
+                var captionCell = document.createElement("td");
+                captionCell.className = this.initData.themePrefix + "-title-style";
+                headerRow.appendChild(captionCell);
+
+                this.captionSpan = document.createElement("span");
+                captionCell.appendChild(this.captionSpan);
+
+                if (this._isMonthSelectable()) {
+                    var acceptMonthCell = document.createElement("td");
+                    Element.setStyle(acceptMonthCell, "text-align:right;");
+                    headerRow.appendChild(acceptMonthCell);
+
+                    var acceptMonthLink = document.createElement("a");
+                    acceptMonthLink.setAttribute("href", "#");
+                    Event.observe(acceptMonthLink, "click", function (event) {
+                        this.selectedDate.date = 1; // force first of the selected month
+                        this._closeCalendar();
+                        Event.stop(event);
+                    }.bindAsEventListener(this), false);
+
+                    acceptMonthCell.appendChild(acceptMonthLink);
+                    this.acceptMonthSpan = document.createElement("span");
+                    this.acceptMonthSpan.appendChild(document.createTextNode("Y"));
+
+                    acceptMonthLink.appendChild(this.acceptMonthSpan);
+                }
+
+                var closeButtonCell = document.createElement("td");
+                Element.setStyle(closeButtonCell, "text-align:right;");
+                headerRow.appendChild(closeButtonCell);
+
+                var closeCalendarLink = document.createElement("a");
+                closeCalendarLink.setAttribute("href", "#");
+                Event.observe(closeCalendarLink, "click", function (event) {
+                    this._hideCalendar();
                     Event.stop(event);
                 }.bindAsEventListener(this), false);
-    
-                acceptMonthCell.appendChild(acceptMonthLink);
-                this.acceptMonthSpan = document.createElement("span");
-                this.acceptMonthSpan.appendChild(document.createTextNode("Y"));
-    
-                acceptMonthLink.appendChild(this.acceptMonthSpan);
-            }
-
-            var closeButtonCell = document.createElement("td");
-            Element.setStyle(closeButtonCell, "text-align:right;");
-            headerRow.appendChild(closeButtonCell);
-
-            var closeCalendarLink = document.createElement("a");
-            closeCalendarLink.setAttribute("href", "#");
-            Event.observe(closeCalendarLink, "click", function(event)
-            {
-                this._hideCalendar();
-                Event.stop(event);
-            }.bindAsEventListener(this), false);
 
-            closeButtonCell.appendChild(closeCalendarLink);
+                closeButtonCell.appendChild(closeCalendarLink);
 
-            this.closeCalendarSpan = document.createElement("span");
+                this.closeCalendarSpan = document.createElement("span");
 
-            closeCalendarLink.appendChild(this.closeCalendarSpan);
+                closeCalendarLink.appendChild(this.closeCalendarSpan);
 
-            var contentRow = document.createElement("tr");
-            mainBody.appendChild(contentRow);
+                var contentRow = document.createElement("tr");
+                mainBody.appendChild(contentRow);
 
-            var contentCell = document.createElement("td");
-            contentCell.className = this.initData.themePrefix + "-body-style";
-            contentRow.appendChild(contentCell);
+                var contentCell = document.createElement("td");
+                contentCell.className = this.initData.themePrefix + "-body-style";
+                contentRow.appendChild(contentCell);
 
-            this.contentSpan = document.createElement("span");
-            contentCell.appendChild(this.contentSpan);
+                this.contentSpan = document.createElement("span");
+                contentCell.appendChild(this.contentSpan);
 
-            if (this.initData.showToday == 1)
-            {
-                var todayRow = document.createElement("tr");
-                todayRow.className = this.initData.themePrefix + "-today-style";
-                mainBody.appendChild(todayRow);
+                if (this.initData.showToday == 1) {
+                    var todayRow = document.createElement("tr");
+                    todayRow.className = this.initData.themePrefix + "-today-style";
+                    mainBody.appendChild(todayRow);
 
-                var todayCell = document.createElement("td");
-                todayCell.className = this.initData.themePrefix + "-today-lbl-style";
-                todayRow.appendChild(todayCell);
+                    var todayCell = document.createElement("td");
+                    todayCell.className = this.initData.themePrefix + "-today-lbl-style";
+                    todayRow.appendChild(todayCell);
 
-                this.todaySpan = document.createElement("span");
-                todayCell.appendChild(this.todaySpan);
-            }
+                    this.todaySpan = document.createElement("span");
+                    todayCell.appendChild(this.todaySpan);
+                }
 
-            this.selectMonthDiv = document.createElement("div");
-            this.selectMonthDiv.id = this.containerCtl.id + "_selectMonthDiv";
-            this.selectMonthDiv.className = this.initData.themePrefix + "-div-style";
+                this.selectMonthDiv = document.createElement("div");
+                this.selectMonthDiv.id = this.containerCtl.id + "_selectMonthDiv";
+                this.selectMonthDiv.className = this.initData.themePrefix + "-div-style";
 
-            this.containerCtl.appendChild(this.selectMonthDiv);
+                this.containerCtl.appendChild(this.selectMonthDiv);
 
-            this.selectYearDiv = document.createElement("div");
-            this.selectYearDiv.id = this.containerCtl.id + "_selectYearDiv";
-            this.selectYearDiv.className = this.initData.themePrefix + "-div-style";
+                this.selectYearDiv = document.createElement("div");
+                this.selectYearDiv.id = this.containerCtl.id + "_selectYearDiv";
+                this.selectYearDiv.className = this.initData.themePrefix + "-div-style";
 
-            this.containerCtl.appendChild(this.selectYearDiv);
+                this.containerCtl.appendChild(this.selectYearDiv);
 
-            // Catch global keypresses and clicks, so that entering data into any field
-            // outside the calendar, or clicking anywhere outside the calendar, will
-            // close it.
-            //
-            // This is ugly, as it's quite a load on the client to check this for every
-            // keystroke/click. It would be nice to find an alternative...maybe register
-            // these listeners only when a calendar is open?
-            Event.observe(document, "keypress", this._keypresshandler.bind(this), false);
-            Event.observe(document, "click", this._clickhandler.bind(this), false);
+                // Catch global keypresses and clicks, so that entering data into any field
+                // outside the calendar, or clicking anywhere outside the calendar, will
+                // close it.
+                //
+                // This is ugly, as it's quite a load on the client to check this for every
+                // keystroke/click. It would be nice to find an alternative...maybe register
+                // these listeners only when a calendar is open?
+                Event.observe(document, "keypress", this._keypresshandler.bind(this), false);
+                Event.observe(document, "click", this._clickhandler.bind(this), false);
+            }
         }
-    }
 
+        if (!this.ns4) {
+            /* Instead use getFullYear() */
+            /*if (!this.ie6)
+             this.yearNow += 1900;*/
+
+            this._hideCalendar();
+
+            this.monthConstructed = false;
+            this.yearConstructed = false;
+
+            if (this.initData.showToday == 1) {
+                // TODO this.dateFormatSymbols is probably never set at this point.
+                this.todayDateFormatter = new org.apache.myfaces.dateformat.SimpleDateFormatter(
+                        this.initData.todayDateFormat ? this.initData.todayDateFormat : this.dateFormat,
+                        this.dateFormatSymbols,
+                        this.initData.startAt);
+
+                this.todaySpan.appendChild(document.createTextNode(this.initData.todayString + " "))
+
+                var todayLink = document.createElement("a");
+                todayLink.className = this.initData.themePrefix + "-today-style";
+                todayLink.setAttribute("title", this.initData.gotoString);
+                todayLink.setAttribute("href", "#");
+                todayLink.appendChild(document.createTextNode(this._todayIsDate()));
+                Event.observe(todayLink, "click", function (event) {
+                    this.selectedDate.month = this.monthNow;
+                    this.selectedDate.year = this.yearNow;
+                    this._constructCalendar();
+                    Event.stop(event);
+                }.bindAsEventListener(this), false);
+                Event.observe(todayLink, "mousemove", function () {
+                    window.status = this.initData.gotoString;
+                }.bind(this), false);
+                Event.observe(todayLink, "mouseout", function () {
+                    window.status = "";
+                }.bind(this), false);
 
-    if (!this.ns4)
-    {
-        /* Instead use getFullYear() */
-        /*if (!this.ie6)
-            this.yearNow += 1900;*/
+                this.todaySpan.appendChild(todayLink);
+            }
 
-        this._hideCalendar();
+            this._appendNavToCaption("left");
+            this._appendNavToCaption("right");
 
-        this.monthConstructed = false;
-        this.yearConstructed = false;
+            this.monthSpan = document.createElement("span");
+            this.monthSpan.className = this.initData.themePrefix + "-title-control-normal-style";
 
-        if (this.initData.showToday == 1)
-        {
-            // TODO this.dateFormatSymbols is probably never set at this point.
-    		this.todayDateFormatter = new org_apache_myfaces_dateformat_SimpleDateFormatter(
-    		    this.initData.todayDateFormat? this.initData.todayDateFormat:this.dateFormat,
-                this.dateFormatSymbols,
-                this.initData.startAt);
-
-            this.todaySpan.appendChild(document.createTextNode(this.initData.todayString + " "))
-
-            var todayLink = document.createElement("a");
-            todayLink.className = this.initData.themePrefix + "-today-style";
-            todayLink.setAttribute("title", this.initData.gotoString);
-            todayLink.setAttribute("href", "#")
-            todayLink.appendChild(document.createTextNode(this._todayIsDate()));
-            Event.observe(todayLink, "click", function(event)
-            {
-                this.selectedDate.month = this.monthNow;
-                this.selectedDate.year = this.yearNow;
-                this._constructCalendar();
-                Event.stop(event);
+            Event.observe(this.monthSpan, "mouseover", function (event) {
+                this._swapImage(this.changeMonthImg, "drop2.gif");
+                this.monthSpan.className = this.initData.themePrefix + "-title-control-select-style";
+                window.status = this.selectMonthMessage;
             }.bindAsEventListener(this), false);
-            Event.observe(todayLink, "mousemove", function()
-            {
-                window.status = this.initData.gotoString;
-            }.bind(this), false);
-            Event.observe(todayLink, "mouseout", function()
-            {
+
+            Event.observe(this.monthSpan, "mouseout", function (event) {
+                this._swapImage(this.changeMonthImg, "drop1.gif");
+                this.monthSpan.className = this.initData.themePrefix + "-title-control-normal-style";
                 window.status = "";
+            }.bindAsEventListener(this), false);
+
+            Event.observe(this.monthSpan, "click", function (event) {
+                this._popUpMonth();
+                Event.stop(event);
             }.bind(this), false);
 
-            this.todaySpan.appendChild(todayLink);
-        }
+            this.captionSpan.appendChild(this.monthSpan);
+            this._appendNbsp(this.captionSpan);
 
-        this._appendNavToCaption("left");
-        this._appendNavToCaption("right");
+            this.yearSpan = document.createElement("span");
+            this.yearSpan.className = this.initData.themePrefix + "-title-control-normal-style";
 
-        this.monthSpan = document.createElement("span");
-        this.monthSpan.className = this.initData.themePrefix + "-title-control-normal-style";
+            Event.observe(this.yearSpan, "mouseover", function (event) {
+                this._swapImage(this.changeYearImg, "drop2.gif");
+                this.yearSpan.className = this.initData.themePrefix + "-title-control-select-style";
+                window.status = this.selectYearMessage;
+            }.bindAsEventListener(this), false);
 
-        Event.observe(this.monthSpan, "mouseover", function(event)
-        {
-            this._swapImage(this.changeMonthImg, "drop2.gif");
-            this.monthSpan.className = this.initData.themePrefix + "-title-control-select-style";
-            window.status = this.selectMonthMessage;
-        }.bindAsEventListener(this), false);
+            Event.observe(this.yearSpan, "mouseout", function (event) {
+                this._swapImage(this.changeYearImg, "drop1.gif");
+                this.yearSpan.className = this.initData.themePrefix + "-title-control-normal-style";
+                window.status = "";
+            }.bindAsEventListener(this), false);
 
-        Event.observe(this.monthSpan, "mouseout", function(event)
-        {
-            this._swapImage(this.changeMonthImg, "drop1.gif");
-            this.monthSpan.className = this.initData.themePrefix + "-title-control-normal-style";
-            window.status = "";
-        }.bindAsEventListener(this), false);
+            Event.observe(this.yearSpan, "click", function (event) {
+                this._popUpYear();
+                Event.stop(event);
+            }.bind(this), false);
 
-        Event.observe(this.monthSpan, "click", function(event)
-        {
-            this._popUpMonth();
-            Event.stop(event);
-        }.bind(this), false);
+            this.captionSpan.appendChild(this.yearSpan);
+            this._appendNbsp(this.captionSpan);
 
-        this.captionSpan.appendChild(this.monthSpan);
-        this._appendNbsp(this.captionSpan);
+            this.bPageLoaded = true;
 
-        this.yearSpan = document.createElement("span");
-        this.yearSpan.className = this.initData.themePrefix + "-title-control-normal-style";
+        }
+    };
 
-        Event.observe(this.yearSpan, "mouseover", function(event)
-        {
-            this._swapImage(this.changeYearImg, "drop2.gif");
-            this.yearSpan.className = this.initData.themePrefix + "-title-control-select-style";
-            window.status = this.selectYearMessage;
+    org.apache.myfaces.PopupCalendar.prototype._appendNavToCaption = function (direction) {
+        var imgLeft = document.createElement("img");
+        imgLeft.setAttribute("src", this.initData.imgDir + direction + "1.gif" + this.initData.imgDirSuffix);
+        imgLeft.setAttribute("width", "10px");
+        imgLeft.setAttribute("height", "11px");
+        Element.setStyle(imgLeft, "border:0px;");
+
+        var spanLeft = document.createElement("span");
+
+        this._createControl(direction, spanLeft, imgLeft);
+
+        this._appendNbsp(spanLeft);
+        spanLeft.appendChild(imgLeft);
+        this._appendNbsp(spanLeft);
+        this.captionSpan.appendChild(spanLeft);
+        this._appendNbsp(spanLeft);
+    };
+
+    org.apache.myfaces.PopupCalendar.prototype._createControl = function (direction, spanLeft, imgLeft) {
+        spanLeft.className = this.initData.themePrefix + "-title-control-normal-style";
+        Event.observe(spanLeft, "mouseover", function (event) {
+            this._swapImage(imgLeft, direction + "2.gif");
+            spanLeft.className = this.initData.themePrefix + "-title-control-select-style";
+            if (direction == "left") {
+                window.status = this.scrollLeftMessage;
+            }
+            else {
+                window.status = this.scrollRightMessage;
+            }
         }.bindAsEventListener(this), false);
-
-        Event.observe(this.yearSpan, "mouseout", function(event)
-        {
-            this._swapImage(this.changeYearImg, "drop1.gif");
-            this.yearSpan.className = this.initData.themePrefix + "-title-control-normal-style";
+        Event.observe(spanLeft, "click", function () {
+            if (direction == "left") {
+                this._decMonth();
+            }
+            else {
+                this._incMonth();
+            }
+        }.bind(this), false);
+        Event.observe(spanLeft, "mouseout", function (event) {
+            clearInterval(this.intervalID1);
+            this._swapImage(imgLeft, direction + "1.gif");
+            spanLeft.className = "" + this.initData.themePrefix + "-title-control-normal-style";
             window.status = "";
         }.bindAsEventListener(this), false);
-
-        Event.observe(this.yearSpan, "click", function(event)
-        {
-            this._popUpYear();
-            Event.stop(event);
+        Event.observe(spanLeft, "mousedown", function () {
+            clearTimeout(this.timeoutID1);
+            this.timeoutID1 = setTimeout((function () {
+                if (direction == "left") {
+                    this._startDecMonth();
+                }
+                else {
+                    this._startIncMonth();
+                }
+            }).bind(this), 500)
         }.bind(this), false);
+        Event.observe(spanLeft, "mouseup", function () {
+            clearTimeout(this.timeoutID1);
+            clearInterval(this.intervalID1);
+        }.bind(this), false);
+    };
 
-        this.captionSpan.appendChild(this.yearSpan);
-        this._appendNbsp(this.captionSpan);
-
-        this.bPageLoaded = true;
+    org.apache.myfaces.PopupCalendar.prototype._appendNbsp = function (element) {
+        if (element)
+            element.appendChild(document.createTextNode(String.fromCharCode(160)));
+    };
+
+    org.apache.myfaces.PopupCalendar.prototype._todayIsDate = function () {
+        return this.todayDateFormatter.format(this.today);
+    };
+
+    org.apache.myfaces.PopupCalendar.prototype._hideCalendar = function () {
+        this.calendarDiv.style.visibility = "hidden"
+        this.bCalendarHidden = true;
+        if (this.selectMonthDiv.style != null) {
+            this.selectMonthDiv.style.visibility = "hidden";
+        }
+        if (this.selectYearDiv.style != null) {
+            this.selectYearDiv.style.visibility = "hidden";
+        }
+
+        this._hidePopupPostProcess(this.selectMonthDiv);
+        this._hidePopupPostProcess(this.selectYearDiv);
+        this._hidePopupPostProcess(this.calendarDiv);
+    };
+
+    org.apache.myfaces.PopupCalendar.prototype._padZero = function (num) {
+        return (num < 10) ? '0' + num : num;
+    };
+
+    org.apache.myfaces.PopupCalendar.prototype._constructDate = function (d, m, y) {
+        var date = new Date(y, m, d, this.selectedDate.hour, this.selectedDate.min, this.selectedDate.sec);
+        return this.stdDateFormatter.format(date);
+    };
 
-    }
-};
+    org.apache.myfaces.PopupCalendar.prototype._closeCalendar = function () {
+        this._hideCalendar();
 
-org_apache_myfaces_PopupCalendar.prototype._appendNavToCaption = function(direction)
-{
-    var imgLeft = document.createElement("img");
-    imgLeft.setAttribute("src", this.initData.imgDir + direction + "1.gif"+this.initData.imgDirSuffix);
-    imgLeft.setAttribute("width","10px");
-    imgLeft.setAttribute("height","11px");
-    Element.setStyle(imgLeft, "border:0px;");
-
-    var spanLeft = document.createElement("span");
-
-    this._createControl(direction, spanLeft, imgLeft);
-
-    this._appendNbsp(spanLeft);
-    spanLeft.appendChild(imgLeft);
-    this._appendNbsp(spanLeft);
-    this.captionSpan.appendChild(spanLeft);
-    this._appendNbsp(spanLeft);
-};
-
-org_apache_myfaces_PopupCalendar.prototype._createControl = function(direction, spanLeft, imgLeft)
-{
-    spanLeft.className = this.initData.themePrefix + "-title-control-normal-style";
-    Event.observe(spanLeft, "mouseover", function(event)
-    {
-        this._swapImage(imgLeft, direction + "2.gif");
-        spanLeft.className = this.initData.themePrefix + "-title-control-select-style";
-        if (direction == "left")
-        {
-            window.status = this.scrollLeftMessage;
-        }
-        else
-        {
-            window.status = this.scrollRightMessage;
-        }
-    }.bindAsEventListener(this), false);
-    Event.observe(spanLeft, "click", function()
-    {
-        if (direction == "left")
-        {
-            this._decMonth();
+        if (this.myFacesCtlType != "x:inputDate") {
+            this.ctlToPlaceValue.value = this._constructDate(this.selectedDate.date, this.selectedDate.month, this.selectedDate.year)
+            var onchange = this.ctlToPlaceValue.getAttribute("onchange");
+            if (onchange) {
+                this.ctlToPlaceValue.onchange();
+            }
         }
-        else
-        {
-            this._incMonth();
+        else {
+            document.getElementById(this.myFacesInputDateClientId + ".day").value = this.selectedDate.date;
+            document.getElementById(this.myFacesInputDateClientId + ".month").value = this.selectedDate.month + 1;
+            document.getElementById(this.myFacesInputDateClientId + ".year").value = this.selectedDate.year;
         }
-    }.bind(this), false);
-    Event.observe(spanLeft, "mouseout", function(event)
-    {
-        clearInterval(this.intervalID1);
-        this._swapImage(imgLeft, direction + "1.gif");
-        spanLeft.className = "" + this.initData.themePrefix + "-title-control-normal-style";
-        window.status = "";
-    }.bindAsEventListener(this), false);
-    Event.observe(spanLeft, "mousedown", function()
-    {
-        clearTimeout(this.timeoutID1);
-        this.timeoutID1 = setTimeout((function()
-        {
-            if (direction == "left")
-            {
-                this._startDecMonth();
-            }
-            else
-            {
-                this._startIncMonth();
-            }
-        }).bind(this), 500)
-    }.bind(this), false);
-    Event.observe(spanLeft, "mouseup", function()
-    {
-        clearTimeout(this.timeoutID1);
-        clearInterval(this.intervalID1);
-    }.bind(this), false);
-};
+    };
 
-org_apache_myfaces_PopupCalendar.prototype._appendNbsp = function(element)
-{
-    if (element)
-        element.appendChild(document.createTextNode(String.fromCharCode(160)));
-};
-
-org_apache_myfaces_PopupCalendar.prototype._todayIsDate = function()
-{
-    return this.todayDateFormatter.format(this.today);
-};
-
-org_apache_myfaces_PopupCalendar.prototype._hideCalendar = function()
-{
-    this.calendarDiv.style.visibility = "hidden"
-    this.bCalendarHidden = true;
-    if (this.selectMonthDiv.style != null)
-    {
-        this.selectMonthDiv.style.visibility = "hidden";
-    }
-    if (this.selectYearDiv.style != null)
-    {
-        this.selectYearDiv.style.visibility = "hidden";
-    }
+    /*** Month Pulldown ***/
 
-    this._hidePopupPostProcess(this.selectMonthDiv);
-    this._hidePopupPostProcess(this.selectYearDiv);
-    this._hidePopupPostProcess(this.calendarDiv);
-};
-
-org_apache_myfaces_PopupCalendar.prototype._padZero = function(num)
-{
-    return (num < 10)? '0' + num : num;
-};
-
-org_apache_myfaces_PopupCalendar.prototype._constructDate = function(d, m, y)
-{
-    var date = new Date(y, m, d, this.selectedDate.hour, this.selectedDate.min, this.selectedDate.sec);
-    return this.stdDateFormatter.format(date);
-};
-
-org_apache_myfaces_PopupCalendar.prototype._closeCalendar = function()
-{
-    this._hideCalendar();
+    org.apache.myfaces.PopupCalendar.prototype._startDecMonth = function () {
+        this.intervalID1 = setInterval((function () {
+            this._decMonth();
+        }).bind(this), 80);
+    };
 
-    if (this.myFacesCtlType != "x:inputDate")
-    {
-        this.ctlToPlaceValue.value = this._constructDate(this.selectedDate.date, this.selectedDate.month, this.selectedDate.year)
-        var onchange = this.ctlToPlaceValue.getAttribute("onchange");
-        if (onchange)
-        {
-            this.ctlToPlaceValue.onchange();
-        }
-    }
-    else
-    {
-        document.getElementById(this.myFacesInputDateClientId + ".day").value = this.selectedDate.date;
-        document.getElementById(this.myFacesInputDateClientId + ".month").value = this.selectedDate.month + 1;
-        document.getElementById(this.myFacesInputDateClientId + ".year").value = this.selectedDate.year;
-    }
-};
-
-/*** Month Pulldown ***/
-
-org_apache_myfaces_PopupCalendar.prototype._startDecMonth = function()
-{
-    this.intervalID1 = setInterval((function()
-    {
-        this._decMonth();
-    }).bind(this), 80);
-}
-
-org_apache_myfaces_PopupCalendar.prototype._startIncMonth = function()
-{
-    this.intervalID1 = setInterval((function()
-    {
-        this._incMonth();
-    }).bind(this), 80);
-}
-
-org_apache_myfaces_PopupCalendar.prototype._incMonth = function()
-{
-    this.selectedDate.month = this.selectedDate.month + 1;
-    if (this.selectedDate.month > 11)
-    {
-        this.selectedDate.month = 0;
-        this.selectedDate.year++;
-    }
-    this._constructCalendar();
-}
-
-org_apache_myfaces_PopupCalendar.prototype._decMonth = function()
-{
-    this.selectedDate.month = this.selectedDate.month - 1;
-    if (this.selectedDate.month < 0)
-    {
-        this.selectedDate.month = 11;
-        this.selectedDate.year--;
-    }
-    this._constructCalendar()
-};
-
-
-org_apache_myfaces_PopupCalendar.prototype._removeAllChildren = function(element)
-{
-    while (element && element.hasChildNodes())
-        element.removeChild(element.lastChild);
-};
-
-org_apache_myfaces_PopupCalendar.prototype._constructMonth = function()
-{
-    this._popDownYear();
-    if (!this.monthConstructed)
-    {
+    org.apache.myfaces.PopupCalendar.prototype._startIncMonth = function () {
+        this.intervalID1 = setInterval((function () {
+            this._incMonth();
+        }).bind(this), 80);
+    };
 
-        var selectMonthTable = document.createElement("table");
-        Element.setStyle(selectMonthTable, "width:70px;border-collapse:collapse;");
-        selectMonthTable.className = this.initData.themePrefix + "-dropdown-style";
+    org.apache.myfaces.PopupCalendar.prototype._incMonth = function () {
+        this.selectedDate.month = this.selectedDate.month + 1;
+        if (this.selectedDate.month > 11) {
+            this.selectedDate.month = 0;
+            this.selectedDate.year++;
+        }
+        this._constructCalendar();
+    };
+
+    org.apache.myfaces.PopupCalendar.prototype._decMonth = function () {
+        this.selectedDate.month = this.selectedDate.month - 1;
+        if (this.selectedDate.month < 0) {
+            this.selectedDate.month = 11;
+            this.selectedDate.year--;
+        }
+        this._constructCalendar()
+    };
+
+    org.apache.myfaces.PopupCalendar.prototype._removeAllChildren = function (element) {
+        while (element && element.hasChildNodes())
+            element.removeChild(element.lastChild);
+    };
+
+    org.apache.myfaces.PopupCalendar.prototype._constructMonth = function () {
+        this._popDownYear();
+        if (!this.monthConstructed) {
+
+            var selectMonthTable = document.createElement("table");
+            Element.setStyle(selectMonthTable, "width:70px;border-collapse:collapse;");
+            selectMonthTable.className = this.initData.themePrefix + "-dropdown-style";
 
-        this._removeAllChildren(this.selectMonthDiv);
+            this._removeAllChildren(this.selectMonthDiv);
 
-        this.selectMonthDiv.appendChild(selectMonthTable);
+            this.selectMonthDiv.appendChild(selectMonthTable);
 
-        Event.observe(selectMonthTable, "mouseover", function()
-        {
-            clearTimeout(this.timeoutID1);
-        }.bind(this), false);
-        Event.observe(selectMonthTable, "mouseout", function(event)
-        {
-            clearTimeout(this.timeoutID1);
-            this.timeoutID1 = setTimeout((function()
-            {
-                this._popDownMonth()
-            }).bind(this), 100);
-            Event.stop(event);
-        }.bindAsEventListener(this), false);
+            Event.observe(selectMonthTable, "mouseover", function () {
+                clearTimeout(this.timeoutID1);
+            }.bind(this), false);
+            Event.observe(selectMonthTable, "mouseout", function (event) {
+                clearTimeout(this.timeoutID1);
+                this.timeoutID1 = setTimeout((function () {
+                    this._popDownMonth()
+                }).bind(this), 100);
+                Event.stop(event);
+            }.bindAsEventListener(this), false);
 
-        var selectMonthTableBody = document.createElement("tbody");
-        selectMonthTable.appendChild(selectMonthTableBody);
+            var selectMonthTableBody = document.createElement("tbody");
+            selectMonthTable.appendChild(selectMonthTableBody);
 
-        for (i = 0; i < 12; i++)
-        {
-            var sName = this.initData.monthName[i];
+            for (i = 0; i < 12; i++) {
+                var sName = this.initData.monthName[i];
 
-            var sNameNode = null;
+                var sNameNode = null;
 
-            if (i == this.selectedDate.month)
-            {
-                sNameNode = document.createElement("span");
-                Element.setStyle(sNameNode, "font-weight:bold;");
-                sNameNode.appendChild(document.createTextNode(sName));
-                sNameNode.setAttribute("userData",i);
-            }
-            else
-            {
-                sNameNode = document.createTextNode(sName);
+                if (i == this.selectedDate.month) {
+                    sNameNode = document.createElement("span");
+                    Element.setStyle(sNameNode, "font-weight:bold;");
+                    sNameNode.appendChild(document.createTextNode(sName));
+                    sNameNode.setAttribute("userData", i);
+                }
+                else {
+                    sNameNode = document.createTextNode(sName);
+                }
+
+                var monthRow = document.createElement("tr");
+                selectMonthTableBody.appendChild(monthRow);
+
+                var monthCell = document.createElement("td");
+                monthCell.setAttribute("userData", i);
+                monthRow.appendChild(monthCell);
+
+                Event.observe(monthCell, "mouseover", function (event) {
+                    Event.element(event).className = this.initData.themePrefix + "-dropdown-select-style";
+                }.bind(this), false);
+
+                Event.observe(monthCell, "mouseout", function (event) {
+                    Event.element(event).className = this.initData.themePrefix + "-dropdown-normal-style";
+                }.bind(this), false);
+
+                Event.observe(monthCell, "click", function (event) {
+                    this.monthConstructed = false;
+                    this.selectedDate.month = parseInt(Event.element(event).getAttribute("userData"), 10);
+                    this._constructCalendar();
+                    this._popDownMonth();
+                    Event.stop(event);
+                }.bindAsEventListener(this), false);
+
+                this._appendNbsp(monthCell);
+                monthCell.appendChild(sNameNode);
+                this._appendNbsp(monthCell);
             }
 
-            var monthRow = document.createElement("tr");
-            selectMonthTableBody.appendChild(monthRow);
+            this.monthConstructed = true;
+        }
+    };
 
-            var monthCell = document.createElement("td");
-            monthCell.setAttribute("userData",i);
-            monthRow.appendChild(monthCell);
+    org.apache.myfaces.PopupCalendar.prototype._popUpMonth = function () {
+        this._constructMonth()
+        this._fixPopupDomOrder(this.selectMonthDiv);
+        this.selectMonthDiv.style.visibility = (this.dom || this.ie6) ? "visible" : "show";
+        this.selectMonthDiv.style.left = parseInt(this._formatInt(this.calendarDiv.style.left), 10) + 50 + "px";
+        this.selectMonthDiv.style.top = parseInt(this._formatInt(this.calendarDiv.style.top), 10) + 26 + "px";
 
-            Event.observe(monthCell, "mouseover", function(event)
-            {
-                Event.element(event).className = this.initData.themePrefix + "-dropdown-select-style";
-            }.bind(this), false);
+        this._showPopupPostProcess(this.selectMonthDiv);
+    };
 
-            Event.observe(monthCell, "mouseout", function(event)
-            {
-                Event.element(event).className = this.initData.themePrefix + "-dropdown-normal-style";
-            }.bind(this), false);
+    org.apache.myfaces.PopupCalendar.prototype._popDownMonth = function () {
+        this.selectMonthDiv.style.visibility = "hidden";
+        this._hidePopupPostProcess(this.selectMonthDiv);
+    };
 
-            Event.observe(monthCell, "click", function(event)
-            {
-                this.monthConstructed = false;
-                this.selectedDate.month = parseInt(Event.element(event).getAttribute("userData"),10);
-                this._constructCalendar();
-                this._popDownMonth();
-                Event.stop(event);
-            }.bindAsEventListener(this), false);
+    /*** Year Pulldown ***/
 
-            this._appendNbsp(monthCell);
-            monthCell.appendChild(sNameNode);
-            this._appendNbsp(monthCell);
-        }
-
-        this.monthConstructed = true;
-    }
-};
-
-org_apache_myfaces_PopupCalendar.prototype._popUpMonth = function()
-{
-    this._constructMonth()
-    this._fixPopupDomOrder(this.selectMonthDiv);
-    this.selectMonthDiv.style.visibility = (this.dom || this.ie6)? "visible"    : "show";
-    this.selectMonthDiv.style.left = parseInt(this._formatInt(this.calendarDiv.style.left), 10) + 50 + "px";
-    this.selectMonthDiv.style.top = parseInt(this._formatInt(this.calendarDiv.style.top), 10) + 26 + "px";
-
-    this._showPopupPostProcess(this.selectMonthDiv);
-};
-
-org_apache_myfaces_PopupCalendar.prototype._popDownMonth = function()
-{
-    this.selectMonthDiv.style.visibility = "hidden";
-    this._hidePopupPostProcess(this.selectMonthDiv);
-};
-
-/*** Year Pulldown ***/
-
-org_apache_myfaces_PopupCalendar.prototype._incYear = function()
-{
-    for (var i = 0; i < 7; i++)
-    {
-        var newYear = (i + this.nStartingYear) + 1;
+    org.apache.myfaces.PopupCalendar.prototype._incYear = function () {
+        for (var i = 0; i < 7; i++) {
+            var newYear = (i + this.nStartingYear) + 1;
 
-        this._createAndAddYear(newYear, i);
-    }
-    this.nStartingYear++;
-    this.bClickOnCalendar = true;
-};
+            this._createAndAddYear(newYear, i);
+        }
+        this.nStartingYear++;
+        this.bClickOnCalendar = true;
+    };
 
-org_apache_myfaces_PopupCalendar.prototype._createAndAddYear = function(newYear, i)
-{
-    var parentNode = document.getElementById(this.containerCtl.getAttribute("id")+"y" + i);
+    org.apache.myfaces.PopupCalendar.prototype._createAndAddYear = function (newYear, i) {
+        var parentNode = document.getElementById(this.containerCtl.getAttribute("id") + "y" + i);
 
-    this._removeAllChildren(parentNode);
+        this._removeAllChildren(parentNode);
 
-    if (newYear == this.selectedDate.year)
-    {
-        this._appendNbsp(parentNode);
-        var newYearSpan = document.createElement("span");
-        newYearSpan.setAttribute("userData",newYear);
-        newYearSpan.appendChild(document.createTextNode(newYear));
-        parentNode.appendChild(newYearSpan);
-        this._appendNbsp(parentNode);
-    }
-    else
-    {
-        this._appendNbsp(parentNode);
-        parentNode.appendChild(document.createTextNode(newYear));
-        this._appendNbsp(parentNode);
-    }
-
-    parentNode.setAttribute("userData",newYear);
-};
+        if (newYear == this.selectedDate.year) {
+            this._appendNbsp(parentNode);
+            var newYearSpan = document.createElement("span");
+            newYearSpan.setAttribute("userData", newYear);
+            newYearSpan.appendChild(document.createTextNode(newYear));
+            parentNode.appendChild(newYearSpan);
+            this._appendNbsp(parentNode);
+        }
+        else {
+            this._appendNbsp(parentNode);
+            parentNode.appendChild(document.createTextNode(newYear));
+            this._appendNbsp(parentNode);
+        }
 
+        parentNode.setAttribute("userData", newYear);
+    };
 
-org_apache_myfaces_PopupCalendar.prototype._decYear = function()
-{
-    for (i = 0; i < 7; i++)
-    {
-        var newYear = (i + this.nStartingYear) - 1;
+    org.apache.myfaces.PopupCalendar.prototype._decYear = function () {
+        for (i = 0; i < 7; i++) {
+            var newYear = (i + this.nStartingYear) - 1;
 
-        this._createAndAddYear(newYear, i);
-    }
-    this.nStartingYear--;
-    this.bClickOnCalendar = true;
-};
-
-org_apache_myfaces_PopupCalendar.prototype._constructYear = function()
-{
-    this._popDownMonth();
-    var sHTML = "";
-    if (!this.yearConstructed)
-    {
+            this._createAndAddYear(newYear, i);
+        }
+        this.nStartingYear--;
+        this.bClickOnCalendar = true;
+    };
 
-        var selectYearTable = document.createElement("table");
-        Element.setStyle(selectYearTable, "width:44px;border-collapse:collapse;");
-        selectYearTable.className = this.initData.themePrefix + "-dropdown-style";
+    org.apache.myfaces.PopupCalendar.prototype._constructYear = function () {
+        this._popDownMonth();
+        var sHTML = "";
+        if (!this.yearConstructed) {
 
-        this._removeAllChildren(this.selectYearDiv);
+            var selectYearTable = document.createElement("table");
+            Element.setStyle(selectYearTable, "width:44px;border-collapse:collapse;");
+            selectYearTable.className = this.initData.themePrefix + "-dropdown-style";
 
-        this.selectYearDiv.appendChild(selectYearTable);
+            this._removeAllChildren(this.selectYearDiv);
 
-        Event.observe(selectYearTable, "mouseover", function()
-        {
-            clearTimeout(this.timeoutID2);
-        }.bind(this), false);
-        Event.observe(selectYearTable, "mouseout", function(event)
-        {
-            clearTimeout(this.timeoutID2);
-            this.timeoutID2 = setTimeout((function()
-            {
-                this._popDownYear()
-            }).bind(this), 100);
-            Event.stop(event);
-        }.bindAsEventListener(this), false);
+            this.selectYearDiv.appendChild(selectYearTable);
 
+            Event.observe(selectYearTable, "mouseover", function () {
+                clearTimeout(this.timeoutID2);
+            }.bind(this), false);
+            Event.observe(selectYearTable, "mouseout", function (event) {
+                clearTimeout(this.timeoutID2);
+                this.timeoutID2 = setTimeout((function () {
+                    this._popDownYear()
+                }).bind(this), 100);
+                Event.stop(event);
+            }.bindAsEventListener(this), false);
 
-        var selectYearTableBody = document.createElement("tbody");
-        selectYearTable.appendChild(selectYearTableBody);
+            var selectYearTableBody = document.createElement("tbody");
+            selectYearTable.appendChild(selectYearTableBody);
 
-        var selectYearRowMinus = document.createElement("tr");
-        selectYearTableBody.appendChild(selectYearRowMinus);
+            var selectYearRowMinus = document.createElement("tr");
+            selectYearTableBody.appendChild(selectYearRowMinus);
 
-        var selectYearCellMinus = document.createElement("td");
-        selectYearCellMinus.setAttribute("align", "center");
+            var selectYearCellMinus = document.createElement("td");
+            selectYearCellMinus.setAttribute("align", "center");
 
-        selectYearCellMinus.appendChild(document.createTextNode("-"));
+            selectYearCellMinus.appendChild(document.createTextNode("-"));
 
-        selectYearRowMinus.appendChild(selectYearCellMinus);
+            selectYearRowMinus.appendChild(selectYearCellMinus);
 
-        Event.observe(selectYearCellMinus, "mouseover", function(event)
-        {
-            Event.element(event).className = this.initData.themePrefix + "-dropdown-select-style";
-        }.bindAsEventListener(this), false);
+            Event.observe(selectYearCellMinus, "mouseover", function (event) {
+                Event.element(event).className = this.initData.themePrefix + "-dropdown-select-style";
+            }.bindAsEventListener(this), false);
 
-        Event.observe(selectYearCellMinus, "mouseout", function(event)
-        {
-            clearInterval(this.intervalID1);
-            Event.element(event).className = this.initData.themePrefix + "-dropdown-normal-style";
-        }.bindAsEventListener(this), false);
+            Event.observe(selectYearCellMinus, "mouseout", function (event) {
+                clearInterval(this.intervalID1);
+                Event.element(event).className = this.initData.themePrefix + "-dropdown-normal-style";
+            }.bindAsEventListener(this), false);
 
-        Event.observe(selectYearCellMinus, "mousedown", function(event)
-        {
-            clearInterval(this.intervalID1);
-            this.intervalID1 = setInterval((function()
-            {
-                this._decYear();
-            }).bind(this), 30);
-            Event.stop(event);
-        }.bindAsEventListener(this), false);
+            Event.observe(selectYearCellMinus, "mousedown", function (event) {
+                clearInterval(this.intervalID1);
+                this.intervalID1 = setInterval((function () {
+                    this._decYear();
+                }).bind(this), 30);
+                Event.stop(event);
+            }.bindAsEventListener(this), false);
 
-        Event.observe(selectYearCellMinus, "mouseup", function(event)
-        {
-            clearInterval(this.intervalID1);
-            Event.stop(event);
-        }.bindAsEventListener(this), false);
+            Event.observe(selectYearCellMinus, "mouseup", function (event) {
+                clearInterval(this.intervalID1);
+                Event.stop(event);
+            }.bindAsEventListener(this), false);
 
+            //sHTML = "<tr><td align='center' onmouseover='this.className=\""+this.initData.themePrefix+"-dropdown-select-style\"' onmouseout='clearInterval(this.intervalID1); this.className=\""+this.initData.themePrefix+"-dropdown-normal-style\"' onmousedown='clearInterval(this.intervalID1);this.intervalID1=setInterval(\"_decYear()\",30)' onmouseup='clearInterval(this.intervalID1)'>-</td></tr>";
 
-        //sHTML = "<tr><td align='center' onmouseover='this.className=\""+this.initData.themePrefix+"-dropdown-select-style\"' onmouseout='clearInterval(this.intervalID1); this.className=\""+this.initData.themePrefix+"-dropdown-normal-style\"' onmousedown='clearInterval(this.intervalID1);this.intervalID1=setInterval(\"_decYear()\",30)' onmouseup='clearInterval(this.intervalID1)'>-</td></tr>";
+            this.nStartingYear = this.selectedDate.year - 3;
+            var j = 0;
+            for (i = this.selectedDate.year - 3; i <= (this.selectedDate.year + 3); i++) {
+                var sName = i;
+
+                var sNameNode = null;
+
+                if (i == this.selectedDate.year) {
+                    sNameNode = document.createElement("span");
+                    Element.setStyle(sNameNode, "font-weight:bold;");
+                    sNameNode.appendChild(document.createTextNode(sName));
+                    sNameNode.setAttribute("userData", sName);
+                }
+                else {
+                    sNameNode = document.createTextNode(sName);
+                }
+
+                var yearRow = document.createElement("tr");
+                selectYearTableBody.appendChild(yearRow);
+
+                var yearCell = document.createElement("td");
+                yearCell.setAttribute("userData", sName);
+                yearCell.setAttribute("id", this.containerCtl.getAttribute("id") + "y" + j);
+                yearRow.appendChild(yearCell);
+
+                Event.observe(yearCell, "mouseover", function (event) {
+                    Event.element(event).className = this.initData.themePrefix + "-dropdown-select-style";
+                }.bind(this), false);
+
+                Event.observe(yearCell, "mouseout", function (event) {
+                    Event.element(event).className = this.initData.themePrefix + "-dropdown-normal-style";
+                }.bind(this), false);
+
+                Event.observe(yearCell, "click", function (event) {
+                    var elem = Event.element(event);
+                    var sYear = null;
+                    this.selectedDate.year = parseInt(this._formatInt(elem.getAttribute("userData"), 10));
+                    this.yearConstructed = false;
+                    this._popDownYear();
+                    this._constructCalendar();
+                    Event.stop(event);
+                }.bindAsEventListener(this), false);
 
-        this.nStartingYear = this.selectedDate.year - 3;
-        var j = 0;
-        for (i = this.selectedDate.year - 3; i <= (this.selectedDate.year + 3); i++)
-        {
-            var sName = i;
+                this._appendNbsp(yearCell);
+                yearCell.appendChild(sNameNode);
+                this._appendNbsp(yearCell);
+                j++;
+            }
 
-            var sNameNode = null;
+            var selectYearRowPlus = document.createElement("tr");
+            selectYearTableBody.appendChild(selectYearRowPlus);
 
-            if (i == this.selectedDate.year)
-            {
-                sNameNode = document.createElement("span");
-                Element.setStyle(sNameNode, "font-weight:bold;");
-                sNameNode.appendChild(document.createTextNode(sName));
-                sNameNode.setAttribute("userData", sName);
-            }
-            else
-            {
-                sNameNode = document.createTextNode(sName);
-            }
+            var selectYearCellPlus = document.createElement("td");
+            selectYearCellPlus.setAttribute("align", "center");
 
-            var yearRow = document.createElement("tr");
-            selectYearTableBody.appendChild(yearRow);
+            selectYearCellPlus.appendChild(document.createTextNode("+"));
 
-            var yearCell = document.createElement("td");
-            yearCell.setAttribute("userData",sName);
-            yearCell.setAttribute("id",this.containerCtl.getAttribute("id")+"y" + j);
-            yearRow.appendChild(yearCell);
+            selectYearRowPlus.appendChild(selectYearCellPlus);
 
-            Event.observe(yearCell, "mouseover", function(event)
-            {
+            Event.observe(selectYearCellPlus, "mouseover", function (event) {
                 Event.element(event).className = this.initData.themePrefix + "-dropdown-select-style";
-            }.bind(this), false);
+            }.bindAsEventListener(this), false);
 
-            Event.observe(yearCell, "mouseout", function(event)
-            {
+            Event.observe(selectYearCellPlus, "mouseout", function (event) {
+                clearInterval(this.intervalID2);
                 Event.element(event).className = this.initData.themePrefix + "-dropdown-normal-style";
-            }.bind(this), false);
+            }.bindAsEventListener(this), false);
 
-            Event.observe(yearCell, "click", function(event)
-            {
-                var elem = Event.element(event);
-                var sYear = null;
-                this.selectedDate.year = parseInt(this._formatInt(elem.getAttribute("userData"),10));
-                this.yearConstructed = false;
-                this._popDownYear();
-                this._constructCalendar();
-                Event.stop(event);
+            Event.observe(selectYearCellPlus, "mousedown", function (event) {
+                clearInterval(this.intervalID2);
+                this.intervalID2 = setInterval((function () {
+                    this._incYear();
+                }).bind(this), 30);
             }.bindAsEventListener(this), false);
 
-            this._appendNbsp(yearCell);
-            yearCell.appendChild(sNameNode);
-            this._appendNbsp(yearCell);
-            j++;
+            Event.observe(selectYearCellPlus, "mouseup", function (event) {
+                clearInterval(this.intervalID2);
+            }.bindAsEventListener(this), false);
+
+            this.yearConstructed = true;
         }
+    };
 
-        var selectYearRowPlus = document.createElement("tr");
-        selectYearTableBody.appendChild(selectYearRowPlus);
+    org.apache.myfaces.PopupCalendar.prototype._popDownYear = function () {
+        clearInterval(this.intervalID1);
+        clearTimeout(this.timeoutID1);
+        clearInterval(this.intervalID2);
+        clearTimeout(this.timeoutID2);
+        this.selectYearDiv.style.visibility = "hidden";
+        this._hidePopupPostProcess(this.selectYearDiv);
+    };
 
-        var selectYearCellPlus = document.createElement("td");
-        selectYearCellPlus.setAttribute("align", "center");
+    org.apache.myfaces.PopupCalendar.prototype._popUpYear = function () {
+        var leftOffset;
+        this._fixPopupDomOrder(this.selectYearDiv);
+        this._constructYear();
+        this.selectYearDiv.style.visibility = (this.dom || this.ie6) ? "visible" : "show";
+        leftOffset = parseInt(this._formatInt(this.calendarDiv.style.left), 10) + this.yearSpan.offsetLeft;
+        if (this.ie6)
+            leftOffset += 6;
+        this.selectYearDiv.style.left = leftOffset + "px";
+        this.selectYearDiv.style.top = parseInt(this._formatInt(this.calendarDiv.style.top), 10) + 26 + "px";
 
-        selectYearCellPlus.appendChild(document.createTextNode("+"));
+        this._showPopupPostProcess(this.selectYearDiv);
+    };
 
-        selectYearRowPlus.appendChild(selectYearCellPlus);
+    org.apache.myfaces.PopupCalendar.prototype._appendCell = function (parentElement, value) {
+        var cell = document.createElement("td");
+        Element.setStyle(cell, "text-align:right;");
 
-        Event.observe(selectYearCellPlus, "mouseover", function(event)
-        {
-            Event.element(event).className = this.initData.themePrefix + "-dropdown-select-style";
-        }.bindAsEventListener(this), false);
+        if (value && value != "") {
+            cell.appendChild(document.createTextNode(value));
+        }
+        else {
+            this._appendNbsp(cell);
+        }
 
-        Event.observe(selectYearCellPlus, "mouseout", function(event)
-        {
-            clearInterval(this.intervalID2);
-            Event.element(event).className = this.initData.themePrefix + "-dropdown-normal-style";
-        }.bindAsEventListener(this), false);
+        parentElement.appendChild(cell);
+    };
 
-        Event.observe(selectYearCellPlus, "mousedown", function(event)
-        {
-            clearInterval(this.intervalID2);
-            this.intervalID2 = setInterval((function()
-            {
-                this._incYear();
-            }).bind(this), 30);
-        }.bindAsEventListener(this), false);
+    org.apache.myfaces.PopupCalendar.prototype._getDateStyle = function (datePointer) {
+        var sStyle = this.initData.themePrefix + "-normal-day-style";
+        //regular day
 
-        Event.observe(selectYearCellPlus, "mouseup", function(event)
+        if ((datePointer == this.dateNow) &&
+                (this.selectedDate.month == this.monthNow) && (this.selectedDate.year == this.yearNow)) //today
         {
-            clearInterval(this.intervalID2);
-        }.bindAsEventListener(this), false);
+            sStyle = this.initData.themePrefix + "-current-day-style";
+        }
+        else if (this.dayPointer % 7 == (this.initData.startAt * -1) + 1) //end-of-the-week day
+        {
+            sStyle = this.initData.themePrefix + "-end-of-weekday-style";
+        }
 
-        this.yearConstructed = true;
-    }
-};
-
-org_apache_myfaces_PopupCalendar.prototype._popDownYear = function()
-{
-    clearInterval(this.intervalID1);
-    clearTimeout(this.timeoutID1);
-    clearInterval(this.intervalID2);
-    clearTimeout(this.timeoutID2);
-    this.selectYearDiv.style.visibility = "hidden";
-    this._hidePopupPostProcess(this.selectYearDiv);
-};
-
-org_apache_myfaces_PopupCalendar.prototype._popUpYear = function()
-{
-    var leftOffset;
-	this._fixPopupDomOrder(this.selectYearDiv);
-    this._constructYear();
-    this.selectYearDiv.style.visibility = (this.dom || this.ie6) ? "visible" : "show";
-    leftOffset = parseInt(this._formatInt(this.calendarDiv.style.left), 10) + this.yearSpan.offsetLeft;
-    if (this.ie6)
-        leftOffset += 6;
-    this.selectYearDiv.style.left = leftOffset + "px";
-    this.selectYearDiv.style.top = parseInt(this._formatInt(this.calendarDiv.style.top), 10) + 26 + "px";
-
-    this._showPopupPostProcess(this.selectYearDiv);
-};
-
-org_apache_myfaces_PopupCalendar.prototype._appendCell = function(parentElement, value)
-{
-    var cell = document.createElement("td");
-    Element.setStyle(cell, "text-align:right;");
+        //selected day
+        if ((datePointer == this.saveSelectedDate.date) &&
+                (this.selectedDate.month == this.saveSelectedDate.month) &&
+                (this.selectedDate.year == this.saveSelectedDate.year)) {
+            sStyle += " " + this.initData.themePrefix + "-selected-day-style";
+        }
 
-    if (value && value != "")
-    {
-        cell.appendChild(document.createTextNode(value));
-    }
-    else
-    {
-        this._appendNbsp(cell);
-    }
+        for (k = 0; k < this.holidaysCounter; k++) {
+            if ((parseInt(this._formatInt(this.holidays[k].d), 10) == datePointer) && (parseInt(this._formatInt(this.holidays[k].m), 10) == (this.selectedDate.month + 1))) {
+                if ((parseInt(this._formatInt(this.holidays[k].y), 10) == 0) || ((parseInt(this._formatInt(this.holidays[k].y), 10) == this.selectedDate.year) && (parseInt(this._formatInt(this.holidays[k].y), 10) != 0))) {
+                    sStyle += " " + this.initData.themePrefix + "-holiday-style";
+                }
+            }
+        }
 
-    parentElement.appendChild(cell);
-};
+        return sStyle;
+    };
 
-org_apache_myfaces_PopupCalendar.prototype._getDateStyle = function(datePointer)
-{
-    var sStyle = this.initData.themePrefix + "-normal-day-style";
-    //regular day
+    org.apache.myfaces.PopupCalendar.prototype._getHolidayHint = function (datePointer) {
+        var sHint = "";
+        for (k = 0; k < this.holidaysCounter; k++) {
+            if ((parseInt(this._formatInt(this.holidays[k].d), 10) == datePointer) && (parseInt(this._formatInt(this.holidays[k].m), 10) == (this.selectedDate.month + 1))) {
+                if ((parseInt(this._formatInt(this.holidays[k].y), 10) == 0) || ((parseInt(this._formatInt(this.holidays[k].y), 10) == this.selectedDate.year) && (parseInt(this._formatInt(this.holidays[k].y), 10) != 0))) {
+                    sHint += sHint == "" ? this.holidays[k].desc : "\n" + this.holidays[k].desc;
+                }
+            }
+        }
 
-    if ((datePointer == this.dateNow) &&
-        (this.selectedDate.month == this.monthNow) && (this.selectedDate.year == this.yearNow)) //today
-    {
-        sStyle = this.initData.themePrefix + "-current-day-style";
-    }
-    else if (dayPointer % 7 == (this.initData.startAt * -1) + 1) //end-of-the-week day
-    {
-        sStyle = this.initData.themePrefix + "-end-of-weekday-style";
-    }
+        return sHint;
+    };
 
-    //selected day
-    if ((datePointer == this.saveSelectedDate.date) &&
-        (this.selectedDate.month == this.saveSelectedDate.month) &&
-        (this.selectedDate.year == this.saveSelectedDate.year))
-    {
-        sStyle += " " + this.initData.themePrefix + "-selected-day-style";
-    }
+    org.apache.myfaces.PopupCalendar.prototype._addWeekCell = function (currentRow, startDate, weekSelectable, sNormalStyle, sSelectStyle) {
+        var cell = document.createElement("td");
+        Element.setStyle(cell, "text-align:right;");
+
+        var weekDate = this.stdDateFormatter.getWeekDate(startDate);
+        if (weekSelectable) {
+            var link = document.createElement("a");
+            link.className = sNormalStyle;
+            link.sNormalStyle = sNormalStyle;
+            link.sSelectStyle = sSelectStyle;
+            link.setAttribute("href", "#");
+            link.appendChild(document.createTextNode(weekDate.week + " "));
+
+            link.dateObj = this.stdDateFormatter.getDateForWeekDate(weekDate);
+
+            cell.appendChild(link);
+
+            Event.observe(link, "mousemove", function (event) {
+                window.status = this.initData.selectDateMessage.replace(
+                        "[date]",
+                        this._constructDate(link.dateObj));
+            }.bindAsEventListener(this), false);
 
-    for (k = 0; k < this.holidaysCounter; k++)
-    {
-        if ((parseInt(this._formatInt(this.holidays[k].d), 10) == datePointer) && (parseInt(this._formatInt(this.holidays[k].m), 10) == (this.selectedDate.month + 1)))
-        {
-            if ((parseInt(this._formatInt(this.holidays[k].y), 10) == 0) || ((parseInt(this._formatInt(this.holidays[k].y), 10) == this.selectedDate.year) && (parseInt(this._formatInt(this.holidays[k].y), 10) != 0)))
-            {
-                sStyle += " " + this.initData.themePrefix + "-holiday-style";
-            }
-        }
-    }
+            Event.observe(link, "mouseout", function (event) {
+                var elem = Event.element(event);
+                elem.className = elem.sNormalStyle;
+                window.status = "";
+            }.bindAsEventListener(this), false);
 
-    return sStyle;
-};
+            Event.observe(link, "click", function (event) {
+                var elem = Event.element(event);
+                this.selectedDate.year = elem.dateObj.getFullYear();
+                this.selectedDate.month = elem.dateObj.getMonth();
+                this.selectedDate.date = elem.dateObj.getDate();
+                this._closeCalendar();
+                Event.stop(event);
+            }.bindAsEventListener(this), false);
 
-org_apache_myfaces_PopupCalendar.prototype._getHolidayHint = function(datePointer)
-{
-    var sHint = "";
-    for (k = 0; k < this.holidaysCounter; k++)
-    {
-        if ((parseInt(this._formatInt(this.holidays[k].d), 10) == datePointer) && (parseInt(this._formatInt(this.holidays[k].m), 10) == (this.selectedDate.month + 1)))
-        {
-            if ((parseInt(this._formatInt(this.holidays[k].y), 10) == 0) || ((parseInt(this._formatInt(this.holidays[k].y), 10) == this.selectedDate.year) && (parseInt(this._formatInt(this.holidays[k].y), 10) != 0)))
-            {
-                sHint += sHint == ""?this.holidays[k].desc:"\n" + this.holidays[k].desc;
-            }
+            Event.observe(link, "mouseover", function (event) {
+                var elem = Event.element(event);
+                elem.className = elem.sSelectStyle;
+            }.bindAsEventListener(this), false);
+        }
+        else {
+            var span = document.createElement("span");
+            span.className = sNormalStyle;
+            span.appendChild(document.createTextNode(weekDate.week + " "));
+            cell.appendChild(span);
         }
-    }
 
-    return sHint;
-};
+        currentRow.appendChild(cell);
+    };
 
+    org.apache.myfaces.PopupCalendar.prototype._constructCalendar = function () {
+        var aNumDays = Array(31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
 
-org_apache_myfaces_PopupCalendar.prototype._addWeekCell = function(currentRow, startDate, weekSelectable,
-    sNormalStyle, sSelectStyle)
-{
-    var cell = document.createElement("td");
-    Element.setStyle(cell, "text-align:right;");

[... 933 lines stripped ...]