(function(D) { D.fn.extend({ renderCalendar: function(P) { var X = function(Y) { return document.createElement(Y) }; P = D.extend({}, D.fn.datePicker.defaults, P); if (P.showHeader != D.dpConst.SHOW_HEADER_NONE) { var M = D(X("tr")); for (var S = Date.firstDayOfWeek; S < Date.firstDayOfWeek + 7; S++) { var H = S % 7; var R = Date.dayNames[H]; M.append(jQuery(X("th")).attr({ scope: "col", abbr: R, title: R, "class": (H == 0 || H == 6 ? "weekend" : "weekday") }).html(P.showHeader == D.dpConst.SHOW_HEADER_SHORT ? R.substr(0, 1) : R)) } } var E = D(X("table")).attr({ cellspacing: 2, className: "jCalendar" }).append((P.showHeader != D.dpConst.SHOW_HEADER_NONE ? D(X("thead")).append(M) : X("thead"))); var F = D(X("tbody")); var U = (new Date()).zeroTime(); var W = P.month == undefined ? U.getMonth() : P.month; var N = P.year || U.getFullYear(); var K = new Date(N, W, 1); var J = Date.firstDayOfWeek - K.getDay() + 1; if (J > 1) { J -= 7 } var O = Math.ceil(((-1 * J + 1) + K.getDaysInMonth()) / 7); K.addDays(J - 1); var V = function() { if (P.hoverClass) { D(this).addClass(P.hoverClass) } }; var G = function() { if (P.hoverClass) { D(this).removeClass(P.hoverClass) } }; var L = 0; while (L++ < O) { var Q = jQuery(X("tr")); for (var S = 0; S < 7; S++) { var I = K.getMonth() == W; var T = D(X("td")).text(K.getDate() + "").attr("className", (I ? "current-month " : "other-month ") + (K.isWeekend() ? "weekend " : "weekday ") + (I && K.getTime() == U.getTime() ? "today " : "")).hover(V, G); if (P.renderCallback) { P.renderCallback(T, K, W, N) } Q.append(T); K.addDays(1) } F.append(Q) } E.append(F); return this.each(function() { D(this).empty().append(E) }) }, datePicker: function(E) { if (!D.event._dpCache) { D.event._dpCache = [] } E = D.extend({}, D.fn.datePicker.defaults, E); return this.each(function() { var G = D(this); var I = true; if (!this._dpId) { this._dpId = D.event.guid++; D.event._dpCache[this._dpId] = new A(this); I = false } if (E.inline) { E.createButton = false; E.displayClose = false; E.closeOnSelect = false; G.empty() } var F = D.event._dpCache[this._dpId]; F.init(E); if (!I && E.createButton) { F.button = D('<a href="#" class="dp-choose-date" title="' + D.dpText.TEXT_CHOOSE_DATE + '">' + D.dpText.TEXT_CHOOSE_DATE + "</a>").bind("click", function() { G.dpDisplay(this); this.blur(); return false }); G.after(F.button) } if (!I && G.is(":text")) { G.bind("dateSelected", function(K, J, L) { this.value = J.asString() }).bind("change", function() { if (this.value != "") { var J = Date.fromString(this.value); if (J) { F.setSelected(J, true, true) } } }); if (E.clickInput) { G.bind("click", function() { G.dpDisplay() }) } var H = Date.fromString(this.value); if (this.value != "" && H) { F.setSelected(H, true, true) } } G.addClass("dp-applied") }) }, dpSetDisabled: function(E) { return B.call(this, "setDisabled", E) }, dpSetStartDate: function(E) { return B.call(this, "setStartDate", E) }, dpSetEndDate: function(E) { return B.call(this, "setEndDate", E) }, dpGetSelected: function() { var E = C(this[0]); if (E) { return E.getSelected() } return null }, dpSetSelected: function(G, F, E) { if (F == undefined) { F = true } if (E == undefined) { E = true } return B.call(this, "setSelected", Date.fromString(G), F, E, true) }, dpSetDisplayedMonth: function(E, F) { return B.call(this, "setDisplayedMonth", Number(E), Number(F), true) }, dpDisplay: function(E) { return B.call(this, "display", E) }, dpSetRenderCallback: function(E) { return B.call(this, "setRenderCallback", E) }, dpSetPosition: function(E, F) { return B.call(this, "setPosition", E, F) }, dpSetOffset: function(E, F) { return B.call(this, "setOffset", E, F) }, dpClose: function() { return B.call(this, "_closeCalendar", false, this[0]) }, _dpDestroy: function() { } }); var B = function(G, F, E, I, H) { return this.each(function() { var J = C(this); if (J) { J[G](F, E, I, H) } }) }; function A(E) { this.ele = E; this.displayedMonth = null; this.displayedYear = null; this.startDate = null; this.endDate = null; this.showYearNavigation = null; this.closeOnSelect = null; this.displayClose = null; this.selectMultiple = null; this.verticalPosition = null; this.horizontalPosition = null; this.verticalOffset = null; this.horizontalOffset = null; this.button = null; this.renderCallback = []; this.selectedDates = {}; this.inline = null; this.context = "#dp-popup" } D.extend(A.prototype, { init: function(E) { this.setStartDate(E.startDate); this.setEndDate(E.endDate); this.setDisplayedMonth(Number(E.month), Number(E.year)); this.setRenderCallback(E.renderCallback); this.showYearNavigation = E.showYearNavigation; this.closeOnSelect = E.closeOnSelect; this.displayClose = E.displayClose; this.selectMultiple = E.selectMultiple; this.verticalPosition = E.verticalPosition; this.horizontalPosition = E.horizontalPosition; this.hoverClass = E.hoverClass; this.setOffset(E.verticalOffset, E.horizontalOffset); this.inline = E.inline; if (this.inline) { this.context = this.ele; this.display() } }, setStartDate: function(E) { if (E) { this.startDate = Date.fromString(E) } if (!this.startDate) { this.startDate = (new Date()).zeroTime() } this.setDisplayedMonth(this.displayedMonth, this.displayedYear) }, setEndDate: function(E) { if (E) { this.endDate = Date.fromString(E) } if (!this.endDate) { this.endDate = (new Date("12/31/2999")) } if (this.endDate.getTime() < this.startDate.getTime()) { this.endDate = this.startDate } this.setDisplayedMonth(this.displayedMonth, this.displayedYear) }, setPosition: function(E, F) { this.verticalPosition = E; this.horizontalPosition = F }, setOffset: function(E, F) { this.verticalOffset = parseInt(E) || 0; this.horizontalOffset = parseInt(F) || 0 }, setDisabled: function(E) { $e = D(this.ele); $e[E ? "addClass" : "removeClass"]("dp-disabled"); if (this.button) { $but = D(this.button); $but[E ? "addClass" : "removeClass"]("dp-disabled"); $but.attr("title", E ? "" : D.dpText.TEXT_CHOOSE_DATE) } if ($e.is(":text")) { $e.attr("disabled", E ? "disabled" : "") } }, setDisplayedMonth: function(E, L, I) { if (this.startDate == undefined || this.endDate == undefined) { return } var H = new Date(this.startDate.getTime()); H.setDate(1); var K = new Date(this.endDate.getTime()); K.setDate(1); var G; if ((!E && !L) || (isNaN(E) && isNaN(L))) { G = new Date().zeroTime(); G.setDate(1) } else { if (isNaN(E)) { G = new Date(L, this.displayedMonth, 1) } else { if (isNaN(L)) { G = new Date(this.displayedYear, E, 1) } else { G = new Date(L, E, 1) } } } if (G.getTime() < H.getTime()) { G = H } else { if (G.getTime() > K.getTime()) { G = K } } var F = this.displayedMonth; var J = this.displayedYear; this.displayedMonth = G.getMonth(); this.displayedYear = G.getFullYear(); if (I && (this.displayedMonth != F || this.displayedYear != J)) { this._rerenderCalendar(); D(this.ele).trigger("dpMonthChanged", [this.displayedMonth, this.displayedYear]) } }, setSelected: function(K, E, F, H) { if (E == this.isSelected(K)) { return } if (this.selectMultiple == false) { this.selectedDates = {}; D("td.selected", this.context).removeClass("selected") } if (F && this.displayedMonth != K.getMonth()) { this.setDisplayedMonth(K.getMonth(), K.getFullYear(), true) } this.selectedDates[K.toString()] = E; var I = "td."; I += K.getMonth() == this.displayedMonth ? "current-month" : "other-month"; I += ':contains("' + K.getDate() + '")'; var J; D(I, this.ele).each(function() { if (D(this).text() == K.getDate()) { J = D(this); J[E ? "addClass" : "removeClass"]("selected") } }); if (H) { var G = this.isSelected(K); $e = D(this.ele); $e.trigger("dateSelected", [K, J, G]); $e.trigger("change") } }, isSelected: function(E) { return this.selectedDates[E.toString()] }, getSelected: function() { var E = []; for (s in this.selectedDates) { if (this.selectedDates[s] == true) { E.push(Date.parse(s)) } } return E }, display: function(E) { if (D(this.ele).is(".dp-disabled")) { return } E = E || this.ele; var L = this; var H = D(E); var K = H.offset(); var M; var N; var G; var I; if (L.inline) { M = D(this.ele); N = { id: "calendar-" + this.ele._dpId, className: "dp-popup dp-popup-inline" }; I = {} } else { M = D("body"); N = { id: "dp-popup", className: "dp-popup" }; I = { top: K.top + L.verticalOffset, left: K.left + L.horizontalOffset }; var J = function(Q) { var O = Q.target; var P = D("#dp-popup")[0]; while (true) { if (O == P) { return true } else { if (O == document) { L._closeCalendar(); return false } else { O = D(O).parent()[0] } } } }; this._checkMouse = J; this._closeCalendar(true) } M.append(D("<div></div>").attr(N).css(I).append(D("<h2></h2>"), D('<div class="dp-nav-prev"></div>').append(D('<a class="dp-nav-prev-year" href="#" title="' + D.dpText.TEXT_PREV_YEAR + '">&lt;&lt;</a>').bind("click", function() { return L._displayNewMonth.call(L, this, 0, -1) }), D('<a class="dp-nav-prev-month" href="#" title="' + D.dpText.TEXT_PREV_MONTH + '">&lt;</a>').bind("click", function() { return L._displayNewMonth.call(L, this, -1, 0) })), D('<div class="dp-nav-next"></div>').append(D('<a class="dp-nav-next-year" href="#" title="' + D.dpText.TEXT_NEXT_YEAR + '">&gt;&gt;</a>').bind("click", function() { return L._displayNewMonth.call(L, this, 0, 1) }), D('<a class="dp-nav-next-month" href="#" title="' + D.dpText.TEXT_NEXT_MONTH + '">&gt;</a>').bind("click", function() { return L._displayNewMonth.call(L, this, 1, 0) })), D("<div></div>").attr("className", "dp-calendar")).bgIframe()); var F = this.inline ? D(".dp-popup", this.context) : D("#dp-popup"); if (this.showYearNavigation == false) { D(".dp-nav-prev-year, .dp-nav-next-year", L.context).css("display", "none") } if (this.displayClose) { F.append(D('<a href="#" id="dp-close">' + D.dpText.TEXT_CLOSE + "</a>").bind("click", function() { L._closeCalendar(); return false })) } L._renderCalendar(); D(this.ele).trigger("dpDisplayed", F); if (!L.inline) { if (this.verticalPosition == D.dpConst.POS_BOTTOM) { F.css("top", K.top + H.height() - F.height() + L.verticalOffset) } if (this.horizontalPosition == D.dpConst.POS_RIGHT) { F.css("left", K.left + H.width() - F.width() + L.horizontalOffset) } D(document).bind("mousedown", this._checkMouse) } }, setRenderCallback: function(E) { if (E == null) { return } if (E && typeof (E) == "function") { E = [E] } this.renderCallback = this.renderCallback.concat(E) }, cellRender: function(J, E, H, G) { var K = this.dpController; var I = new Date(E.getTime()); J.bind("click", function() { var L = D(this); if (!L.is(".disabled")) { K.setSelected(I, !L.is(".selected") || !K.selectMultiple, false, true); if (K.closeOnSelect) { K._closeCalendar() } } }); if (K.isSelected(I)) { J.addClass("selected") } for (var F = 0; F < K.renderCallback.length; F++) { K.renderCallback[F].apply(this, arguments) } }, _displayNewMonth: function(F, E, G) { if (!D(F).is(".disabled")) { this.setDisplayedMonth(this.displayedMonth + E, this.displayedYear + G, true) } F.blur(); return false }, _rerenderCalendar: function() { this._clearCalendar(); this._renderCalendar() }, _renderCalendar: function() { D("h2", this.context).html(Date.monthNames[this.displayedMonth] + " " + this.displayedYear); D(".dp-calendar", this.context).renderCalendar({ month: this.displayedMonth, year: this.displayedYear, renderCallback: this.cellRender, dpController: this, hoverClass: this.hoverClass }); if (this.displayedYear == this.startDate.getFullYear() && this.displayedMonth == this.startDate.getMonth()) { D(".dp-nav-prev-year", this.context).addClass("disabled"); D(".dp-nav-prev-month", this.context).addClass("disabled"); D(".dp-calendar td.other-month", this.context).each(function() { var H = D(this); if (Number(H.text()) > 20) { H.addClass("disabled") } }); var G = this.startDate.getDate(); D(".dp-calendar td.current-month", this.context).each(function() { var H = D(this); if (Number(H.text()) < G) { H.addClass("disabled") } }) } else { D(".dp-nav-prev-year", this.context).removeClass("disabled"); D(".dp-nav-prev-month", this.context).removeClass("disabled"); var G = this.startDate.getDate(); if (G > 20) { var F = new Date(this.startDate.getTime()); F.addMonths(1); if (this.displayedYear == F.getFullYear() && this.displayedMonth == F.getMonth()) { D("dp-calendar td.other-month", this.context).each(function() { var H = D(this); if (Number(H.text()) < G) { H.addClass("disabled") } }) } } } if (this.displayedYear == this.endDate.getFullYear() && this.displayedMonth == this.endDate.getMonth()) { D(".dp-nav-next-year", this.context).addClass("disabled"); D(".dp-nav-next-month", this.context).addClass("disabled"); D(".dp-calendar td.other-month", this.context).each(function() { var H = D(this); if (Number(H.text()) < 14) { H.addClass("disabled") } }); var G = this.endDate.getDate(); D(".dp-calendar td.current-month", this.context).each(function() { var H = D(this); if (Number(H.text()) > G) { H.addClass("disabled") } }) } else { D(".dp-nav-next-year", this.context).removeClass("disabled"); D(".dp-nav-next-month", this.context).removeClass("disabled"); var G = this.endDate.getDate(); if (G < 13) { var E = new Date(this.endDate.getTime()); E.addMonths(-1); if (this.displayedYear == E.getFullYear() && this.displayedMonth == E.getMonth()) { D(".dp-calendar td.other-month", this.context).each(function() { var H = D(this); if (Number(H.text()) > G) { H.addClass("disabled") } }) } } } }, _closeCalendar: function(E, F) { if (!F || F == this.ele) { D(document).unbind("mousedown", this._checkMouse); this._clearCalendar(); D("#dp-popup a").unbind(); D("#dp-popup").empty().remove(); if (!E) { D(this.ele).trigger("dpClosed", [this.getSelected()]) } } }, _clearCalendar: function() { D(".dp-calendar td", this.context).unbind(); D(".dp-calendar", this.context).empty() } }); D.dpConst = { SHOW_HEADER_NONE: 0, SHOW_HEADER_SHORT: 1, SHOW_HEADER_LONG: 2, POS_TOP: 0, POS_BOTTOM: 1, POS_LEFT: 0, POS_RIGHT: 1 }; D.dpText = { TEXT_PREV_YEAR: "Previous year", TEXT_PREV_MONTH: "Previous month", TEXT_NEXT_YEAR: "Next year", TEXT_NEXT_MONTH: "Next month", TEXT_CLOSE: "Close", TEXT_CHOOSE_DATE: "Choose date" }; D.dpVersion = "$Id: jquery.datePicker.js 15 2008-12-17 04:40:18Z kelvin.luck $"; D.fn.datePicker.defaults = { month: undefined, year: undefined, showHeader: D.dpConst.SHOW_HEADER_SHORT, startDate: undefined, endDate: undefined, inline: false, renderCallback: null, createButton: true, showYearNavigation: true, closeOnSelect: true, displayClose: false, selectMultiple: false, clickInput: false, verticalPosition: D.dpConst.POS_TOP, horizontalPosition: D.dpConst.POS_LEFT, verticalOffset: 0, horizontalOffset: 0, hoverClass: "dp-hover" }; function C(E) { if (E._dpId) { return D.event._dpCache[E._dpId] } return false } if (D.fn.bgIframe == undefined) { D.fn.bgIframe = function() { return this } } D(window).bind("unload", function() { var F = D.event._dpCache || []; for (var E in F) { D(F[E].ele)._dpDestroy() } }) })(jQuery);