/* jQuery UI Date Picker v3.3 - compatibility with jQuery Calendar v2.7 Written by Marc Grabanski (m@marcgrabanski.com) and Keith Wood (kbwood@iprimus.com.au). Copyright (c) 2007 Marc Grabanski (http://marcgrabanski.com/code/jquery-calendar) Dual licensed under the GPL (http://www.gnu.org/licenses/gpl-3.0.txt) and CC (http://creativecommons.org/licenses/by/3.0/) licenses. "Share or Remix it but please Attribute the authors." Date: 09-03-2007 */ (function($) { // hide the namespace function PopUpCal() { this.regional = $.datepicker.regional; } $.extend(PopUpCal.prototype, { /* Override the default settings for all instances of the calendar. @param settings object - the new settings to use as defaults (anonymous object) @return void */ setDefaults: function(settings) { $.datepicker.setDefaults(convertSettings(settings)); }, /* Pop-up the calendar in a "dialog" box. @param dateText string - the initial date to display (in the current format) @param onSelect function - the function(dateText) to call when a date is selected @param settings object - update the dialog calendar instance's settings (anonymous object) @param pos int[2] - coordinates for the dialog's position within the screen leave empty for default (screen centre) @return void */ dialogCalendar: function(dateText, onSelect, settings, pos) { $.datepicker.dialogDatepicker(dateText, onSelect, convertSettings(settings), pos); }, /* Enable the input field(s) for entry. @param inputs element - single input field or string - the ID or other jQuery selector of the input field(s) or object - jQuery collection of input fields @return void */ enableFor: function(inputs) { (inputs.jquery ? inputs : $(inputs)).enableDatepicker(); }, /* Disable the input field(s) from entry. @param inputs element - single input field or string - the ID or other jQuery selector of the input field(s) or object - jQuery collection of input fields @return void */ disableFor: function(inputs) { (inputs.jquery ? inputs : $(inputs)).disableDatepicker(); }, /* Update the settings for a calendar attached to an input field or division. @param control element - the input field or div/span attached to the calendar or string - the ID or other jQuery selector of the input field @param settings object - the new settings to update @return void */ reconfigureFor: function(control, settings) { $(control).changeDatepicker(convertSettings(settings)); }, /* Set the date for a calendar attached to an input field or division. @param control element - the input field or div/span attached to the calendar or string - the ID or other jQuery selector of the input field @param date Date - the new date @return void */ setDateFor: function(control, date) { $(control).setDatepickerDate(date); }, /* Retrieve the date for a calendar attached to an input field or division. @param control element - the input field or div/span attached to the calendar or string - the ID or other jQuery selector of the input field @return Date - the current date */ getDateFor: function(control) { return $(control).getDatepickerDate(); }, /* Pop-up the calendar for a given input field. @param target element - the input field attached to the calendar or string - the ID or other jQuery selector of the input field @return void */ showFor: function(target) { $.datepicker.showFor(target); }, /* Hide the calendar from view. @param id string/object - the ID of the current calendar instance, or the instance itself @param speed string - the speed at which to close the calendar @return void */ hideCalendar: function(id, speed) { $.datepicker.hideDatepicker(speed); }, /* Set as customDate function to prevent selection of weekends. @param date Date - the date to customise @return [boolean, string] - is this date selectable?, what is its CSS class? */ noWeekends: function(date) { return $.datepicker.noWeekends(date); }, /* Format a date object into a string value. @param date Date - the date to customise */ formatDate: function(date) { return $.datepicker.formatDate($.datepicker._defaults.dateFormat, date); } }); /* Translate the calendar settings. */ function convertSettings(settings) { if (settings) { if (settings.autoPopUp) { settings.showOn = settings.autoPopUp; settings.autoPopUp = null; } if (settings.fieldSettings) { settings.beforeShow = settings.fieldSettings; settings.fieldSettings = null; } if (settings.customDate) { settings.beforeShowDay = settings.customDate; settings.customDate = null; } } return settings; } /* Attach the calendar to a jQuery selection. Convert to use the new jQuery Date Picker functionality. @param settings object - the new settings to use for this calendar instance (anonymous) @return jQuery object - for chaining further calls */ $.fn.calendar = function(settings) { this.each(function() { for (attrName in $.datepicker._defaults) { var attrValue = this.getAttribute('cal:' + attrName); if (attrValue) { this.setAttribute('date:' + attrName, attrValue); this.removeAttribute('cal:' + attrName); } } }); return this.attachDatepicker(convertSettings(settings)); }; $.fn.datepicker = $.fn.calendar; /* Initialise the calendar. */ $(document).ready(function() { popUpCal = new PopUpCal(); // singleton instance }); })(jQuery);