// JS Calendar var calendar = null; // remember the calendar object so that we reuse // it and avoid creating another // This function gets called when an end-user clicks on some date function selected(cal, date) { cal.sel.value = date; // just update the value of the input field } // And this gets called when the end-user clicks on the _selected_ date, // or clicks the "Close" (X) button. It just hides the calendar without // destroying it. function closeHandler(cal) { cal.hide(); // hide the calendar // don't check mousedown on document anymore (used to be able to hide the // calendar when someone clicks outside it, see the showCalendar function). Calendar.removeEvent(document, "mousedown", checkCalendar); } // This gets called when the user presses a mouse button anywhere in the // document, if the calendar is shown. If the click was outside the open // calendar this function closes it. function checkCalendar(ev) { var el = Calendar.is_ie ? Calendar.getElement(ev) : Calendar.getTargetElement(ev); for (; el != null; el = el.parentNode) // FIXME: allow end-user to click some link without closing the // calendar. Good to see real-time stylesheet change :) if (el == calendar.element || el.tagName == "A") break; if (el == null) { // calls closeHandler which should hide the calendar. calendar.callCloseHandler(); Calendar.stopEvent(ev); } } // This function shows the calendar under the element having the given id. // It takes care of catching "mousedown" signals on document and hiding the // calendar if the click was outside. function showCalendar(id) { var el = document.getElementById(id); if (calendar != null) { // we already have one created, so just update it. calendar.hide(); // hide the existing calendar calendar.parseDate(el.value); // set it to a new date } else { // first-time call, create the calendar var cal = new Calendar(true, null, selected, closeHandler); calendar = cal; // remember the calendar in the global cal.setRange(1900, 2070); // min/max year allowed calendar.create(); // create a popup calendar calendar.parseDate(el.value); // set it to a new date } calendar.sel = el; // inform it about the input field in use calendar.showAtElement(el); // show the calendar next to the input field // catch mousedown on the document Calendar.addEvent(document, "mousedown", checkCalendar); return false; }