-/* Copyright Mihai Bazon, 2002, 2003 | http://dynarch.com/mishoo/\r
- * ---------------------------------------------------------------------------\r
- *\r
- * The DHTML Calendar\r
- *\r
- * Details and latest version at:\r
- * http://dynarch.com/mishoo/calendar.epl\r
- *\r
- * This script is distributed under the GNU Lesser General Public License.\r
- * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html\r
- *\r
- * This file defines helper functions for setting up the calendar. They are\r
- * intended to help non-programmers get a working calendar on their site\r
- * quickly. This script should not be seen as part of the calendar. It just\r
- * shows you what one can do with the calendar, while in the same time\r
- * providing a quick and simple method for setting it up. If you need\r
- * exhaustive customization of the calendar creation process feel free to\r
- * modify this code to suit your needs (this is recommended and much better\r
- * than modifying calendar.js itself).\r
- */\r
-\r
-// $Id$\r
-\r
-/**\r
- * This function "patches" an input field (or other element) to use a calendar\r
- * widget for date selection.\r
- *\r
- * The "params" is a single object that can have the following properties:\r
- *\r
- * prop. name | description\r
- * -------------------------------------------------------------------------------------------------\r
- * inputField | the ID of an input field to store the date\r
- * displayArea | the ID of a DIV or other element to show the date\r
- * button | ID of a button or other element that will trigger the calendar\r
- * eventName | event that will trigger the calendar, without the "on" prefix (default: "click")\r
- * ifFormat | date format that will be stored in the input field\r
- * daFormat | the date format that will be used to display the date in displayArea\r
- * singleClick | (true/false) wether the calendar is in single click mode or not (default: true)\r
- * firstDay | numeric: 0 to 6. "0" means display Sunday first, "1" means display Monday first, etc.\r
- * align | alignment (default: "Br"); if you don't know what's this see the calendar documentation\r
- * range | array with 2 elements. Default: [1900, 2999] -- the range of years available\r
- * weekNumbers | (true/false) if it's true (default) the calendar will display week numbers\r
- * flat | null or element ID; if not null the calendar will be a flat calendar having the parent with the given ID\r
- * flatCallback | function that receives a JS Date object and returns an URL to point the browser to (for flat calendar)\r
- * disableFunc | function that receives a JS Date object and should return true if that date has to be disabled in the calendar\r
- * onSelect | function that gets called when a date is selected. You don't _have_ to supply this (the default is generally okay)\r
- * onClose | function that gets called when the calendar is closed. [default]\r
- * onUpdate | function that gets called after the date is updated in the input field. Receives a reference to the calendar.\r
- * date | the date that the calendar will be initially displayed to\r
- * showsTime | default: false; if true the calendar will include a time selector\r
- * timeFormat | the time format; can be "12" or "24", default is "12"\r
- * electric | if true (default) then given fields/date areas are updated for each move; otherwise they're updated only on close\r
- * step | configures the step of the years in drop-down boxes; default: 2\r
- * position | configures the calendar absolute position; default: null\r
- * cache | if "true" (but default: "false") it will reuse the same calendar object, where possible\r
- * showOthers | if "true" (but default: "false") it will show days from other months too\r
- *\r
- * None of them is required, they all have default values. However, if you\r
- * pass none of "inputField", "displayArea" or "button" you'll get a warning\r
- * saying "nothing to setup".\r
- */\r
-Calendar.setup = function (params) {\r
- function param_default(pname, def) { if (typeof params[pname] == "undefined") { params[pname] = def; } };\r
-\r
- param_default("inputField", null);\r
- param_default("displayArea", null);\r
- param_default("button", null);\r
- param_default("eventName", "click");\r
- param_default("ifFormat", "%Y/%m/%d");\r
- param_default("daFormat", "%Y/%m/%d");\r
- param_default("singleClick", true);\r
- param_default("disableFunc", 'dateStatusHandler');\r
- param_default("dateStatusFunc", params["disableFunc"]); // takes precedence if both are defined\r
- param_default("firstDay", 0); // defaults to "Sunday" first\r
- param_default("align", "Br");\r
- param_default("range", [1900, 2999]);\r
- param_default("weekNumbers", true);\r
- param_default("flat", null);\r
- param_default("flatCallback", null);\r
- param_default("onSelect", null);\r
- param_default("onClose", null);\r
- param_default("onUpdate", null);\r
- param_default("date", null);\r
- param_default("showsTime", false);\r
- param_default("timeFormat", "24");\r
- param_default("electric", true);\r
- param_default("step", 2);\r
- param_default("position", null);\r
- param_default("cache", false);\r
- param_default("showOthers", false);\r
-\r
- var tmp = ["inputField", "displayArea", "button"];\r
- for (var i in tmp) {\r
- if (typeof params[tmp[i]] == "string") {\r
- params[tmp[i]] = document.getElementById(params[tmp[i]]);\r
- }\r
- }\r
- if (!(params.flat || params.inputField || params.displayArea || params.button)) {\r
- alert("Calendar.setup:\n Nothing to setup (no fields found). Please check your code");\r
- return false;\r
- }\r
-\r
- function onSelect(cal) {\r
- var p = cal.params;\r
- var update = (cal.dateClicked || p.electric);\r
- if (update && p.flat) {\r
- if (typeof p.flatCallback == "function")\r
- p.flatCallback(cal);\r
- else\r
- alert("No flatCallback given -- doing nothing.");\r
- return false;\r
- }\r
- if (update && p.inputField) {\r
- p.inputField.value = cal.date.print(p.ifFormat);\r
- if (typeof p.inputField.onchange == "function")\r
- p.inputField.onchange();\r
- }\r
- if (update && p.displayArea)\r
- p.displayArea.innerHTML = cal.date.print(p.daFormat);\r
- if (update && p.singleClick && cal.dateClicked)\r
- cal.callCloseHandler();\r
- if (update && typeof p.onUpdate == "function")\r
- p.onUpdate(cal);\r
- };\r
-\r
- if (params.flat != null) {\r
- if (typeof params.flat == "string")\r
- params.flat = document.getElementById(params.flat);\r
- if (!params.flat) {\r
- alert("Calendar.setup:\n Flat specified but can't find parent.");\r
- return false;\r
- }\r
- var cal = new Calendar(params.firstDay, params.date, params.onSelect || onSelect);\r
- cal.showsTime = params.showsTime;\r
- cal.time24 = (params.timeFormat == "24");\r
- cal.params = params;\r
- cal.weekNumbers = params.weekNumbers;\r
- cal.setRange(params.range[0], params.range[1]);\r
- cal.setDateStatusHandler(params.dateStatusFunc);\r
- cal.create(params.flat);\r
- cal.show();\r
- return false;\r
- }\r
-\r
- var triggerEl = params.button || params.displayArea || params.inputField;\r
- triggerEl["on" + params.eventName] = function() {\r
- var dateEl = params.inputField || params.displayArea;\r
- var dateFmt = params.inputField ? params.ifFormat : params.daFormat;\r
- var mustCreate = false;\r
- var cal = window.calendar;\r
- if (!(cal && params.cache)) {\r
- window.calendar = cal = new Calendar(params.firstDay,\r
- params.date,\r
- params.onSelect || onSelect,\r
- params.onClose || function(cal) { cal.hide(); });\r
- cal.showsTime = params.showsTime;\r
- cal.time24 = (params.timeFormat == "24");\r
- cal.weekNumbers = params.weekNumbers;\r
- mustCreate = true;\r
- } else {\r
- if (params.date)\r
- cal.setDate(params.date);\r
- cal.hide();\r
- }\r
- cal.showsOtherMonths = params.showOthers;\r
- cal.yearStep = params.step;\r
- cal.setRange(params.range[0], params.range[1]);\r
- cal.params = params;\r
- cal.setDateStatusHandler(params.dateStatusFunc);\r
- cal.setDateFormat(dateFmt);\r
- if (mustCreate)\r
- cal.create();\r
- cal.parseDate(dateEl.value || dateEl.innerHTML);\r
- cal.refresh();\r
- if (!params.position)\r
- cal.showAtElement(params.button || params.displayArea || params.inputField, params.align);\r
- else\r
- cal.showAt(params.position[0], params.position[1]);\r
- return false;\r
- };\r
-};\r
+/* Copyright Mihai Bazon, 2002, 2003 | http://dynarch.com/mishoo/
+ * ---------------------------------------------------------------------------
+ *
+ * The DHTML Calendar
+ *
+ * Details and latest version at:
+ * http://dynarch.com/mishoo/calendar.epl
+ *
+ * This script is distributed under the GNU Lesser General Public License.
+ * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html
+ *
+ * This file defines helper functions for setting up the calendar. They are
+ * intended to help non-programmers get a working calendar on their site
+ * quickly. This script should not be seen as part of the calendar. It just
+ * shows you what one can do with the calendar, while in the same time
+ * providing a quick and simple method for setting it up. If you need
+ * exhaustive customization of the calendar creation process feel free to
+ * modify this code to suit your needs (this is recommended and much better
+ * than modifying calendar.js itself).
+ */
+
+// $Id$
+
+/**
+ * This function "patches" an input field (or other element) to use a calendar
+ * widget for date selection.
+ *
+ * The "params" is a single object that can have the following properties:
+ *
+ * prop. name | description
+ * -------------------------------------------------------------------------------------------------
+ * inputField | the ID of an input field to store the date
+ * displayArea | the ID of a DIV or other element to show the date
+ * button | ID of a button or other element that will trigger the calendar
+ * eventName | event that will trigger the calendar, without the "on" prefix (default: "click")
+ * ifFormat | date format that will be stored in the input field
+ * daFormat | the date format that will be used to display the date in displayArea
+ * singleClick | (true/false) wether the calendar is in single click mode or not (default: true)
+ * firstDay | numeric: 0 to 6. "0" means display Sunday first, "1" means display Monday first, etc.
+ * align | alignment (default: "Br"); if you don't know what's this see the calendar documentation
+ * range | array with 2 elements. Default: [1900, 2999] -- the range of years available
+ * weekNumbers | (true/false) if it's true (default) the calendar will display week numbers
+ * flat | null or element ID; if not null the calendar will be a flat calendar having the parent with the given ID
+ * flatCallback | function that receives a JS Date object and returns an URL to point the browser to (for flat calendar)
+ * disableFunc | function that receives a JS Date object and should return true if that date has to be disabled in the calendar
+ * onSelect | function that gets called when a date is selected. You don't _have_ to supply this (the default is generally okay)
+ * onClose | function that gets called when the calendar is closed. [default]
+ * onUpdate | function that gets called after the date is updated in the input field. Receives a reference to the calendar.
+ * date | the date that the calendar will be initially displayed to
+ * showsTime | default: false; if true the calendar will include a time selector
+ * timeFormat | the time format; can be "12" or "24", default is "12"
+ * electric | if true (default) then given fields/date areas are updated for each move; otherwise they're updated only on close
+ * step | configures the step of the years in drop-down boxes; default: 2
+ * position | configures the calendar absolute position; default: null
+ * cache | if "true" (but default: "false") it will reuse the same calendar object, where possible
+ * showOthers | if "true" (but default: "false") it will show days from other months too
+ *
+ * None of them is required, they all have default values. However, if you
+ * pass none of "inputField", "displayArea" or "button" you'll get a warning
+ * saying "nothing to setup".
+ */
+Calendar.setup = function (params) {
+ function param_default(pname, def) { if (typeof params[pname] == "undefined") { params[pname] = def; } };
+
+ param_default("inputField", null);
+ param_default("displayArea", null);
+ param_default("button", null);
+ param_default("eventName", "click");
+ param_default("ifFormat", "%Y/%m/%d");
+ param_default("daFormat", "%Y/%m/%d");
+ param_default("singleClick", true);
+ param_default("disableFunc", 'dateStatusHandler');
+ param_default("dateStatusFunc", params["disableFunc"]); // takes precedence if both are defined
+ param_default("firstDay", 0); // defaults to "Sunday" first
+ param_default("align", "Br");
+ param_default("range", [1900, 2999]);
+ param_default("weekNumbers", true);
+ param_default("flat", null);
+ param_default("flatCallback", null);
+ param_default("onSelect", null);
+ param_default("onClose", null);
+ param_default("onUpdate", null);
+ param_default("date", null);
+ param_default("showsTime", false);
+ param_default("timeFormat", "24");
+ param_default("electric", true);
+ param_default("step", 2);
+ param_default("position", null);
+ param_default("cache", false);
+ param_default("showOthers", false);
+
+ var tmp = ["inputField", "displayArea", "button"];
+ for (var i in tmp) {
+ if (typeof params[tmp[i]] == "string") {
+ params[tmp[i]] = document.getElementById(params[tmp[i]]);
+ }
+ }
+ if (!(params.flat || params.inputField || params.displayArea || params.button)) {
+ alert("Calendar.setup:\n Nothing to setup (no fields found). Please check your code");
+ return false;
+ }
+
+ function onSelect(cal) {
+ var p = cal.params;
+ var update = (cal.dateClicked || p.electric);
+ if (update && p.flat) {
+ if (typeof p.flatCallback == "function")
+ p.flatCallback(cal);
+ else
+ alert("No flatCallback given -- doing nothing.");
+ return false;
+ }
+ if (update && p.inputField) {
+ p.inputField.value = cal.date.print(p.ifFormat);
+ if (typeof p.inputField.onchange == "function")
+ p.inputField.onchange();
+ }
+ if (update && p.displayArea)
+ p.displayArea.innerHTML = cal.date.print(p.daFormat);
+ if (update && p.singleClick && cal.dateClicked)
+ cal.callCloseHandler();
+ if (update && typeof p.onUpdate == "function")
+ p.onUpdate(cal);
+ };
+
+ if (params.flat != null) {
+ if (typeof params.flat == "string")
+ params.flat = document.getElementById(params.flat);
+ if (!params.flat) {
+ alert("Calendar.setup:\n Flat specified but can't find parent.");
+ return false;
+ }
+ var cal = new Calendar(params.firstDay, params.date, params.onSelect || onSelect);
+ cal.showsTime = params.showsTime;
+ cal.time24 = (params.timeFormat == "24");
+ cal.params = params;
+ cal.weekNumbers = params.weekNumbers;
+ cal.setRange(params.range[0], params.range[1]);
+ cal.setDateStatusHandler(params.dateStatusFunc);
+ cal.create(params.flat);
+ cal.show();
+ return false;
+ }
+
+ var triggerEl = params.button || params.displayArea || params.inputField;
+ triggerEl["on" + params.eventName] = function() {
+ var dateEl = params.inputField || params.displayArea;
+ var dateFmt = params.inputField ? params.ifFormat : params.daFormat;
+ var mustCreate = false;
+ var cal = window.calendar;
+ if (!(cal && params.cache)) {
+ window.calendar = cal = new Calendar(params.firstDay,
+ params.date,
+ params.onSelect || onSelect,
+ params.onClose || function(cal) { cal.hide(); });
+ cal.showsTime = params.showsTime;
+ cal.time24 = (params.timeFormat == "24");
+ cal.weekNumbers = params.weekNumbers;
+ mustCreate = true;
+ } else {
+ if (params.date)
+ cal.setDate(params.date);
+ cal.hide();
+ }
+ cal.showsOtherMonths = params.showOthers;
+ cal.yearStep = params.step;
+ cal.setRange(params.range[0], params.range[1]);
+ cal.params = params;
+ cal.setDateStatusHandler(params.dateStatusFunc);
+ cal.setDateFormat(dateFmt);
+ if (mustCreate)
+ cal.create();
+ cal.parseDate(dateEl.value || dateEl.innerHTML);
+ cal.refresh();
+ if (!params.position)
+ cal.showAtElement(params.button || params.displayArea || params.inputField, params.align);
+ else
+ cal.showAt(params.position[0], params.position[1]);
+ return false;
+ };
+};