The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
--- calendar.js.orig	2007-12-18 15:42:56.000000000 -0500
+++ calendar.js	2008-01-19 17:38:05.000000000 -0500
@@ -1,4 +1,8 @@
 /*
+    This file has been PATCHED by trs to allow selecting of out of month dates.
+    Please do not update it without also applying the patch (oom_select.patch).
+*/
+/*
 Copyright (c) 2007, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
@@ -1166,6 +1170,7 @@
 	SHOW_WEEK_HEADER : {key:"show_week_header", value:false},
 	SHOW_WEEK_FOOTER : {key:"show_week_footer", value:false},
 	HIDE_BLANK_WEEKS : {key:"hide_blank_weeks", value:false},
+	OUT_OF_MONTH_SELECT : {key:"out_of_month_select", value:false},
 	NAV_ARROW_LEFT: {key:"nav_arrow_left", value:null} ,
 	NAV_ARROW_RIGHT : {key:"nav_arrow_right", value:null} ,
 	MONTHS_SHORT : {key:"months_short", value:["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]},
@@ -1953,6 +1958,14 @@
 		*/	
 		this.cfg.addProperty(defCfg.HIDE_BLANK_WEEKS.key, { value:defCfg.HIDE_BLANK_WEEKS.value, handler:this.configOptions, validator:this.cfg.checkBoolean } );
 		
+        /**
+        * True if the Calendar should allow out of month selections. false by default.
+        * @config OUT_OF_MONTH_SELECT
+        * @type Boolean
+        * @default false
+        */
+        this.cfg.addProperty(defCfg.OUT_OF_MONTH_SELECT.key, { value:defCfg.OUT_OF_MONTH_SELECT.value, handler:this.configOptions, validator:this.cfg.checkBoolean } );
+
 		/**
 		* The image that should be used for the left navigation arrow.
 		* @config NAV_ARROW_LEFT
@@ -2762,6 +2775,8 @@
 		var mindate = this.cfg.getProperty(defCfg.MINDATE.key);
 		var maxdate = this.cfg.getProperty(defCfg.MAXDATE.key);
 	
+        var outOfMonthSelect = this.cfg.getProperty(defCfg.OUT_OF_MONTH_SELECT.key);
+
 		if (mindate) {
 			mindate = YAHOO.widget.DateMath.clearTime(mindate);
 		}
@@ -2785,7 +2800,7 @@
 			weekClass = weekPrefix + weekNum;
 	
 			// Local OOM check for performance, since we already have pagedate
-			if (r !== 0 && hideBlankWeeks === true && workingDate.getMonth() != useDate.getMonth()) {
+			if (r !== 0 && hideBlankWeeks === true && workingDate.getMonth() != useDate.getMonth() && !outOfMonthSelect) {
 				break;
 			} else {
 	
@@ -2812,7 +2827,11 @@
 					
 					// Local OOM check for performance, since we already have pagedate
 					if (workingDate.getMonth() != useDate.getMonth()) {
-						cellRenderers[cellRenderers.length]=cal.renderCellNotThisMonth;
+                        if (outOfMonthSelect) {
+                            cellRenderers[cellRenderers.length]=cal.renderCellStyleNotThisMonth;
+                        } else {
+                            cellRenderers[cellRenderers.length]=cal.renderCellNotThisMonth;
+                        }
 					} else {
 						YAHOO.util.Dom.addClass(cell, workingDayPrefix + workingDate.getDay());
 						YAHOO.util.Dom.addClass(cell, dayPrefix + workingDate.getDate());
@@ -3257,6 +3276,16 @@
 		YAHOO.util.Dom.addClass(cell, this.Style.CSS_CELL_TODAY);
 	},
 	
+    /**
+    * Styles an out of month cell.
+    * @method renderCellStyleNotThisMonth
+    * @param {Date}					workingDate		The current working Date object being used to generate the calendar
+    * @param {HTMLTableCellElement}	cell			The current working cell in the calendar
+    */
+    renderCellStyleNotThisMonth : function(workingDate, cell) {
+        YAHOO.util.Dom.addClass(cell, this.Style.CSS_CELL_OOM);
+    },
+
 	/**
 	* Applies the default style used for rendering selected dates to the current calendar cell
 	* @method renderCellStyleSelected
@@ -4473,6 +4502,14 @@
 		*/		
 		this.cfg.addProperty(defCfg.HIDE_BLANK_WEEKS.key,{ value:defCfg.HIDE_BLANK_WEEKS.value, handler:this.delegateConfig, validator:this.cfg.checkBoolean } );
 		
+        /**
+        * True if the Calendar should allow out of month selections. false by default.
+        * @config OUT_OF_MONTH_SELECT
+        * @type Boolean
+        * @default false
+        */
+        this.cfg.addProperty(defCfg.OUT_OF_MONTH_SELECT.key,{ value:defCfg.OUT_OF_MONTH_SELECT.value, handler:this.delegateConfig, validator:this.cfg.checkBoolean } );
+
 		/**
 		* The image that should be used for the left navigation arrow.
 		* @config NAV_ARROW_LEFT
@@ -5474,6 +5511,7 @@
 																 "renderCellStyleToday",
 																 "renderCellStyleSelected",
 																 "renderCellNotThisMonth",
+																 "renderCellStyleNotThisMonth",
 																 "renderBodyCellRestricted",
 																 "initStyles",
 																 "configTitle",