Calendar Release Notes

*** 2.9.0 ***

+ Fixed renderStack application when multiple renderers applied to
  the same date.

+ Removed Opera Width Fix. No longer required. Opera handles floats 
  correclty

+ Allow calendar to be rendered into a (iframe) document, different
  from the instance. 

+ Added OOM selection support, driven by the "oom_select" config 
  property. When oom_select is enabled, OOM dates will also accept
  custom renderers.

  Based on patches provided by Joshua Flynn (flynnjandm) and 
  Pranav (unohoo) in tickets #1755642, #2528933

+ APIDocs updated to identify string parameters and 
  properties, which get added to the DOM as HTML.

  These string values should be escaped by the implementor, 
  if they come from an untrusted external source.

*** version 2.8.2 ***

+ No changes

*** version 2.8.1 ***

+ No changes

*** version 2.8.0 ***

+ DateMath extracted to standalone module. However, it continues to
  be included in the calendar module, so no change is required to
  existing pages which use calendar.

+ Made default configuration property values (DEFAULT_CONFIG) public.

+ Made default class names (STYLES) used for CSS classes, public.

+ Changed the few remaining hardcoded CSS class names to use default
  STYLES configuration.

+ The cells property is now populated by searching for tds by class 
  name ("calcell") under the calendar's table element, as opposed to 
  blindly picking up all td elements under the div container.

  This fixes incorrect selection state related bugs in custom calendars,
  where the customization introduces additional tables to the default 
  calendar markup.

+ Added prevDate and newDate arguments to the changePage event. These
  are accessible through the arguments array (as with all custom events
  created using the default LIST signature):

  e.g:

  changePageEvent.subscribe(function(type, args) {

    var prevDate = args[0];
    var newDate = args[1];

    if (YAHOO.widget.DateMath.before(newDate, prevDate) {
       // Moving back in time 
    } else {
       // Moving forward in time
    }

  });

+ Added "year_offset" configuration property.

  This can be used for locales which follow the Gregorian calendar, 
  but have the year offset by a fixed amount. For example the Thai 
  (th_TH) calendar, for which the year is a positive 543 year offset 
  from the Gregorian calendar. 
  
  The offset is applied to any output year strings, such as the year 
  label, or the year CSS marker class and to any input strings, such as
  date selection strings or the pageDate value string.  

  NOTE: Any JavaScript Date objects which Calendar accepts as input, 
  should reflect the Gregorian calendar state (that is, the year should be 
  set to the Gregorian year), in order to maintain consistent state for other 
  fields such as weekday, month and date. Similarly, any JavaScript Date 
  objects returned by the Calendar, will be set to the Gregorian year.
  
+ Added "today" configuration property, allowing the user to configure the 
  date which represents "today" in the Calendar.

*** version 2.7.0 ***

+ Fixed CalendarGroup page construction, so that the intial pagedate for 
  each Calendar page instance is set in it's constructor, as opposed to
  setting it in 2 passes, as was done before (setting all the pages to the
  same pagedate during construction, and then incrementing them to the 
  correct pagedate for page). This fixes a bug in reset(), where all the 
  Calendar pages were being reset to the same month.
  
+ Fixed the argument for the delectEvent fired from deselectCell 
  to be an array of date fields arrays (e.g. [[2009, 1, 21]]) as opposed to
  just a date field array (e.g. [2009, 1, 21]), so that the argument 
  structure is consistent for both select and deselect events, regardless
  of where they are fired from, and whether they have one or more date 
  field arrays.
  
*** version 2.6.0 ***

+ Fixed incorrect cell index parsing from cell id attribute, when
  Calendar id contained "cell".
  
+ Added text to previous month, next month and close icons, to 
  enhance accessibility for screen-readers.
  
+ Fixed issue with bubbled previous month, next month click events 
  missing target information in certain browsers (due to replaced HTML), 
  by delaying click event handling through a setTimeout.
  
+ Added destroy method to Calendar/CalendarGroup

+ Fixed incorrect clear method behavior for CalendarGroup where all
  pages would be set to the same month.
  
+ Refactored code to reduce minified Kweight.

*** version 2.5.2 ***

+ CalendarGroup toDate method no longer throws javascript exception

*** version 2.5.1 *** 

+ Fixed bug with mindate, maxdate being applied incorrectly if 
  set to a day on which time change took place (DST, E.U Summertime) 
  and the day is not the first day of the week.

+ Fixed DateMath.getWeekNumber implementation to return correct 
  week numbers. The older implementation would return Week 0 for 
  certain weeks (e.g. the week starting Sun Dec 28th 2008)

  To suppor the fix, DateMath.getWeekNumber has a signature 
  change in 2.5.1 and can now support U.S Week calculations based 
  on Jan 1st identifying the first week of the year, as well as 
  ISO8601 week calculations based on Jan 4th identifying the first 
  week of the year

  The arguments which the method expected prior to 2.5.1 were not 
  being used in calculating the week number. The new signature is:

  DateMath.getWeekNumber(Date dt, Number firstDayOfWeek, Number janDate)

  Where:

    dt is the date for which week number is required

    firstDayOfWeek is the day index identifying the first 
    day of the week. Default is 0 (Sunday).

    janDate is the date in the first week of January, which
    identifies the first week of the year.
 
    Default is YAHOO.widget.DateMath.WEEK_ONE_JAN_DATE (1)

  NOTE: Calendar instances themselves do not currently expose a 
  configuration property to change the week numbering system 
  used. A "janDate" value is not passed to the getWeekNumber 
  method, when used by Calendar, resulting in it using the default value.

  Therefore, ISO8601 week numbering can be generated for Calendars 
  by setting the value of YAHOO.widget.DateMath.WEEK_ONE_JAN_DATE
  to 4.

*** version 2.5.0 *** 

+ Prevent default event handling in CalendarNavigator enter key 
  listener, to prevent automatic form submission when using Calendar
  inside a form.

+ Added workaround to DateMath.add and subtract for Safari 2 (webkit) 
  bug in Date.setDate(n) which doesn't handle value of n less than -128 
  or greater than 127 correctly.

  See: http://brianary.blogspot.com/2006/03/safari-date-bug.html

+ Added border, padding and margin rules to Calendar Sam Skin to 
  protect Sam Skin's look and feel when Calendar is used with 
  YUI base.css

*** version 2.4.0 *** 

+ Added CalendarNavigator (year selector) feature to allow the user to 
  jump to a year/month directly without having to scroll through months
  sequentially. 

  The feature is enabled/configured using the "navigator" configuration
  property.

+ Added Custom Events: 

    showNav/beforeShowNav
    hideNav/beforeHideNav, 
    renderNav/beforeRenderNav 

  To Calendar/CalendarGroup, in support of the CalendarNavigator 
  functionality. 

+ Added Custom Events:

    show/beforeShow
    hide/beforeHide 

  To Calendar and CalendarGroup. Returning false from a 
  beforeShow/beforeHide listener can be used to prevent the Calendar 
  from being shown/hidden respectively. 

+ Added Public Methods: 

    getCellIndex(date)    [ Calendar ]
    getCalendarPage(date) [ CalendarGroup ]
    toDate(dateArray)     [ Calendar/CalendarGroup ]
    removeRenderers()     [ Calendar/CalendarGroup ]
    
+ The Calendar/CalendarGroup constructor is now more flexible: 

    * It no longer requires an "id" argument. 

      In it's simplest form, a Calendar/CalendarGroup can be 
      constructed by simply providing a container id or reference.

          var cal = new YAHOO.widget.Calendar("container"); 
          -or-
          var containerDiv = YAHOO.util.Dom.get("container");
          var cal = new YAHOO.widget.Calendar(containerDiv); 

      An id for the Calendar does not need to be provided, and will be 
      generated from the container id by appending an "_t" suffix to the
      container id if only the container is provided. 

    * The container argument can be either a string, representing the 
      id of the container, or an HTMLElement referring to the container 
      element itself, as suggested in the example above. 

    * If an HTMLElement is provided for the container argument and the 
      element does not have an id, one will be generated for it using 
      YAHOO.util.Dom.generateId(). 

    * The older form of Calendar/CalendarGroup signature, expecting 
      both an id and containerId is still supported and works as it did 
      prior to 2.4.0. 

+ Fixed performance issue, where the same custom renderer was being 
  applied multiple times to the same cell.

+ Added getDate(year, month, date) factory method to the DateMath utility, 
  which can be used to create JavaScript Date instances for years less 
  than 100.

  The default Date(year, month, date) constructor implementations across 
  browsers, assume that if year < 100, the caller is referring to the 
  nineteen hundreds, and the year is set to 19xx instead of xx (as with
  the deprecated setYear method). However Date.setFullYear(xx) can 
  be used to set dates below 100. The above factory method provides a 
  construction mechanism consistent with setFullYear.

+ Changed Calendar/CalendarGroup/DateMath code to use the DateMath.getDate
  method, so that 2 digit years are  not assumed to be in the 1900's. 

  NOTE: Calendar's API already expects 4 digit date strings when referring 
  to years after 999.

*** version 2.3.1 *** 

+ Changed Calendar/CalendarGroup to render an empty title bar element 
  when "close" is set to true, but "title" has not been set, to allow Sam 
  Skin to render a title bar correctly. 

*** version 2.3.0 *** 

+ Added checks to select, selectCell, deselect and deselectCell methods 
  to ensure the Calendar/Calendar group was not set to an invalid state 
  by programmatically selecting unselectable dates or cells.
  
+ Added new locale configuration properties for the Month/Year label 
  used in the Calendar header (MY_LABEL_MONTH_POSITION, 
  MY_LABEL_YEAR_POSITION, MY_LABEL_YEAR_SUFFIX, MY_LABEL_MONTH_SUFFIX). 
  Japan is an example locale, where customization of the Month/Year 
  label is required.
  
+ Changed "first", "last" class names to "first-of-type", "last-of-type", 
  to avoid collision with YUI Grids' use of the "first" class name.
  
+ Added public isDateOOB method, to check if a given date is outside of 
  the minimum/maximum configuration dates of the Calendar.
  
+ Deprecated YAHOO.widget.Calendar.browser, refactored to use 
  YAHOO.env.ua instead. 
  
+ Removed overflow:hidden from default Calendar/CalendarGroup container 
  for non-IE6 browsers to fix clipping issue with IE7 when CalendarGroup 
  was inside a box with a specific width. overflow:hidden is still 
  required for IE6 with an iframe shim.

+ Added Opera container width calculation fix to CalendarGroup.show 
  method, to fix incorrect wrapping when using a CalendarGroup which is 
  initially rendered hidden (display:none). Previously this fix was 
  only applied on render. 

*** version 2.2.2 *** 

+ Fixed problem with selected dates being shared across instances, when 
  more than one Calendar/CalendarGroup was on the page 

*** version 2.2.1 *** 

+ Fixed problem with selectCell adding duplicate selected date entries 
  for dates which were already selected

+ Fixed problem with CalendarGroup iframe shim not covering the 
  CalendarGroup title area
  
+ Removed javascript:void(null) from close button and cell links which 
  was interrupting form submission and firing onbeforeunload in IE
  
+ Fixed problem with CalendarGroup getSelectedDates returning invalid 
  results, when used in conjunction with the "selected" Config property 
  (either passed in the constructor config argument or set seperately 
  after construction)
  
+ Refactored Calendar and CalendarGroup to improve performance, 
  especially when working with a large number of instances in 
  IE6 

*** version 2.2.0 *** 

+ Image customization can now be done through CSS. Images for Close, 
  Left and Right Arrows are now pulled in using CSS defined in 
  calendar.css and by default use relative paths to the images in 
  the same directory as calendar.css.
  
+ Deprecated Calendar.IMG_ROOT and NAV_ARROW_LEFT, NAV_ARROW_RIGHT 
  configuration properties. Customizations based on older releases 
  which set these properties will still function as expected.

+ Deprecated CalendarGroup.CSS_2UPCLOSE. Calendar's Style.CSS_CLOSE 
  property now represents the new default CSS class (calclose) for 
  the close button. CSS_2UPCLOSE is still applied along with 
  CSS_CLOSE to the new markup for the close button to support existing
  customizations of the CSS_2UPCLOSE CSS class (close-icon)

+ Fixed problem with Safari setting Calendar pages to incorrect dates 
  if the pages spanned a year boundary in CalendarGroups with 3 or more 
  pages, due to a bug in Safari's implementation of Date setMonth

+ Fixed problem with CalendarGroup setMonth rendering Calendar pages 
  with incorrect dates in all browsers if current pages spanned year 
  boundary 

+ Fixed incorrect CalendarGroup logging statement in calendar-debug.js

+ Fixed domEventMap support for Safari versions prior to 2.0.2, 
  caused by hasOwnProperty not being supported
  
+ Removed unused private property : _pageDate from Calendar class 

*** version 0.12.2 *** 

+ Corrected documentation for clearTime function to reflect the 
  change from midnight to noon 

*** version 0.12.1 *** 

+ Calendar and CalendarGroup now automatically parse the argument 
  passed to setMonth and setYear into an integer, eliminating 
  potential concatenation bugs. 

*** version 0.12 *** 

+ New documentation format implemented

+ Calendar2up and Calendar_Core are now deprecated. Now, Calendar alone
  represents the single Calendar instance, and CalendarGroup represents 
  an n-up instance, defaulting to 2up
  
+ Added semantic style classes to Calendar elements to allow for 
  custom styling solely using CSS.
  
+ Remapped all configuration properties to use the Config object 
 (familiar to those who use the Container collection of controls). 
 Property names are the same as their previous counterparts, but 
 wrapped into Calendar.cfg, allowing for runtime reconfiguration of 
 most properties
 
+ Added "title" property for setting the Calendar title

+ Added "close" property for enabling and disabling the close icon

+ Added "iframe" property for enabling an iframe shim in Internet 
  Explorer 6 and below to fix the select bleed-through bug
  
+ pageDate moved to property: "pagedate"

+ selectedDates moved to property: "selected"

+ minDate moved to property : "mindate", which accepts a JavaScript 
  Date object like its predecessor, but also supports string dates
  
+ maxDate moved to property : "maxdate", which accepts a JavaScript 
  Date object like its predecessor, but also supports string dates
  
+ Moved style declarations to initStyles function

+ Optimized event handling in doSelectCell/doCellMouseOver/
  doCellMouseOut by only attaching the listener to the outer 
  Calendar container, and only reacting to events on cells with 
  the "selectable" CSS class.
  
+ Added domEventMap field for applying DOM event listeners to cells 
  containing specific class and tag combinations.
  
+ Moved all cell DOM event attachment to applyListeners function

+ Added getDateByCellId / getDateFieldsByCellId helper functions

+ Corrected DateMath.getWeekNumber to comply with ISO week number 
  handling
  
+ Separated renderCellDefault style portions into styleCellDefault 
  function for easy extension
  
+ Deprecated onBeforeSelect. Created beforeSelectEvent which 
  automatically subscribes to its deprecated predecessor.
  
+ Deprecated onSelect. Created selectEvent, which automatically 
  subscribes to its deprecated predecessor.
  
+ Deprecated onBeforeDeselect. Created beforeSelectEvent which 
  automatically subscribes to its deprecated predecessor.
  
+ Deprecated onDeselect. Created beforeDeselectEvent, which 
  automatically subscribes to its deprecated predecessor.
  
+ Deprecated onChangePage. Created changePageEvent, which automatically
  subscribes to its deprecated predecessor.
  
+ Deprecated onRender. Created renderEvent, which automatically 
  subscribes to its deprecated predecessor.
  
+ Deprecated onReset. Created resetEvent, which automatically 
  subscribes to its deprecated predecessor.
  
+ Deprecated onClear. Created clearEvent, which automatically 
  subscribes to its deprecated predecessor.
  
+ Corrected setMonth documentation to refer to 0-11 indexed months.

+ Added show and hide methods to Calendar for setting the Calendar's 
  display property.
  
+ Optimized internal render classes to use innerHTML and string buffers
 
+ Removed wireCustomEvents function

+ Removed wireDefaultEvents function 

+ Removed doNextMonth / doPreviousMonth

+ Removed all buildShell (header, body, footer) functions, since 
  the Calendar shell is now built dynamically on each render
  
+ Wired all CalendarGroup events and configuration properties to 
  be properly delegated to Calendar
  
+ Augmented CalendarGroup with all built-in renderers, label functions, 
  hide, show, and initStyles, creating API transparency between Calendar 
  and CalendarGroup.
  
+ Made all tagName, createElement, and entity references XHTML compliant

+ Fixed Daylight Saving Time bug for Brazilian time zone 

*** version 0.11.3 *** 

+ Calendar_Core: Added arguments for selected/deselected dates to 
  onSelect/onDeselect
  
+ CalendarGroup: Fixed bug where selected dates passed to constructor 
  were not represented in selectedDates
  
+ Calendar2up: Now displays correctly in Opera 9 

*** version 0.11.0 *** 

+ DateMath: DateMath.add now properly adds weeks

+ DateMath: between() function added

+ DateMath: getWeekNumber() fixed to take starting day of week into
  account
  
+ All references to Calendar's built in CSS class handlers are 
  removed, replaced with calls to Dom utility (addClass, removeClass)
  
+ Several CSS class constants now have clearer names

+ All CSS classes are now properly namespaced to avoid CSS conflicts

+ Fixed table:hover bug in CSS

+ Calendar no longer requires the container ID and variable name to 
  match in order for month navigation to function properly

+ Calendar month navigation arrows are now represented as 
  background images 

*** version 0.10.0 *** 

+ Major performance improvements from attaching DOM events to 
  associated table cells only once, when the Calendar shell is built
  
+ DOM events for mouseover/mouseout are now fired for all browsers 
 (not just Internet Explorer)
 
+ Reset functionality bug fixed for 2-up Calendar view 

*** version 0.9.0 *** 

* Initial release
