(function (factory){ if (typeof define === "function" && define.amd) { define(["jquery", "./core"] , factory); } else { factory(jQuery); } } (function ($){ $.extend($.ui, { datepicker: { version: "@VERSION"} } ); var datepicker_instActive; function datepicker_getZindex(elem){ var position, value; while (_AN_Read_length("length", elem) && elem[0] !== document){ position = elem.css("position"); if (position === "absolute" || position === "relative" || position === "fixed") { value = parseInt(elem.css("zIndex"), 10); if (!isNaN(value) && value !== 0) { return value; } } elem = elem.parent(); } return 0; } function Datepicker(){ this._curInst = null ; this._keyEvent = false ; this._disabledInputs = [] ; this._datepickerShowing = false ; this._inDialog = false ; this._mainDivId = "ui-datepicker-div"; this._inlineClass = "ui-datepicker-inline"; this._appendClass = "ui-datepicker-append"; this._triggerClass = "ui-datepicker-trigger"; this._dialogClass = "ui-datepicker-dialog"; this._disableClass = "ui-datepicker-disabled"; this._unselectableClass = "ui-datepicker-unselectable"; this._currentClass = "ui-datepicker-current-day"; this._dayOverClass = "ui-datepicker-days-cell-over"; this.regional = [] ; this.regional[""] = { closeText: "Done", prevText: "Prev", nextText: "Next", currentText: "Today", monthNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"] , monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] , dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] , dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"] , dayNamesMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"] , weekHeader: "Wk", dateFormat: "mm/dd/yy", firstDay: 0, isRTL: false , showMonthAfterYear: false , yearSuffix: ""} ; this._defaults = { showOn: "focus", showAnim: "fadeIn", showOptions: { } , defaultDate: null , appendText: "", buttonText: "...", buttonImage: "", buttonImageOnly: false , hideIfNoPrevNext: false , navigationAsDateFormat: false , gotoCurrent: false , changeMonth: false , changeYear: false , yearRange: "c-10:c+10", showOtherMonths: false , selectOtherMonths: false , showWeek: false , calculateWeek: this.iso8601Week, shortYearCutoff: "+10", minDate: null , maxDate: null , duration: "fast", beforeShowDay: null , beforeShow: null , onSelect: null , onChangeMonthYear: null , onClose: null , numberOfMonths: 1, showCurrentAtPos: 0, stepMonths: 1, stepBigMonths: 12, altField: "", altFormat: "", constrainInput: true , showButtonPanel: false , autoSize: false , disabled: false } ; $.extend(this._defaults, this.regional[""] ); this.regional.en = $.extend(true , { } , this.regional[""] ); this.regional["en-US"] = $.extend(true , { } , this.regional.en); this.dpDiv = datepicker_bindHover($("
")); } $.extend(Datepicker.prototype, { markerClassName: "hasDatepicker", maxRows: 4, _widgetDatepicker: function (){ return this.dpDiv; } , setDefaults: function (settings){ datepicker_extendRemove(this._defaults, settings || { } ); return this; } , _attachDatepicker: function (target, settings){ var nodeName, inline, inst; nodeName = target.nodeName.toLowerCase(); inline = (nodeName === "div" || nodeName === "span"); if (!target.id) { this.uuid += 1; target.id = "dp" + this.uuid; } inst = this._newInst($(target), inline); inst.settings = $.extend({ } , settings || { } ); if (nodeName === "input") { this._connectDatepicker(target, inst); } else if (inline) { this._inlineDatepicker(target, inst); } } , _newInst: function (target, inline){ var id = _AN_Call_replace("replace", target[0].id, /([^A-Za-z0-9_\-])/g, "\\\\$1"); return { id: id, input: target, selectedDay: 0, selectedMonth: 0, selectedYear: 0, drawMonth: 0, drawYear: 0, inline: inline, dpDiv: (!inline? this.dpDiv: datepicker_bindHover($("
")))} ; } , _connectDatepicker: function (target, inst){ var input = $(target); inst.append = $([] ); inst.trigger = $([] ); if (input.hasClass(this.markerClassName)) { return ; } this._attachments(input, inst); input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp); this._autoSize(inst); $.data(target, "datepicker", inst); if (inst.settings.disabled) { this._disableDatepicker(target); } } , _attachments: function (input, inst){ var showOn, buttonText, buttonImage, appendText = this._get(inst, "appendText"), isRTL = this._get(inst, "isRTL"); if (inst.append) { inst.append.remove(); } if (appendText) { inst.append = $("" + appendText + ""); input[isRTL? "before": "after"](inst.append); } input.unbind("focus", this._showDatepicker); if (inst.trigger) { inst.trigger.remove(); } showOn = this._get(inst, "showOn"); if (showOn === "focus" || showOn === "both") { input.focus(this._showDatepicker); } if (showOn === "button" || showOn === "both") { buttonText = this._get(inst, "buttonText"); buttonImage = this._get(inst, "buttonImage"); inst.trigger = $(this._get(inst, "buttonImageOnly")? $("").addClass(this._triggerClass).attr({ src: buttonImage, alt: buttonText, title: buttonText} ): $("").addClass(this._triggerClass).html(!buttonImage? buttonText: $("").attr({ src: buttonImage, alt: buttonText, title: buttonText} ))); input[isRTL? "before": "after"](inst.trigger); inst.trigger.click(function (){ if ($.datepicker._datepickerShowing && $.datepicker._lastInput === input[0]) { $.datepicker._hideDatepicker(); } else if ($.datepicker._datepickerShowing && $.datepicker._lastInput !== input[0]) { $.datepicker._hideDatepicker(); $.datepicker._showDatepicker(input[0]); } else { $.datepicker._showDatepicker(input[0]); } return false ; } ); } } , _autoSize: function (inst){ if (this._get(inst, "autoSize") && !inst.inline) { var findMax, max, maxI, i, date = new Date(2009, 12 - 1, 20), dateFormat = this._get(inst, "dateFormat"); if (dateFormat.match(/[DM]/)) { findMax = function (names){ max = 0; maxI = 0; for (i = 0; i < _AN_Read_length("length", names); i++ ){ if (_AN_Read_length("length", names[i]) > max) { max = _AN_Read_length("length", names[i]); maxI = i; } } return maxI; } ; date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/)? "monthNames": "monthNamesShort")))); date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/)? "dayNames": "dayNamesShort"))) + 20 - date.getDay()); } inst.input.attr("size", _AN_Read_length("length", this._formatDate(inst, date))); } } , _inlineDatepicker: function (target, inst){ var divSpan = $(target); if (divSpan.hasClass(this.markerClassName)) { return ; } divSpan.addClass(this.markerClassName).append(inst.dpDiv); $.data(target, "datepicker", inst); this._setDate(inst, this._getDefaultDate(inst), true ); this._updateDatepicker(inst); this._updateAlternate(inst); if (inst.settings.disabled) { this._disableDatepicker(target); } inst.dpDiv.css("display", "block"); } , _dialogDatepicker: function (input, date, onSelect, settings, pos){ var id, browserWidth, browserHeight, scrollX, scrollY, inst = this._dialogInst; if (!inst) { this.uuid += 1; id = "dp" + this.uuid; this._dialogInput = $(""); this._dialogInput.keydown(this._doKeyDown); $("body").append(this._dialogInput); inst = this._dialogInst = this._newInst(this._dialogInput, false ); inst.settings = { } ; $.data(this._dialogInput[0], "datepicker", inst); } datepicker_extendRemove(inst.settings, settings || { } ); date = (date && date.constructor === Date? this._formatDate(inst, date): date); this._dialogInput.val(date); this._pos = (pos? (_AN_Read_length("length", pos)? pos: [pos.pageX, pos.pageY] ): null ); if (!this._pos) { browserWidth = document.documentElement.clientWidth; browserHeight = document.documentElement.clientHeight; scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; scrollY = document.documentElement.scrollTop || document.body.scrollTop; this._pos = [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY] ; } this._dialogInput.css("left", (this._pos[0] + 20) + "px").css("top", this._pos[1] + "px"); inst.settings.onSelect = onSelect; this._inDialog = true ; this.dpDiv.addClass(this._dialogClass); this._showDatepicker(this._dialogInput[0]); if ($.blockUI) { $.blockUI(this.dpDiv); } $.data(this._dialogInput[0], "datepicker", inst); return this; } , _destroyDatepicker: function (target){ var nodeName, $target = $(target), inst = $.data(target, "datepicker"); if (!$target.hasClass(this.markerClassName)) { return ; } nodeName = target.nodeName.toLowerCase(); $.removeData(target, "datepicker"); if (nodeName === "input") { inst.append.remove(); inst.trigger.remove(); $target.removeClass(this.markerClassName).unbind("focus", this._showDatepicker).unbind("keydown", this._doKeyDown).unbind("keypress", this._doKeyPress).unbind("keyup", this._doKeyUp); } else if (nodeName === "div" || nodeName === "span") { $target.removeClass(this.markerClassName).empty(); } if (datepicker_instActive === inst) { datepicker_instActive = null ; } } , _enableDatepicker: function (target){ var nodeName, inline, $target = $(target), inst = $.data(target, "datepicker"); if (!$target.hasClass(this.markerClassName)) { return ; } nodeName = target.nodeName.toLowerCase(); if (nodeName === "input") { target.disabled = false ; inst.trigger.filter("button").each(function (){ this.disabled = false ; } ).end().filter("img").css({ opacity: "1.0", cursor: ""} ); } else if (nodeName === "div" || nodeName === "span") { inline = $target.children("." + this._inlineClass); inline.children().removeClass("ui-state-disabled"); inline.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled", false ); } this._disabledInputs = $.map(this._disabledInputs, function (value){ return (value === target? null : value); } ); } , _disableDatepicker: function (target){ var nodeName, inline, $target = $(target), inst = $.data(target, "datepicker"); if (!$target.hasClass(this.markerClassName)) { return ; } nodeName = target.nodeName.toLowerCase(); if (nodeName === "input") { target.disabled = true ; inst.trigger.filter("button").each(function (){ this.disabled = true ; } ).end().filter("img").css({ opacity: "0.5", cursor: "default"} ); } else if (nodeName === "div" || nodeName === "span") { inline = $target.children("." + this._inlineClass); inline.children().addClass("ui-state-disabled"); inline.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled", true ); } this._disabledInputs = $.map(this._disabledInputs, function (value){ return (value === target? null : value); } ); this._disabledInputs[_AN_Read_length("length", this._disabledInputs)] = target; } , _isDisabledDatepicker: function (target){ if (!target) { return false ; } for (var i = 0; i < _AN_Read_length("length", this._disabledInputs); i++ ){ if (this._disabledInputs[i] === target) { return true ; } } return false ; } , _getInst: function (target){ try { return $.data(target, "datepicker"); } catch (err) { throw "Missing instance data for this datepicker" } } , _optionDatepicker: function (target, name, value){ var settings, date, minDate, maxDate, inst = this._getInst(target); if (_AN_Read_length("length", arguments) === 2 && typeof name === "string") { return (name === "defaults"? $.extend({ } , $.datepicker._defaults): (inst? (name === "all"? $.extend({ } , inst.settings): this._get(inst, name)): null )); } settings = name || { } ; if (typeof name === "string") { settings = { } ; settings[name] = value; } if (inst) { if (this._curInst === inst) { this._hideDatepicker(); } date = this._getDateDatepicker(target, true ); minDate = this._getMinMaxDate(inst, "min"); maxDate = this._getMinMaxDate(inst, "max"); datepicker_extendRemove(inst.settings, settings); if (minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined) { inst.settings.minDate = this._formatDate(inst, minDate); } if (maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined) { inst.settings.maxDate = this._formatDate(inst, maxDate); } if ("disabled" in settings) { if (settings.disabled) { this._disableDatepicker(target); } else { this._enableDatepicker(target); } } this._attachments($(target), inst); this._autoSize(inst); this._setDate(inst, date); this._updateAlternate(inst); this._updateDatepicker(inst); } } , _changeDatepicker: function (target, name, value){ this._optionDatepicker(target, name, value); } , _refreshDatepicker: function (target){ var inst = this._getInst(target); if (inst) { this._updateDatepicker(inst); } } , _setDateDatepicker: function (target, date){ var inst = this._getInst(target); if (inst) { this._setDate(inst, date); this._updateDatepicker(inst); this._updateAlternate(inst); } } , _getDateDatepicker: function (target, noDefault){ var inst = this._getInst(target); if (inst && !inst.inline) { this._setDateFromField(inst, noDefault); } return (inst? this._getDate(inst): null ); } , _doKeyDown: function (event){ var onSelect, dateStr, sel, inst = $.datepicker._getInst(_AN_Read_target("target", event)), handled = true , isRTL = inst.dpDiv.is(".ui-datepicker-rtl"); inst._keyEvent = true ; if ($.datepicker._datepickerShowing) { switch (event.keyCode){ case 9: $.datepicker._hideDatepicker(); handled = false ; break ; case 13: sel = $("td." + $.datepicker._dayOverClass + ":not(." + $.datepicker._currentClass + ")", inst.dpDiv); if (sel[0]) { $.datepicker._selectDay(_AN_Read_target("target", event), inst.selectedMonth, inst.selectedYear, sel[0]); } onSelect = $.datepicker._get(inst, "onSelect"); if (onSelect) { dateStr = $.datepicker._formatDate(inst); onSelect.apply((inst.input? inst.input[0]: null ), [dateStr, inst] ); } else { $.datepicker._hideDatepicker(); } return false ; case 27: $.datepicker._hideDatepicker(); break ; case 33: $.datepicker._adjustDate(_AN_Read_target("target", event), (event.ctrlKey? - $.datepicker._get(inst, "stepBigMonths"): - $.datepicker._get(inst, "stepMonths")), "M"); break ; case 34: $.datepicker._adjustDate(_AN_Read_target("target", event), (event.ctrlKey? + $.datepicker._get(inst, "stepBigMonths"): + $.datepicker._get(inst, "stepMonths")), "M"); break ; case 35: if (event.ctrlKey || event.metaKey) { $.datepicker._clearDate(_AN_Read_target("target", event)); } handled = event.ctrlKey || event.metaKey; break ; case 36: if (event.ctrlKey || event.metaKey) { $.datepicker._gotoToday(_AN_Read_target("target", event)); } handled = event.ctrlKey || event.metaKey; break ; case 37: if (event.ctrlKey || event.metaKey) { $.datepicker._adjustDate(_AN_Read_target("target", event), (isRTL? 1: -1), "D"); } handled = event.ctrlKey || event.metaKey; if (event.originalEvent.altKey) { $.datepicker._adjustDate(_AN_Read_target("target", event), (event.ctrlKey? - $.datepicker._get(inst, "stepBigMonths"): - $.datepicker._get(inst, "stepMonths")), "M"); } break ; case 38: if (event.ctrlKey || event.metaKey) { $.datepicker._adjustDate(_AN_Read_target("target", event), -7, "D"); } handled = event.ctrlKey || event.metaKey; break ; case 39: if (event.ctrlKey || event.metaKey) { $.datepicker._adjustDate(_AN_Read_target("target", event), (isRTL? -1: 1), "D"); } handled = event.ctrlKey || event.metaKey; if (event.originalEvent.altKey) { $.datepicker._adjustDate(_AN_Read_target("target", event), (event.ctrlKey? + $.datepicker._get(inst, "stepBigMonths"): + $.datepicker._get(inst, "stepMonths")), "M"); } break ; case 40: if (event.ctrlKey || event.metaKey) { $.datepicker._adjustDate(_AN_Read_target("target", event), 7, "D"); } handled = event.ctrlKey || event.metaKey; break ; default : { handled = false ; } } } else if (event.keyCode === 36 && event.ctrlKey) { $.datepicker._showDatepicker(this); } else { handled = false ; } if (handled) { event.preventDefault(); event.stopPropagation(); } } , _doKeyPress: function (event){ var chars, chr, inst = $.datepicker._getInst(_AN_Read_target("target", event)); if ($.datepicker._get(inst, "constrainInput")) { chars = $.datepicker._possibleChars($.datepicker._get(inst, "dateFormat")); chr = String.fromCharCode(event.charCode == null ? event.keyCode: event.charCode); return event.ctrlKey || event.metaKey || (chr < " " || !chars || chars.indexOf(chr) > -1); } } , _doKeyUp: function (event){ var date, inst = $.datepicker._getInst(_AN_Read_target("target", event)); if (inst.input.val() !== inst.lastVal) { try { date = $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"), (inst.input? inst.input.val(): null ), $.datepicker._getFormatConfig(inst)); if (date) { $.datepicker._setDateFromField(inst); $.datepicker._updateAlternate(inst); $.datepicker._updateDatepicker(inst); } } catch (err) { } } return true ; } , _showDatepicker: function (input){ input = _AN_Read_target("target", input) || input; if (input.nodeName.toLowerCase() !== "input") { input = $("input", input.parentNode)[0]; } if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput === input) { return ; } var inst, beforeShow, beforeShowSettings, isFixed, offset, showAnim, duration; inst = $.datepicker._getInst(input); if ($.datepicker._curInst && $.datepicker._curInst !== inst) { $.datepicker._curInst.dpDiv.stop(true , true ); if (inst && $.datepicker._datepickerShowing) { $.datepicker._hideDatepicker($.datepicker._curInst.input[0]); } } beforeShow = $.datepicker._get(inst, "beforeShow"); beforeShowSettings = beforeShow? beforeShow.apply(input, [input, inst] ): { } ; if (beforeShowSettings === false ) { return ; } datepicker_extendRemove(inst.settings, beforeShowSettings); inst.lastVal = null ; $.datepicker._lastInput = input; $.datepicker._setDateFromField(inst); if ($.datepicker._inDialog) { input.value = ""; } if (!$.datepicker._pos) { $.datepicker._pos = $.datepicker._findPos(input); $.datepicker._pos[1] += input.offsetHeight; } isFixed = false ; $(input).parents().each(function (){ isFixed |= $(this).css("position") === "fixed"; return !isFixed; } ); offset = { left: $.datepicker._pos[0], top: $.datepicker._pos[1]} ; $.datepicker._pos = null ; inst.dpDiv.empty(); inst.dpDiv.css({ position: "absolute", display: "block", top: "-1000px"} ); $.datepicker._updateDatepicker(inst); offset = $.datepicker._checkOffset(inst, offset, isFixed); inst.dpDiv.css({ position: ($.datepicker._inDialog && $.blockUI? "static": (isFixed? "fixed": "absolute")), display: "none", left: offset.left + "px", top: offset.top + "px"} ); if (!inst.inline) { showAnim = $.datepicker._get(inst, "showAnim"); duration = $.datepicker._get(inst, "duration"); inst.dpDiv.css("z-index", datepicker_getZindex($(input)) + 1); $.datepicker._datepickerShowing = true ; if ($.effects && $.effects.effect[showAnim]) { _AN_Call_show("show", inst.dpDiv, showAnim, $.datepicker._get(inst, "showOptions"), duration); } else { inst.dpDiv[showAnim || "show"](showAnim? duration: null ); } if ($.datepicker._shouldFocusInput(inst)) { inst.input.focus(); } $.datepicker._curInst = inst; } } , _updateDatepicker: function (inst){ this.maxRows = 4; datepicker_instActive = inst; inst.dpDiv.empty().append(this._generateHTML(inst)); this._attachHandlers(inst); var origyearshtml, numMonths = this._getNumberOfMonths(inst), cols = numMonths[1], width = 17, activeCell = inst.dpDiv.find("." + this._dayOverClass + " a"); if (_AN_Read_length("length", activeCell) > 0) { datepicker_handleMouseover.apply(activeCell.get(0)); } inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""); if (cols > 1) { inst.dpDiv.addClass("ui-datepicker-multi-" + cols).css("width", (width * cols) + "em"); } inst.dpDiv[(numMonths[0] !== 1 || numMonths[1] !== 1? "add": "remove") + "Class"]("ui-datepicker-multi"); inst.dpDiv[(this._get(inst, "isRTL")? "add": "remove") + "Class"]("ui-datepicker-rtl"); if (inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput(inst)) { inst.input.focus(); } if (inst.yearshtml) { origyearshtml = inst.yearshtml; _AN_Call_settimeout("setTimeout", window, function (){ if (origyearshtml === inst.yearshtml && inst.yearshtml) { inst.dpDiv.find("select.ui-datepicker-year:first").replaceWith(inst.yearshtml); } origyearshtml = inst.yearshtml = null ; } , 0); } } , _shouldFocusInput: function (inst){ return inst.input && inst.input.is(":visible") && !inst.input.is(":disabled") && !inst.input.is(":focus"); } , _checkOffset: function (inst, offset, isFixed){ var dpWidth = inst.dpDiv.outerWidth(), dpHeight = inst.dpDiv.outerHeight(), inputWidth = inst.input? inst.input.outerWidth(): 0, inputHeight = inst.input? inst.input.outerHeight(): 0, viewWidth = document.documentElement.clientWidth + (isFixed? 0: $(document).scrollLeft()), viewHeight = document.documentElement.clientHeight + (isFixed? 0: $(document).scrollTop()); offset.left -= (this._get(inst, "isRTL")? (dpWidth - inputWidth): 0); offset.left -= (isFixed && offset.left === inst.input.offset().left)? $(document).scrollLeft(): 0; offset.top -= (isFixed && offset.top === (inst.input.offset().top + inputHeight))? $(document).scrollTop(): 0; offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth)? Math.abs(offset.left + dpWidth - viewWidth): 0); offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight)? Math.abs(dpHeight + inputHeight): 0); return offset; } , _findPos: function (obj){ var position, inst = this._getInst(obj), isRTL = this._get(inst, "isRTL"); while (obj && (obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden(obj))){ obj = obj[isRTL? "previousSibling": "nextSibling"]; } position = $(obj).offset(); return [position.left, position.top] ; } , _hideDatepicker: function (input){ var showAnim, duration, postProcess, onClose, inst = this._curInst; if (!inst || (input && inst !== $.data(input, "datepicker"))) { return ; } if (this._datepickerShowing) { showAnim = this._get(inst, "showAnim"); duration = this._get(inst, "duration"); postProcess = function (){ $.datepicker._tidyDialog(inst); } ; if ($.effects && ($.effects.effect[showAnim] || $.effects[showAnim])) { inst.dpDiv.hide(showAnim, $.datepicker._get(inst, "showOptions"), duration, postProcess); } else { inst.dpDiv[(showAnim === "slideDown"? "slideUp": (showAnim === "fadeIn"? "fadeOut": "hide"))]((showAnim? duration: null ), postProcess); } if (!showAnim) { postProcess(); } this._datepickerShowing = false ; onClose = this._get(inst, "onClose"); if (onClose) { onClose.apply((inst.input? inst.input[0]: null ), [(inst.input? inst.input.val(): ""), inst] ); } this._lastInput = null ; if (this._inDialog) { this._dialogInput.css({ position: "absolute", left: "0", top: "-100px"} ); if ($.blockUI) { $.unblockUI(); $("body").append(this.dpDiv); } } this._inDialog = false ; } } , _tidyDialog: function (inst){ inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar"); } , _checkExternalClick: function (event){ if (!$.datepicker._curInst) { return ; } var $target = $(_AN_Read_target("target", event)), inst = $.datepicker._getInst($target[0]); if ((($target[0].id !== $.datepicker._mainDivId && _AN_Read_length("length", $target.parents("#" + $.datepicker._mainDivId)) === 0 && !$target.hasClass($.datepicker.markerClassName) && !_AN_Read_length("length", $target.closest("." + $.datepicker._triggerClass)) && $.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI))) || ($target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst !== inst)) { $.datepicker._hideDatepicker(); } } , _adjustDate: function (id, offset, period){ var target = $(id), inst = this._getInst(target[0]); if (this._isDisabledDatepicker(target[0])) { return ; } this._adjustInstDate(inst, offset + (period === "M"? this._get(inst, "showCurrentAtPos"): 0), period); this._updateDatepicker(inst); } , _gotoToday: function (id){ var date, target = $(id), inst = this._getInst(target[0]); if (this._get(inst, "gotoCurrent") && inst.currentDay) { inst.selectedDay = inst.currentDay; inst.drawMonth = inst.selectedMonth = inst.currentMonth; inst.drawYear = inst.selectedYear = inst.currentYear; } else { date = new Date(); inst.selectedDay = date.getDate(); inst.drawMonth = inst.selectedMonth = date.getMonth(); inst.drawYear = inst.selectedYear = date.getFullYear(); } this._notifyChange(inst); this._adjustDate(target); } , _selectMonthYear: function (id, select, period){ var target = $(id), inst = this._getInst(target[0]); inst["selected" + (period === "M"? "Month": "Year")] = inst["draw" + (period === "M"? "Month": "Year")] = parseInt(select.options[select.selectedIndex].value, 10); this._notifyChange(inst); this._adjustDate(target); } , _selectDay: function (id, month, year, td){ var inst, target = $(id); if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) { return ; } inst = this._getInst(target[0]); inst.selectedDay = inst.currentDay = $("a", td).html(); inst.selectedMonth = inst.currentMonth = month; inst.selectedYear = inst.currentYear = year; this._selectDate(id, this._formatDate(inst, inst.currentDay, inst.currentMonth, inst.currentYear)); } , _clearDate: function (id){ var target = $(id); this._selectDate(target, ""); } , _selectDate: function (id, dateStr){ var onSelect, target = $(id), inst = this._getInst(target[0]); dateStr = (dateStr != null ? dateStr: this._formatDate(inst)); if (inst.input) { inst.input.val(dateStr); } this._updateAlternate(inst); onSelect = this._get(inst, "onSelect"); if (onSelect) { onSelect.apply((inst.input? inst.input[0]: null ), [dateStr, inst] ); } else if (inst.input) { inst.input.trigger("change"); } if (inst.inline) { this._updateDatepicker(inst); } else { this._hideDatepicker(); this._lastInput = inst.input[0]; if (typeof (inst.input[0]) !== "object") { inst.input.focus(); } this._lastInput = null ; } } , _updateAlternate: function (inst){ var altFormat, date, dateStr, altField = this._get(inst, "altField"); if (altField) { altFormat = this._get(inst, "altFormat") || this._get(inst, "dateFormat"); date = this._getDate(inst); dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst)); $(altField).each(function (){ $(this).val(dateStr); } ); } } , noWeekends: function (date){ var day = date.getDay(); return [(day > 0 && day < 6), ""] ; } , iso8601Week: function (date){ var time, checkDate = new Date(date.getTime()); checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); time = checkDate.getTime(); checkDate.setMonth(0); checkDate.setDate(1); return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1; } , parseDate: function (format, value, settings){ if (format == null || value == null ) { throw "Invalid arguments" } value = (typeof value === "object"? value.toString(): value + ""); if (value === "") { return null ; } var iFormat, dim, extra, iValue = 0, shortYearCutoffTemp = (settings? settings.shortYearCutoff: null ) || this._defaults.shortYearCutoff, shortYearCutoff = (typeof shortYearCutoffTemp !== "string"? shortYearCutoffTemp: new Date().getFullYear() % 100 + parseInt(shortYearCutoffTemp, 10)), dayNamesShort = (settings? settings.dayNamesShort: null ) || this._defaults.dayNamesShort, dayNames = (settings? settings.dayNames: null ) || this._defaults.dayNames, monthNamesShort = (settings? settings.monthNamesShort: null ) || this._defaults.monthNamesShort, monthNames = (settings? settings.monthNames: null ) || this._defaults.monthNames, year = -1, month = -1, day = -1, doy = -1, literal = false , date, lookAhead = function (match){ var matches = (iFormat + 1 < _AN_Read_length("length", format) && format.charAt(iFormat + 1) === match); if (matches) { iFormat++ ; } return matches; } , getNumber = function (match){ var isDoubled = lookAhead(match), size = (match === "@"? 14: (match === "!"? 20: (match === "y" && isDoubled? 4: (match === "o"? 3: 2)))), minSize = (match === "y"? size: 1), digits = new RegExp("^\\d{" + minSize + "," + size + "}"), num = value.substring(iValue).match(digits); if (!num) { throw "Missing number at position " + iValue } iValue += _AN_Read_length("length", num[0]); return parseInt(num[0], 10); } , getName = function (match, shortNames, longNames){ var index = -1, names = $.map(lookAhead(match)? longNames: shortNames, function (v, k){ return [[k, v] ] ; } ).sort(function (a, b){ return - (_AN_Read_length("length", a[1]) - _AN_Read_length("length", b[1])); } ); $.each(names, function (i, pair){ var name = pair[1]; if (value.substr(iValue, _AN_Read_length("length", name)).toLowerCase() === name.toLowerCase()) { index = pair[0]; iValue += _AN_Read_length("length", name); return false ; } } ); if (index !== -1) { return index + 1; } else { throw "Unknown name at position " + iValue } } , checkLiteral = function (){ if (value.charAt(iValue) !== format.charAt(iFormat)) { throw "Unexpected literal at position " + iValue } iValue++ ; } ; for (iFormat = 0; iFormat < _AN_Read_length("length", format); iFormat++ ){ if (literal) { if (format.charAt(iFormat) === "'" && !lookAhead("'")) { literal = false ; } else { checkLiteral(); } } else { switch (format.charAt(iFormat)){ case "d": day = getNumber("d"); break ; case "D": getName("D", dayNamesShort, dayNames); break ; case "o": doy = getNumber("o"); break ; case "m": month = getNumber("m"); break ; case "M": month = getName("M", monthNamesShort, monthNames); break ; case "y": year = getNumber("y"); break ; case "@": date = new Date(getNumber("@")); year = date.getFullYear(); month = date.getMonth() + 1; day = date.getDate(); break ; case "!": date = new Date((getNumber("!") - this._ticksTo1970) / 10000); year = date.getFullYear(); month = date.getMonth() + 1; day = date.getDate(); break ; case "'": if (lookAhead("'")) { checkLiteral(); } else { literal = true ; } break ; default : { checkLiteral(); } } } } if (iValue < _AN_Read_length("length", value)) { extra = value.substr(iValue); if (!/^\s+/.test(extra)) { throw "Extra/unparsed characters found in date: " + extra } } if (year === -1) { year = new Date().getFullYear(); } else if (year < 100) { year += new Date().getFullYear() - new Date().getFullYear() % 100 + (year <= shortYearCutoff? 0: -100); } if (doy > -1) { month = 1; day = doy; do { dim = this._getDaysInMonth(year, month - 1); if (day <= dim) { break ; } month++ ; day -= dim; } while(true )} date = this._daylightSavingAdjust(new Date(year, month - 1, day)); if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) { throw "Invalid date" } return date; } , ATOM: "yy-mm-dd", COOKIE: "D, dd M yy", ISO_8601: "yy-mm-dd", RFC_822: "D, d M y", RFC_850: "DD, dd-M-y", RFC_1036: "D, d M y", RFC_1123: "D, d M yy", RFC_2822: "D, d M yy", RSS: "D, d M y", TICKS: "!", TIMESTAMP: "@", W3C: "yy-mm-dd", _ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) + Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000), formatDate: function (format, date, settings){ if (!date) { return ""; } var iFormat, dayNamesShort = (settings? settings.dayNamesShort: null ) || this._defaults.dayNamesShort, dayNames = (settings? settings.dayNames: null ) || this._defaults.dayNames, monthNamesShort = (settings? settings.monthNamesShort: null ) || this._defaults.monthNamesShort, monthNames = (settings? settings.monthNames: null ) || this._defaults.monthNames, lookAhead = function (match){ var matches = (iFormat + 1 < _AN_Read_length("length", format) && format.charAt(iFormat + 1) === match); if (matches) { iFormat++ ; } return matches; } , formatNumber = function (match, value, len){ var num = "" + value; if (lookAhead(match)) { while (_AN_Read_length("length", num) < len){ num = "0" + num; } } return num; } , formatName = function (match, value, shortNames, longNames){ return (lookAhead(match)? longNames[value]: shortNames[value]); } , output = "", literal = false ; if (date) { for (iFormat = 0; iFormat < _AN_Read_length("length", format); iFormat++ ){ if (literal) { if (format.charAt(iFormat) === "'" && !lookAhead("'")) { literal = false ; } else { output += format.charAt(iFormat); } } else { switch (format.charAt(iFormat)){ case "d": output += formatNumber("d", date.getDate(), 2); break ; case "D": output += formatName("D", date.getDay(), dayNamesShort, dayNames); break ; case "o": output += formatNumber("o", Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3); break ; case "m": output += formatNumber("m", date.getMonth() + 1, 2); break ; case "M": output += formatName("M", date.getMonth(), monthNamesShort, monthNames); break ; case "y": output += (lookAhead("y")? date.getFullYear(): (date.getYear() % 100 < 10? "0": "") + date.getYear() % 100); break ; case "@": output += date.getTime(); break ; case "!": output += date.getTime() * 10000 + this._ticksTo1970; break ; case "'": if (lookAhead("'")) { output += "'"; } else { literal = true ; } break ; default : { output += format.charAt(iFormat); } } } } } return output; } , _possibleChars: function (format){ var iFormat, chars = "", literal = false , lookAhead = function (match){ var matches = (iFormat + 1 < _AN_Read_length("length", format) && format.charAt(iFormat + 1) === match); if (matches) { iFormat++ ; } return matches; } ; for (iFormat = 0; iFormat < _AN_Read_length("length", format); iFormat++ ){ if (literal) { if (format.charAt(iFormat) === "'" && !lookAhead("'")) { literal = false ; } else { chars += format.charAt(iFormat); } } else { switch (format.charAt(iFormat)){ case "d": case "m": case "y": case "@": chars += "0123456789"; break ; case "D": case "M": return null ; case "'": if (lookAhead("'")) { chars += "'"; } else { literal = true ; } break ; default : { chars += format.charAt(iFormat); } } } } return chars; } , _get: function (inst, name){ return inst.settings[name] !== undefined? inst.settings[name]: this._defaults[name]; } , _setDateFromField: function (inst, noDefault){ if (inst.input.val() === inst.lastVal) { return ; } var dateFormat = this._get(inst, "dateFormat"), dates = inst.lastVal = inst.input? inst.input.val(): null , defaultDate = this._getDefaultDate(inst), date = defaultDate, settings = this._getFormatConfig(inst); try { date = this.parseDate(dateFormat, dates, settings) || defaultDate; } catch (event) { dates = (noDefault? "": dates); } inst.selectedDay = date.getDate(); inst.drawMonth = inst.selectedMonth = date.getMonth(); inst.drawYear = inst.selectedYear = date.getFullYear(); inst.currentDay = (dates? date.getDate(): 0); inst.currentMonth = (dates? date.getMonth(): 0); inst.currentYear = (dates? date.getFullYear(): 0); this._adjustInstDate(inst); } , _getDefaultDate: function (inst){ return this._restrictMinMax(inst, this._determineDate(inst, this._get(inst, "defaultDate"), new Date())); } , _determineDate: function (inst, date, defaultDate){ var offsetNumeric = function (offset){ var date = new Date(); date.setDate(date.getDate() + offset); return date; } , offsetString = function (offset){ try { return $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"), offset, $.datepicker._getFormatConfig(inst)); } catch (e) { } var date = (offset.toLowerCase().match(/^c/)? $.datepicker._getDate(inst): null ) || new Date(), year = date.getFullYear(), month = date.getMonth(), day = date.getDate(), pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g, matches = pattern.exec(offset); while (matches){ switch (matches[2] || "d"){ case "d": case "D": day += parseInt(matches[1], 10); break ; case "w": case "W": day += parseInt(matches[1], 10) * 7; break ; case "m": case "M": month += parseInt(matches[1], 10); day = Math.min(day, $.datepicker._getDaysInMonth(year, month)); break ; case "y": case "Y": year += parseInt(matches[1], 10); day = Math.min(day, $.datepicker._getDaysInMonth(year, month)); break ; } matches = pattern.exec(offset); } return new Date(year, month, day); } , newDate = (date == null || date === ""? defaultDate: (typeof date === "string"? offsetString(date): (typeof date === "number"? (isNaN(date)? defaultDate: offsetNumeric(date)): new Date(date.getTime())))); newDate = (newDate && newDate.toString() === "Invalid Date"? defaultDate: newDate); if (newDate) { newDate.setHours(0); newDate.setMinutes(0); newDate.setSeconds(0); newDate.setMilliseconds(0); } return this._daylightSavingAdjust(newDate); } , _daylightSavingAdjust: function (date){ if (!date) { return null ; } date.setHours(date.getHours() > 12? date.getHours() + 2: 0); return date; } , _setDate: function (inst, date, noChange){ var clear = !date, origMonth = inst.selectedMonth, origYear = inst.selectedYear, newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date())); inst.selectedDay = inst.currentDay = newDate.getDate(); inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth(); inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear(); if ((origMonth !== inst.selectedMonth || origYear !== inst.selectedYear) && !noChange) { this._notifyChange(inst); } this._adjustInstDate(inst); if (inst.input) { inst.input.val(clear? "": this._formatDate(inst)); } } , _getDate: function (inst){ var startDate = (!inst.currentYear || (inst.input && inst.input.val() === "")? null : this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); return startDate; } , _attachHandlers: function (inst){ var stepMonths = this._get(inst, "stepMonths"), id = "#" + _AN_Call_replace("replace", inst.id, /\\\\/g, "\\"); inst.dpDiv.find("[data-handler]").map(function (){ var handler = { prev: function (){ $.datepicker._adjustDate(id, - stepMonths, "M"); } , next: function (){ $.datepicker._adjustDate(id, + stepMonths, "M"); } , hide: function (){ $.datepicker._hideDatepicker(); } , today: function (){ $.datepicker._gotoToday(id); } , selectDay: function (){ $.datepicker._selectDay(id, + _AN_Call_getattribute("getAttribute", this, "data-month"), + _AN_Call_getattribute("getAttribute", this, "data-year"), this); return false ; } , selectMonth: function (){ $.datepicker._selectMonthYear(id, this, "M"); return false ; } , selectYear: function (){ $.datepicker._selectMonthYear(id, this, "Y"); return false ; } } ; $(this).bind(_AN_Call_getattribute("getAttribute", this, "data-event"), handler[_AN_Call_getattribute("getAttribute", this, "data-handler")]); } ); } , _generateHTML: function (inst){ var maxDraw, prevText, prev, nextText, next, currentText, gotoDate, controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin, monthNames, monthNamesShort, beforeShowDay, showOtherMonths, selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate, cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows, printDate, dRow, tbody, daySettings, otherMonth, unselectable, tempDate = new Date(), today = this._daylightSavingAdjust(new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate())), isRTL = this._get(inst, "isRTL"), showButtonPanel = this._get(inst, "showButtonPanel"), hideIfNoPrevNext = this._get(inst, "hideIfNoPrevNext"), navigationAsDateFormat = this._get(inst, "navigationAsDateFormat"), numMonths = this._getNumberOfMonths(inst), showCurrentAtPos = this._get(inst, "showCurrentAtPos"), stepMonths = this._get(inst, "stepMonths"), isMultiMonth = (numMonths[0] !== 1 || numMonths[1] !== 1), currentDate = this._daylightSavingAdjust((!inst.currentDay? new Date(9999, 9, 9): new Date(inst.currentYear, inst.currentMonth, inst.currentDay))), minDate = this._getMinMaxDate(inst, "min"), maxDate = this._getMinMaxDate(inst, "max"), drawMonth = inst.drawMonth - showCurrentAtPos, drawYear = inst.drawYear; if (drawMonth < 0) { drawMonth += 12; drawYear-- ; } if (maxDate) { maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(), maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate())); maxDraw = (minDate && maxDraw < minDate? minDate: maxDraw); while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw){ drawMonth-- ; if (drawMonth < 0) { drawMonth = 11; drawYear-- ; } } } inst.drawMonth = drawMonth; inst.drawYear = drawYear; prevText = this._get(inst, "prevText"); prevText = (!navigationAsDateFormat? prevText: this.formatDate(prevText, this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)), this._getFormatConfig(inst))); prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth)? "" + prevText + "": (hideIfNoPrevNext? "": "" + prevText + "")); nextText = this._get(inst, "nextText"); nextText = (!navigationAsDateFormat? nextText: this.formatDate(nextText, this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)), this._getFormatConfig(inst))); next = (this._canAdjustMonth(inst, 1, drawYear, drawMonth)? "" + nextText + "": (hideIfNoPrevNext? "": "" + nextText + "")); currentText = this._get(inst, "currentText"); gotoDate = (this._get(inst, "gotoCurrent") && inst.currentDay? currentDate: today); currentText = (!navigationAsDateFormat? currentText: this.formatDate(currentText, gotoDate, this._getFormatConfig(inst))); controls = (!inst.inline? "": ""); buttonPanel = (showButtonPanel)? "
" + (isRTL? controls: "") + (this._isInRange(inst, gotoDate)? "": "") + (isRTL? "": controls) + "
": ""; firstDay = parseInt(this._get(inst, "firstDay"), 10); firstDay = (isNaN(firstDay)? 0: firstDay); showWeek = this._get(inst, "showWeek"); dayNames = this._get(inst, "dayNames"); dayNamesMin = this._get(inst, "dayNamesMin"); monthNames = this._get(inst, "monthNames"); monthNamesShort = this._get(inst, "monthNamesShort"); beforeShowDay = this._get(inst, "beforeShowDay"); showOtherMonths = this._get(inst, "showOtherMonths"); selectOtherMonths = this._get(inst, "selectOtherMonths"); defaultDate = this._getDefaultDate(inst); html = ""; dow; for (row = 0; row < numMonths[0]; row++ ){ group = ""; this.maxRows = 4; for (col = 0; col < numMonths[1]; col++ ){ selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay)); cornerClass = " ui-corner-all"; calender = ""; if (isMultiMonth) { calender += "
"; } calender += "
" + (/all|left/.test(cornerClass) && row === 0? (isRTL? next: prev): "") + (/all|right/.test(cornerClass) && row === 0? (isRTL? prev: next): "") + this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate, row > 0 || col > 0, monthNames, monthNamesShort) + "
" + ""; thead = (showWeek? "": ""); for (dow = 0; dow < 7; dow++ ){ day = (dow + firstDay) % 7; thead += ""; } calender += thead + ""; daysInMonth = this._getDaysInMonth(drawYear, drawMonth); if (drawYear === inst.selectedYear && drawMonth === inst.selectedMonth) { inst.selectedDay = Math.min(inst.selectedDay, daysInMonth); } leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7; curRows = Math.ceil((leadDays + daysInMonth) / 7); numRows = (isMultiMonth? this.maxRows > curRows? this.maxRows: curRows: curRows); this.maxRows = numRows; printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays)); for (dRow = 0; dRow < numRows; dRow++ ){ calender += ""; tbody = (!showWeek? "": ""); for (dow = 0; dow < 7; dow++ ){ daySettings = (beforeShowDay? beforeShowDay.apply((inst.input? inst.input[0]: null ), [printDate] ): [true , ""] ); otherMonth = (printDate.getMonth() !== drawMonth); unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] || (minDate && printDate < minDate) || (maxDate && printDate > maxDate); tbody += ""; printDate.setDate(printDate.getDate() + 1); printDate = this._daylightSavingAdjust(printDate); } calender += tbody + ""; } drawMonth++ ; if (drawMonth > 11) { drawMonth = 0; drawYear++ ; } calender += "
" + this._get(inst, "weekHeader") + "= 5? " class='ui-datepicker-week-end'": "") + ">" + "" + dayNamesMin[day] + "
" + this._get(inst, "calculateWeek")(printDate) + "" + (otherMonth && !showOtherMonths? " ": (unselectable? "" + printDate.getDate() + "": "" + printDate.getDate() + "")) + "
" + (isMultiMonth? "
" + ((numMonths[0] > 0 && col === numMonths[1] - 1)? "
": ""): ""); group += calender; } html += group; } html += buttonPanel; inst._keyEvent = false ; return html; } , _generateMonthYearHeader: function (inst, drawMonth, drawYear, minDate, maxDate, secondary, monthNames, monthNamesShort){ var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear, changeMonth = this._get(inst, "changeMonth"), changeYear = this._get(inst, "changeYear"), showMonthAfterYear = this._get(inst, "showMonthAfterYear"), html = "
", monthHtml = ""; if (secondary || !changeMonth) { monthHtml += "" + monthNames[drawMonth] + ""; } else { inMinYear = (minDate && minDate.getFullYear() === drawYear); inMaxYear = (maxDate && maxDate.getFullYear() === drawYear); monthHtml += ""; } if (!showMonthAfterYear) { html += monthHtml + (secondary || !(changeMonth && changeYear)? " ": ""); } if (!inst.yearshtml) { inst.yearshtml = ""; if (secondary || !changeYear) { html += "" + drawYear + ""; } else { years = this._get(inst, "yearRange").split(":"); thisYear = new Date().getFullYear(); determineYear = function (value){ var year = (value.match(/c[+\-].*/)? drawYear + parseInt(value.substring(1), 10): (value.match(/[+\-].*/)? thisYear + parseInt(value, 10): parseInt(value, 10))); return (isNaN(year)? thisYear: year); } ; year = determineYear(years[0]); endYear = Math.max(year, determineYear(years[1] || "")); year = (minDate? Math.max(year, minDate.getFullYear()): year); endYear = (maxDate? Math.min(endYear, maxDate.getFullYear()): endYear); inst.yearshtml += ""; html += inst.yearshtml; inst.yearshtml = null ; } } html += this._get(inst, "yearSuffix"); if (showMonthAfterYear) { html += (secondary || !(changeMonth && changeYear)? " ": "") + monthHtml; } html += "
"; return html; } , _adjustInstDate: function (inst, offset, period){ var year = inst.drawYear + (period === "Y"? offset: 0), month = inst.drawMonth + (period === "M"? offset: 0), day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period === "D"? offset: 0), date = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day))); inst.selectedDay = date.getDate(); inst.drawMonth = inst.selectedMonth = date.getMonth(); inst.drawYear = inst.selectedYear = date.getFullYear(); if (period === "M" || period === "Y") { this._notifyChange(inst); } } , _restrictMinMax: function (inst, date){ var minDate = this._getMinMaxDate(inst, "min"), maxDate = this._getMinMaxDate(inst, "max"), newDate = (minDate && date < minDate? minDate: date); return (maxDate && newDate > maxDate? maxDate: newDate); } , _notifyChange: function (inst){ var onChange = this._get(inst, "onChangeMonthYear"); if (onChange) { onChange.apply((inst.input? inst.input[0]: null ), [inst.selectedYear, inst.selectedMonth + 1, inst] ); } } , _getNumberOfMonths: function (inst){ var numMonths = this._get(inst, "numberOfMonths"); return (numMonths == null ? [1, 1] : (typeof numMonths === "number"? [1, numMonths] : numMonths)); } , _getMinMaxDate: function (inst, minMax){ return this._determineDate(inst, this._get(inst, minMax + "Date"), null ); } , _getDaysInMonth: function (year, month){ return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate(); } , _getFirstDayOfMonth: function (year, month){ return new Date(year, month, 1).getDay(); } , _canAdjustMonth: function (inst, offset, curYear, curMonth){ var numMonths = this._getNumberOfMonths(inst), date = this._daylightSavingAdjust(new Date(curYear, curMonth + (offset < 0? offset: numMonths[0] * numMonths[1]), 1)); if (offset < 0) { date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth())); } return this._isInRange(inst, date); } , _isInRange: function (inst, date){ var yearSplit, currentYear, minDate = this._getMinMaxDate(inst, "min"), maxDate = this._getMinMaxDate(inst, "max"), minYear = null , maxYear = null , years = this._get(inst, "yearRange"); if (years) { yearSplit = years.split(":"); currentYear = new Date().getFullYear(); minYear = parseInt(yearSplit[0], 10); maxYear = parseInt(yearSplit[1], 10); if (yearSplit[0].match(/[+\-].*/)) { minYear += currentYear; } if (yearSplit[1].match(/[+\-].*/)) { maxYear += currentYear; } } return ((!minDate || date.getTime() >= minDate.getTime()) && (!maxDate || date.getTime() <= maxDate.getTime()) && (!minYear || date.getFullYear() >= minYear) && (!maxYear || date.getFullYear() <= maxYear)); } , _getFormatConfig: function (inst){ var shortYearCutoff = this._get(inst, "shortYearCutoff"); shortYearCutoff = (typeof shortYearCutoff !== "string"? shortYearCutoff: new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); return { shortYearCutoff: shortYearCutoff, dayNamesShort: this._get(inst, "dayNamesShort"), dayNames: this._get(inst, "dayNames"), monthNamesShort: this._get(inst, "monthNamesShort"), monthNames: this._get(inst, "monthNames")} ; } , _formatDate: function (inst, day, month, year){ if (!day) { inst.currentDay = inst.selectedDay; inst.currentMonth = inst.selectedMonth; inst.currentYear = inst.selectedYear; } var date = (day? (typeof day === "object"? day: this._daylightSavingAdjust(new Date(year, month, day))): this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); return this.formatDate(this._get(inst, "dateFormat"), date, this._getFormatConfig(inst)); } } ); function datepicker_bindHover(dpDiv){ var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a"; return dpDiv.delegate(selector, "mouseout", function (){ $(this).removeClass("ui-state-hover"); if (this.className.indexOf("ui-datepicker-prev") !== -1) { $(this).removeClass("ui-datepicker-prev-hover"); } if (this.className.indexOf("ui-datepicker-next") !== -1) { $(this).removeClass("ui-datepicker-next-hover"); } } ).delegate(selector, "mouseover", datepicker_handleMouseover); } function datepicker_handleMouseover(){ if (!$.datepicker._isDisabledDatepicker(datepicker_instActive.inline? datepicker_instActive.dpDiv.parent()[0]: datepicker_instActive.input[0])) { $(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"); $(this).addClass("ui-state-hover"); if (this.className.indexOf("ui-datepicker-prev") !== -1) { $(this).addClass("ui-datepicker-prev-hover"); } if (this.className.indexOf("ui-datepicker-next") !== -1) { $(this).addClass("ui-datepicker-next-hover"); } } } function datepicker_extendRemove(target, props){ $.extend(target, props); for (var name in props){ if (props[name] == null ) { target[name] = props[name]; } } return target; } $.fn.datepicker = function (options){ if (!_AN_Read_length("length", this)) { return this; } if (!$.datepicker.initialized) { $(document).mousedown($.datepicker._checkExternalClick); $.datepicker.initialized = true ; } if (_AN_Read_length("length", $("#" + $.datepicker._mainDivId)) === 0) { $("body").append($.datepicker.dpDiv); } var otherArgs = Array.prototype.slice.call(arguments, 1); if (typeof options === "string" && (options === "isDisabled" || options === "getDate" || options === "widget")) { return $.datepicker["_" + options + "Datepicker"].apply($.datepicker, [this[0]] .concat(otherArgs)); } if (options === "option" && _AN_Read_length("length", arguments) === 2 && typeof arguments[1] === "string") { return $.datepicker["_" + options + "Datepicker"].apply($.datepicker, [this[0]] .concat(otherArgs)); } return this.each(function (){ typeof options === "string"? $.datepicker["_" + options + "Datepicker"].apply($.datepicker, [this] .concat(otherArgs)): $.datepicker._attachDatepicker(this, options); } ); } ; $.datepicker = new Datepicker(); $.datepicker.initialized = false ; $.datepicker.uuid = new Date().getTime(); $.datepicker.version = "@VERSION"; return $.datepicker; } ));