{"version":3,"sources":["kendo.calendar.js"],"names":["f","define","$","undefined","title","date","min","max","modular","end","start","getFullYear","minYear","maxYear","view","options","data","idx","setter","build","weekNumberBuild","length","cells","isWeekColumnVisible","cellsPerRow","perRow","otherMonth","lastDayOfMonth","weekNumber","weekNumberTemplate","content","cellTemplate","empty","emptyCellTemplate","otherMonthTemplate","otherMonthCellTemplate","html","createDate","getMonth","getDate","adjustDST","disableDates","cssClass","indexOf","OTHERMONTH","isInRange","compare","date1","date2","modifier","year1","result","getToday","today","DATE","restrictValue","value","shiftArray","array","slice","concat","setDate","multiplier","setFullYear","daysBetweenTwoDates","startDate","endDate","temp","fromDateUTC","endDateUTC","calendar","views","Date","UTC","Math","ceil","kendo","MS_PER_DAY","addDaysToArray","numberOfDays","fromDate","i","nextDay","getTime","push","mousetoggle","e","disabled","this","hasClass","toggleClass","HOVER","MOUSEENTER","type","FOCUS","prevent","preventDefault","year","month","dateObject","getCalendarInfo","culture","getCulture","calendars","standard","normalize","depth","format","extractFormat","patterns","d","isNaN","MONTH","dates","addClassToViewContainer","element","currentView","addClass","inArray","isEqualDatePart","value1","value2","isEqualMonth","getDisabledExpr","option","isFunction","isArray","createDisabledExpr","noop","convertDatesArray","setHours","body","callback","day","index","disabledDates","days","searchExpression","toLowerCase","Function","isEqualDate","oldValue","newValue","toDateObject","link","attr","VALUE","split","window","support","ui","Widget","keys","parse","parseDate","weekInYear","Selectable","_extractFormat","template","transitions","transitionOrigin","css","useWithBlock","outerWidth","_outerWidth","ns","CLICK","KEYDOWN_NS","ID","MIN","LEFT","SLIDE","CENTURY","CHANGE","NAVIGATE","DISABLED","FOCUSED","OUTOFRANGE","TODAY","CELLSELECTOR","CELLSELECTORVALID","WEEKCOLUMNSELECTOR","SELECTED","BLUR","FOCUS_WITH_NS","touch","MOUSEENTER_WITH_NS","MOUSELEAVE","MS_PER_MINUTE","PREVARROW","NEXTARROW","ARIA_DISABLED","ARIA_SELECTED","ARIA_LABEL","proxy","extend","decade","century","HEADERSELECTOR","CLASSIC_HEADER_TEMPLATE","MODERN_HEADER_TEMPLATE","Calendar","init","id","that","componentType","fn","call","wrapper","url","unescape","_templates","_selectable","_header","_viewWrapper","hasFooter","_footer","footer","_today","find","_toggle","on","_move","currentTarget","firstChild","href","_view","name","selectable","_click","_focusView","focusOnNav","_isMultipleSelection","first","closest","last","_lastActive","selectRange","event","_current","_value","_setCurrent","_selectDates","_index","_addClassProxy","_active","_cell","todayString","toDateString","_cellByDate","_removeClassProxy","removeClass","selectDates","notify","animation","horizontal","effects","reverse","duration","divisor","vertical","messages","weekColumnHeader","events","componentTypes","classic","header","linksSelector","contentClasses","modern","setOptions","_destroySelectable","hide","navigate","destroy","off","_title","_table","current","focus","table","_bindTable","trigger","_option","navigateToPast","_navigate","navigateToFuture","navigateUp","navigateDown","from","old","currentValue","future","to","viewWrapper","replace","_oldTable","children","kendoStop","_changeView","_animate","_focus","_visualizeSelectedDatesInView","_selectCell","validSelectedDates","datesUnique","map","filter","position","time","grep","_validateValue","selectedDates","each","clear","_selectElement","selectableOptions","parseOptions","multiple","aria","inputSelectors","change","_onSelect","relatedTarget","_onRelatedTarget","target","is","eventArgs","ctrlKey","metaKey","_toggleSelection","_cellsBySelector","_deselect","_addSelectedCellsToArray","shiftKey","_rangeSelection","currentCell","toDateCell","daysDifference","toDate","selector","item","currentDateIndex","Number","splice","_dateInView","firstDateInView","lastDateInView","_isNavigatable","cellIndex","cell","isDisabled","method","focusedDate","key","keyCode","isRtl","RIGHT","UP","DOWN","SPACEBAR","HOME","END","getHours","getMinutes","getSeconds","getMilliseconds","ENTER","_keyboardToggleSelection","_nextNavigatable","_keyboardRangeSelection","PAGEUP","PAGEDOWN","_unselect","navigatableDate","active","parent","remove","append","insertAfter","_horizontal","viewWidth","add","width","wrap","float","margin-left","complete","unwrap","kendoAnimate","_vertical","insertBefore","left","parseInt","top","height","_selectedCell","removeAttribute","guid","appendTo","show","toString","actionAttr","_todayClick","arrow","firstDayCurrentMonth","has","isBigger","toggle","isTodayDisabled","todayClass","_todayClass","footerTemplate","_updateAria","ariaTemplate","text","valueType","plugin","firstDayOfMonth","firstVisibleDay","calendarInfo","firstDay","getDay","setTime","tzOffsetBefore","getTimezoneOffset","resultDATE","tzOffsetDiff","months","names","navigateUrl","showHeader","hasUrl","currentCalendar","firstDayIdx","shortNames","namesShort","linkClass","dateString","join","currentDate","timeOffset","abs","month1","month2","year2","hours","namesAbbr","setMonth","viewsEnum","jQuery","amd","a1","a2","a3"],"mappings":"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","file":"kendo.calendar.min.js","sourcesContent":["/*!\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n*/\n(function (f, define) {\n define('kendo.calendar', [\n 'kendo.core',\n 'kendo.selectable'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'calendar',\n name: 'Calendar',\n category: 'web',\n description: 'The Calendar widget renders a graphical calendar that supports navigation and selection.',\n depends: [\n 'core',\n 'selectable'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, ui = kendo.ui, Widget = ui.Widget, keys = kendo.keys, parse = kendo.parseDate, adjustDST = kendo.date.adjustDST, weekInYear = kendo.date.weekInYear, Selectable = kendo.ui.Selectable, extractFormat = kendo._extractFormat, template = kendo.template, getCulture = kendo.getCulture, transitions = kendo.support.transitions, transitionOrigin = transitions ? transitions.css + 'transform-origin' : '', cellTemplate = template('#=data.value#', { useWithBlock: false }), emptyCellTemplate = template('', { useWithBlock: false }), otherMonthCellTemplate = template(' ', { useWithBlock: false }), weekNumberTemplate = template('#= data.weekNumber #', { useWithBlock: false }), outerWidth = kendo._outerWidth, ns = '.kendoCalendar', CLICK = 'click' + ns, KEYDOWN_NS = 'keydown' + ns, ID = 'id', MIN = 'min', LEFT = 'left', SLIDE = 'slideIn', MONTH = 'month', CENTURY = 'century', CHANGE = 'change', NAVIGATE = 'navigate', VALUE = 'value', HOVER = 'k-state-hover', DISABLED = 'k-state-disabled', FOCUSED = 'k-state-focused', OTHERMONTH = 'k-other-month', OUTOFRANGE = 'k-out-of-range', TODAY = 'k-nav-today', CELLSELECTOR = 'td:has(.k-link)', CELLSELECTORVALID = 'td:has(.k-link):not(.' + DISABLED + '):not(.' + OUTOFRANGE + ')', WEEKCOLUMNSELECTOR = 'td:not(:has(.k-link))', SELECTED = 'k-state-selected', BLUR = 'blur' + ns, FOCUS = 'focus', FOCUS_WITH_NS = FOCUS + ns, MOUSEENTER = support.touch ? 'touchstart' : 'mouseenter', MOUSEENTER_WITH_NS = support.touch ? 'touchstart' + ns : 'mouseenter' + ns, MOUSELEAVE = support.touch ? 'touchend' + ns + ' touchmove' + ns : 'mouseleave' + ns, MS_PER_MINUTE = 60000, MS_PER_DAY = 86400000, PREVARROW = '_prevArrow', NEXTARROW = '_nextArrow', ARIA_DISABLED = 'aria-disabled', ARIA_SELECTED = 'aria-selected', ARIA_LABEL = 'aria-label', proxy = $.proxy, extend = $.extend, DATE = Date, views = {\n month: 0,\n year: 1,\n decade: 2,\n century: 3\n }, HEADERSELECTOR = '.k-header, .k-calendar-header', CLASSIC_HEADER_TEMPLATE = '
' + '' + '' + '' + '
', MODERN_HEADER_TEMPLATE = '
' + '' + '' + '' + '' + '' + '' + '#=messages.today#' + '' + '' + '' + '' + '
';\n var Calendar = Widget.extend({\n init: function (element, options) {\n var that = this, value, id;\n options = options || {};\n options.componentType = options.componentType || 'classic';\n Widget.fn.init.call(that, element, options);\n element = that.wrapper = that.element;\n options = that.options;\n options.url = kendo.unescape(options.url);\n that.options.disableDates = getDisabledExpr(that.options.disableDates);\n that._templates();\n that._selectable();\n that._header();\n that._viewWrapper();\n if (that.options.hasFooter) {\n that._footer(that.footer);\n } else {\n that._today = that.element.find('a.k-nav-today');\n that._toggle();\n }\n id = element.addClass('k-widget k-calendar ' + (options.weekNumber ? ' k-week-number' : '')).on(MOUSEENTER_WITH_NS + ' ' + MOUSELEAVE, CELLSELECTOR, mousetoggle).on(KEYDOWN_NS, 'table.k-content', proxy(that._move, that)).on(CLICK + ' touchend', CELLSELECTOR, function (e) {\n var link = e.currentTarget.firstChild, value = toDateObject(link);\n if (link.href.indexOf('#') != -1) {\n e.preventDefault();\n }\n if (that._view.name == 'month' && that.options.disableDates(value)) {\n return;\n }\n if (that._view.name != 'month' || options.selectable == 'single') {\n that._click($(link));\n }\n }).on('mouseup' + ns, 'table.k-content, .k-footer', function () {\n that._focusView(that.options.focusOnNav !== false);\n }).attr(ID);\n if (that._isMultipleSelection() && that.options.weekNumber) {\n element.on(CLICK, WEEKCOLUMNSELECTOR, function (e) {\n var first = $(e.currentTarget).closest('tr').find(CELLSELECTORVALID).first(), last = that.selectable._lastActive = $(e.currentTarget).closest('tr').find(CELLSELECTORVALID).last();\n that.selectable.selectRange(first, last, { event: e });\n that._current = that._value = toDateObject(last.find('a'));\n that._setCurrent(that._current);\n });\n }\n normalize(options);\n value = parse(options.value, options.format, options.culture);\n that._selectDates = [];\n that._index = views[options.start];\n that._current = new DATE(+restrictValue(value, options.min, options.max));\n that._addClassProxy = function () {\n that._active = true;\n if (that._cell.hasClass(DISABLED)) {\n var todayString = that._view.toDateString(getToday());\n that._cell = that._cellByDate(todayString);\n }\n that._cell.addClass(FOCUSED);\n };\n that._removeClassProxy = function () {\n that._active = false;\n if (that._cell) {\n that._cell.removeClass(FOCUSED);\n }\n };\n that.value(value);\n if (that._isMultipleSelection() && options.selectDates.length > 0) {\n that.selectDates(options.selectDates);\n }\n kendo.notify(that);\n },\n options: {\n name: 'Calendar',\n value: null,\n min: new DATE(1900, 0, 1),\n max: new DATE(2099, 11, 31),\n dates: [],\n disableDates: null,\n url: '',\n culture: '',\n footer: '',\n format: '',\n month: {},\n weekNumber: false,\n selectable: 'single',\n selectDates: [],\n start: MONTH,\n depth: MONTH,\n animation: {\n horizontal: {\n effects: SLIDE,\n reverse: true,\n duration: 500,\n divisor: 2\n },\n vertical: {\n effects: 'zoomIn',\n duration: 400\n }\n },\n messages: {\n weekColumnHeader: '',\n today: 'Today'\n },\n componentType: 'classic'\n },\n events: [\n CHANGE,\n NAVIGATE\n ],\n componentTypes: {\n 'classic': {\n header: { template: CLASSIC_HEADER_TEMPLATE },\n hasFooter: true,\n linksSelector: '.k-button',\n contentClasses: 'k-calendar-table k-content'\n },\n 'modern': {\n header: { template: MODERN_HEADER_TEMPLATE },\n hasFooter: false,\n linksSelector: '.k-button',\n contentClasses: 'k-calendar-table k-content k-calendar-content'\n }\n },\n setOptions: function (options) {\n var that = this;\n normalize(options);\n options.disableDates = getDisabledExpr(options.disableDates);\n that._destroySelectable();\n Widget.fn.setOptions.call(that, options);\n that._templates();\n that._selectable();\n that._viewWrapper();\n if (that.options.hasFooter) {\n that._footer(that.footer);\n } else {\n that.element.find('.k-footer').hide();\n that._toggle();\n }\n that._index = views[that.options.start];\n that.navigate();\n if (options.weekNumber) {\n that.element.addClass('k-week-number');\n }\n },\n destroy: function () {\n var that = this, today = that._today;\n that.element.off(ns);\n that._title.off(ns);\n that[PREVARROW].off(ns);\n that[NEXTARROW].off(ns);\n that._destroySelectable();\n kendo.destroy(that._table);\n if (today) {\n kendo.destroy(today.off(ns));\n }\n Widget.fn.destroy.call(that);\n },\n current: function () {\n return this._current;\n },\n view: function () {\n return this._view;\n },\n focus: function (table) {\n table = table || this._table;\n this._bindTable(table);\n table.trigger('focus');\n },\n min: function (value) {\n return this._option(MIN, value);\n },\n max: function (value) {\n return this._option('max', value);\n },\n navigateToPast: function () {\n this._navigate(PREVARROW, -1);\n },\n navigateToFuture: function () {\n this._navigate(NEXTARROW, 1);\n },\n navigateUp: function () {\n var that = this, index = that._index;\n if (that._title.hasClass(DISABLED)) {\n return;\n }\n that.navigate(that._current, ++index);\n },\n navigateDown: function (value) {\n var that = this, index = that._index, depth = that.options.depth;\n if (!value) {\n return;\n }\n if (index === views[depth]) {\n if (!isEqualDate(that._value, that._current) || !isEqualDate(that._value, value)) {\n that.value(value);\n that.trigger(CHANGE);\n }\n return;\n }\n that.navigate(value, --index);\n },\n navigate: function (value, view) {\n view = isNaN(view) ? views[view] : view;\n var that = this, options = that.options, culture = options.culture, min = options.min, max = options.max, title = that._title, from = that._table, old = that._oldTable, currentValue = that._current, future = value && +value > +currentValue, vertical = view !== undefined && view !== that._index, to, currentView, compare, disabled, viewWrapper = that.element.children('.k-calendar-view');\n if (!value) {\n value = currentValue;\n }\n that._current = value = new DATE(+restrictValue(value, min, max));\n if (view === undefined) {\n view = that._index;\n } else {\n that._index = view;\n }\n that._view = currentView = calendar.views[view];\n compare = currentView.compare;\n disabled = view === views[CENTURY];\n title.toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n disabled = compare(value, min) < 1;\n that[PREVARROW].toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n disabled = compare(value, max) > -1;\n that[NEXTARROW].toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n if (from && old && old.data('animating')) {\n old.kendoStop(true, true);\n from.kendoStop(true, true);\n }\n that._oldTable = from;\n if (!from || that._changeView) {\n title.html(currentView.title(value, min, max, culture));\n that._table = to = $(currentView.content(extend({\n min: min,\n max: max,\n date: value,\n url: options.url,\n dates: options.dates,\n format: options.format,\n otherMonth: true,\n culture: culture,\n disableDates: options.disableDates,\n isWeekColumnVisible: options.weekNumber,\n messages: options.messages,\n contentClasses: that.options.contentClasses\n }, that[currentView.name])));\n addClassToViewContainer(to, currentView.name);\n var replace = from && from.data('start') === to.data('start');\n that._animate({\n from: from,\n to: to,\n vertical: vertical,\n future: future,\n replace: replace\n });\n viewWrapper.removeClass('k-calendar-monthview k-calendar-yearview k-calendar-decadeview k-calendar-centuryview');\n viewWrapper.addClass('k-calendar-' + currentView.name + 'view');\n that.trigger(NAVIGATE);\n that._focus(value);\n }\n if (view === views[options.depth] && that._selectDates.length > 0) {\n that._visualizeSelectedDatesInView();\n }\n if (that.options.selectable === 'single') {\n if (view === views[options.depth] && that._value && !that.options.disableDates(that._value)) {\n that._selectCell(that._value);\n }\n }\n that._setCurrent(value);\n if (!from && that._cell) {\n that._cell.removeClass(FOCUSED);\n }\n that._changeView = true;\n },\n selectDates: function (dates) {\n var that = this, validSelectedDates, datesUnique;\n if (dates === undefined) {\n return that._selectDates;\n }\n datesUnique = dates.map(function (date) {\n return date.getTime();\n }).filter(function (date, position, array) {\n return array.indexOf(date) === position;\n }).map(function (time) {\n return new Date(time);\n });\n validSelectedDates = $.grep(datesUnique, function (value) {\n if (value) {\n return +that._validateValue(new Date(value.setHours(0, 0, 0, 0))) === +value;\n }\n });\n that._selectDates = validSelectedDates.length > 0 ? validSelectedDates : datesUnique.length === 0 ? datesUnique : that._selectDates;\n that._visualizeSelectedDatesInView();\n },\n value: function (value) {\n var that = this, old = that._view, view = that._view;\n if (value === undefined) {\n return that._value;\n }\n value = that._validateValue(value);\n if (value && that._isMultipleSelection()) {\n var date = new Date(+value);\n date.setHours(0, 0, 0, 0);\n that._selectDates = [date];\n that.selectable._lastActive = null;\n }\n if (old && value === null && that._cell) {\n that._cell.removeClass(SELECTED);\n } else {\n that._changeView = !value || view && view.compare(value, that._current) !== 0;\n that.navigate(value);\n }\n },\n _validateValue: function (value) {\n var that = this, options = that.options, min = options.min, max = options.max;\n if (value === null) {\n that._current = createDate(that._current.getFullYear(), that._current.getMonth(), that._current.getDate());\n }\n value = parse(value, options.format, options.culture);\n if (value !== null) {\n value = new DATE(+value);\n if (!isInRange(value, min, max)) {\n value = null;\n }\n }\n if (value === null || !that.options.disableDates(new Date(+value))) {\n that._value = value;\n } else if (that._value === undefined) {\n that._value = null;\n }\n return that._value;\n },\n _visualizeSelectedDatesInView: function () {\n var that = this;\n var selectedDates = {};\n $.each(that._selectDates, function (index, value) {\n selectedDates[kendo.calendar.views[0].toDateString(value)] = value;\n });\n that.selectable.clear();\n var cells = that._table.find(CELLSELECTOR).filter(function (index, element) {\n return selectedDates[$(element.firstChild).attr(kendo.attr(VALUE))];\n });\n if (cells.length > 0) {\n that.selectable._selectElement(cells, true);\n }\n },\n _isMultipleSelection: function () {\n var that = this;\n return that.options.selectable === 'multiple';\n },\n _selectable: function () {\n var that = this;\n if (!that._isMultipleSelection()) {\n return;\n }\n var selectable = that.options.selectable, selectableOptions = Selectable.parseOptions(selectable);\n if (selectableOptions.multiple) {\n that.element.attr('aria-multiselectable', 'true');\n }\n that.selectable = new Selectable(that.wrapper, {\n aria: true,\n inputSelectors: 'input,textarea,.k-multiselect-wrap,select,button,.k-button>span,.k-button>img,span.k-icon.k-i-arrow-60-down,span.k-icon.k-i-arrow-60-up',\n multiple: selectableOptions.multiple,\n filter: 'table.k-month:eq(0) ' + CELLSELECTORVALID,\n change: proxy(that._onSelect, that),\n relatedTarget: proxy(that._onRelatedTarget, that)\n });\n },\n _onRelatedTarget: function (target) {\n var that = this;\n if (that.selectable.options.multiple && target.is(CELLSELECTORVALID)) {\n that._current = toDateObject(target.find('a'));\n that._setCurrent(that._current);\n }\n },\n _onSelect: function (e) {\n var that = this, eventArgs = e, selectableOptions = Selectable.parseOptions(that.options.selectable);\n if (!selectableOptions.multiple) {\n if ($(eventArgs.event.currentTarget).is('td') && !$(eventArgs.event.currentTarget).hasClass('k-state-selected')) {\n $(eventArgs.event.currentTarget).addClass('k-state-selected');\n } else {\n that._click($(eventArgs.event.currentTarget).find('a'));\n }\n return;\n }\n if (eventArgs.event.ctrlKey || eventArgs.event.metaKey) {\n if ($(eventArgs.event.currentTarget).is(CELLSELECTORVALID)) {\n that._toggleSelection($(eventArgs.event.currentTarget));\n } else {\n that._cellsBySelector(CELLSELECTORVALID).each(function (index, element) {\n var value = toDateObject($(element).find('a'));\n that._deselect(value);\n });\n that._addSelectedCellsToArray();\n }\n } else if (eventArgs.event.shiftKey) {\n that._rangeSelection(that._cell);\n } else if ($(eventArgs.event.currentTarget).is(CELLSELECTOR)) {\n that.value(toDateObject($(eventArgs.event.currentTarget).find('a')));\n } else {\n that._selectDates = [];\n that._addSelectedCellsToArray();\n }\n that.trigger(CHANGE);\n },\n _destroySelectable: function () {\n var that = this;\n if (that.selectable) {\n that.selectable.destroy();\n that.selectable = null;\n }\n },\n _toggleSelection: function (currentCell) {\n var that = this, date = toDateObject(currentCell.find('a'));\n if (currentCell.hasClass('k-state-selected')) {\n that._selectDates.push(date);\n } else {\n that._deselect(date);\n }\n },\n _rangeSelection: function (toDateCell, startDate) {\n var that = this, fromDate = startDate || toDateObject(that.selectable.value().first().find('a')), toDate = toDateObject(toDateCell.find('a')), daysDifference;\n if (that.selectable._lastActive || that._value) {\n fromDate = that.selectable._lastActive ? toDateObject(that.selectable._lastActive.find('a')) : new Date(+that._value);\n } else {\n that.selectable._lastActive = startDate ? that._cellByDate(that._view.toDateString(startDate), CELLSELECTORVALID) : that.selectable.value().first();\n }\n that._selectDates = [];\n daysDifference = daysBetweenTwoDates(fromDate, toDate);\n addDaysToArray(that._selectDates, daysDifference, fromDate, that.options.disableDates);\n that._visualizeSelectedDatesInView();\n },\n _cellsBySelector: function (selector) {\n var that = this;\n return that._table.find(selector);\n },\n _addSelectedCellsToArray: function () {\n var that = this;\n that.selectable.value().each(function (index, item) {\n var date = toDateObject($(item.firstChild));\n if (!that.options.disableDates(date)) {\n that._selectDates.push(date);\n }\n });\n },\n _deselect: function (date) {\n var that = this;\n var currentDateIndex = that._selectDates.map(Number).indexOf(+date);\n if (currentDateIndex != -1) {\n that._selectDates.splice(currentDateIndex, 1);\n }\n },\n _dateInView: function (date) {\n var that = this, firstDateInView = toDateObject(that._cellsBySelector(CELLSELECTORVALID + ':first').find('a')), lastDateInView = toDateObject(that._cellsBySelector(CELLSELECTORVALID + ':last').find('a'));\n return +date <= +lastDateInView && +date >= +firstDateInView;\n },\n _isNavigatable: function (currentValue, cellIndex) {\n var that = this;\n var isDisabled = that.options.disableDates;\n var cell;\n var index;\n if (that._view.name == 'month') {\n return !isDisabled(currentValue);\n } else {\n index = that.wrapper.find('.' + FOCUSED).index();\n cell = that.wrapper.find('.k-content td:eq(' + (index + cellIndex) + ')');\n return cell.is(CELLSELECTORVALID) || !isDisabled(currentValue);\n }\n },\n _move: function (e) {\n var that = this, options = that.options, key = e.keyCode, view = that._view, index = that._index, min = that.options.min, max = that.options.max, currentValue = new DATE(+that._current), isRtl = kendo.support.isRtl(that.wrapper), isDisabled = that.options.disableDates, value, prevent, method, temp;\n if (e.target === that._table[0]) {\n that._active = true;\n }\n if (key == keys.RIGHT && !isRtl || key == keys.LEFT && isRtl) {\n value = 1;\n prevent = true;\n } else if (key == keys.LEFT && !isRtl || key == keys.RIGHT && isRtl) {\n value = -1;\n prevent = true;\n } else if (key == keys.UP) {\n value = index === 0 ? -7 : -4;\n prevent = true;\n } else if (key == keys.DOWN) {\n value = index === 0 ? 7 : 4;\n prevent = true;\n } else if (key == keys.SPACEBAR) {\n value = 0;\n prevent = true;\n } else if (key == keys.HOME || key == keys.END) {\n method = key == keys.HOME ? 'first' : 'last';\n temp = view[method](currentValue);\n currentValue = new DATE(temp.getFullYear(), temp.getMonth(), temp.getDate(), currentValue.getHours(), currentValue.getMinutes(), currentValue.getSeconds(), currentValue.getMilliseconds());\n currentValue.setFullYear(temp.getFullYear());\n prevent = true;\n }\n if (e.ctrlKey || e.metaKey) {\n if (key == keys.RIGHT && !isRtl || key == keys.LEFT && isRtl) {\n that.navigateToFuture();\n prevent = true;\n } else if (key == keys.LEFT && !isRtl || key == keys.RIGHT && isRtl) {\n that.navigateToPast();\n prevent = true;\n } else if (key == keys.UP) {\n that.navigateUp();\n prevent = true;\n } else if (key == keys.DOWN) {\n that._click($(that._cell[0].firstChild));\n prevent = true;\n } else if ((key == keys.ENTER || key == keys.SPACEBAR) && that._isMultipleSelection()) {\n that._keyboardToggleSelection(e);\n var focusedDate = toDateObject($(that._cell[0]).find('a'));\n that._setCurrent(focusedDate);\n }\n } else if (e.shiftKey) {\n if (value !== undefined || method) {\n if (!method) {\n view.setDate(currentValue, value);\n }\n if (!isInRange(currentValue, min, max)) {\n currentValue = restrictValue(currentValue, options.min, options.max);\n }\n if (isDisabled(currentValue)) {\n currentValue = that._nextNavigatable(currentValue, value);\n }\n min = createDate(min.getFullYear(), min.getMonth(), min.getDate());\n if (that._isMultipleSelection()) {\n that._keyboardRangeSelection(e, currentValue);\n } else {\n that._focus(currentValue);\n }\n }\n } else {\n if (key == keys.ENTER || key == keys.SPACEBAR) {\n if (view.name == 'month' && that._isMultipleSelection()) {\n that.value(toDateObject($(that._cell.find('a'))));\n that.selectable._lastActive = $(that._cell[0]);\n that.trigger(CHANGE);\n } else {\n that._click($(that._cell[0].firstChild));\n }\n prevent = true;\n } else if (key == keys.PAGEUP) {\n prevent = true;\n that.navigateToPast();\n } else if (key == keys.PAGEDOWN) {\n prevent = true;\n that.navigateToFuture();\n }\n if (value || method) {\n if (!method) {\n view.setDate(currentValue, value);\n }\n min = createDate(min.getFullYear(), min.getMonth(), min.getDate());\n if (!isInRange(currentValue, min, max)) {\n currentValue = restrictValue(currentValue, options.min, options.max);\n }\n if (!that._isNavigatable(currentValue, value)) {\n currentValue = that._nextNavigatable(currentValue, value);\n }\n if (that._isMultipleSelection()) {\n if (!that._dateInView(currentValue)) {\n that.navigate(currentValue);\n } else {\n that._current = currentValue;\n that._setCurrent(currentValue);\n }\n } else {\n that._focus(currentValue);\n }\n }\n }\n if (prevent) {\n e.preventDefault();\n }\n return that._current;\n },\n _keyboardRangeSelection: function (event, currentValue) {\n var that = this, fromDate, daysDifference;\n if (!that._dateInView(currentValue)) {\n that._selectDates = [];\n fromDate = that.selectable._lastActive ? toDateObject(that.selectable._lastActive.find('a')) : currentValue;\n daysDifference = daysBetweenTwoDates(fromDate, new Date(+currentValue));\n addDaysToArray(that._selectDates, daysDifference, fromDate, that.options.disableDates);\n that.navigate(currentValue);\n that._current = currentValue;\n that.selectable._lastActive = that.selectable._lastActive || that._cellByDate(that._view.toDateString(currentValue), CELLSELECTORVALID);\n that.trigger(CHANGE);\n return;\n }\n that.selectable.options.filter = that.wrapper.find('table').length > 1 && +currentValue > +that._current ? 'table.k-month:eq(1) ' + CELLSELECTORVALID : 'table.k-month:eq(0) ' + CELLSELECTORVALID;\n that._setCurrent(currentValue);\n that._current = currentValue;\n that._rangeSelection(that._cellByDate(that._view.toDateString(currentValue), CELLSELECTORVALID), currentValue);\n that.trigger(CHANGE);\n that.selectable.options.filter = 'table.k-month:eq(0) ' + CELLSELECTORVALID;\n },\n _keyboardToggleSelection: function (event) {\n var that = this;\n event.currentTarget = that._cell[0];\n that.selectable._lastActive = $(that._cell[0]);\n if ($(that._cell[0]).hasClass(SELECTED)) {\n that.selectable._unselect($(that._cell[0]));\n that.selectable.trigger(CHANGE, { event: event });\n } else {\n that.selectable.value($(that._cell[0]), { event: event });\n }\n },\n _nextNavigatable: function (currentValue, value) {\n var that = this, disabled = true, view = that._view, min = that.options.min, max = that.options.max, isDisabled = that.options.disableDates, navigatableDate = new Date(currentValue.getTime());\n view.setDate(navigatableDate, -value);\n while (disabled) {\n view.setDate(currentValue, value);\n if (!isInRange(currentValue, min, max)) {\n currentValue = navigatableDate;\n break;\n }\n disabled = isDisabled(currentValue);\n }\n return currentValue;\n },\n _animate: function (options) {\n var that = this;\n var from = options.from;\n var to = options.to;\n var active = that._active;\n var viewWrapper = that.element.children('.k-calendar-view');\n if (!from) {\n viewWrapper.append(to);\n that._bindTable(to);\n } else if (from.parent().data('animating')) {\n from.off(ns);\n from.parent().kendoStop(true, true).remove();\n from.remove();\n viewWrapper.append(to);\n that._focusView(active);\n } else if (!from.is(':visible') || that.options.animation === false || options.replace) {\n to.insertAfter(from);\n from.off(ns).remove();\n that._focusView(active);\n } else {\n that[options.vertical ? '_vertical' : '_horizontal'](from, to, options.future);\n }\n },\n _horizontal: function (from, to, future) {\n var that = this, active = that._active, horizontal = that.options.animation.horizontal, effects = horizontal.effects, viewWidth = outerWidth(from);\n if (effects && effects.indexOf(SLIDE) != -1) {\n from.add(to).css({ width: viewWidth });\n from.wrap('
');\n that._focusView(active, from);\n from.parent().css({\n position: 'relative',\n width: viewWidth * 2,\n 'float': LEFT,\n 'margin-left': future ? 0 : -viewWidth\n });\n to[future ? 'insertAfter' : 'insertBefore'](from);\n extend(horizontal, {\n effects: SLIDE + ':' + (future ? 'right' : LEFT),\n complete: function () {\n from.off(ns).remove();\n that._oldTable = null;\n to.unwrap();\n that._focusView(active);\n }\n });\n from.parent().kendoStop(true, true).kendoAnimate(horizontal);\n }\n },\n _vertical: function (from, to) {\n var that = this, vertical = that.options.animation.vertical, effects = vertical.effects, active = that._active, cell, position;\n if (effects && effects.indexOf('zoom') != -1) {\n to.insertBefore(from);\n from.css({\n position: 'absolute',\n width: to.width()\n });\n if (transitionOrigin) {\n cell = that._cellByDate(that._view.toDateString(that._current));\n position = cell.position();\n position = position.left + parseInt(cell.width() / 2, 10) + 'px' + ' ' + (position.top + parseInt(cell.height() / 2, 10) + 'px');\n to.css(transitionOrigin, position);\n }\n from.kendoStop(true, true).kendoAnimate({\n effects: 'fadeOut',\n duration: 600,\n complete: function () {\n from.off(ns).remove();\n that._oldTable = null;\n that._focusView(active);\n }\n });\n to.kendoStop(true, true).kendoAnimate(vertical);\n }\n },\n _cellByDate: function (value, selector) {\n return this._table.find(selector ? selector : 'td:not(.' + OTHERMONTH + ')').filter(function () {\n return $(this.firstChild).attr(kendo.attr(VALUE)) === value;\n });\n },\n _selectCell: function (date) {\n var that = this, cell = that._selectedCell, value = that._view.toDateString(date);\n if (cell && cell[0]) {\n cell[0].removeAttribute(ARIA_SELECTED);\n cell.removeClass(SELECTED);\n }\n cell = that._cellByDate(value, that.options.selectable == 'multiple' ? CELLSELECTOR : 'td:not(.' + OTHERMONTH + ')');\n that._selectedCell = cell;\n cell.addClass(SELECTED).attr(ARIA_SELECTED, true);\n },\n _setCurrent: function (date) {\n var that = this, id = kendo.guid(), cell = that._cell, value = that._view.toDateString(date);\n if (cell && cell[0]) {\n cell.removeClass(FOCUSED);\n cell[0].removeAttribute(ARIA_LABEL);\n cell[0].removeAttribute(ID);\n }\n cell = that._cellByDate(value, that.options.selectable == 'multiple' ? CELLSELECTOR : 'td:not(.' + OTHERMONTH + ')');\n that._cell = cell;\n cell.attr(ID, id).addClass(FOCUSED);\n if (that._table[0]) {\n that._table[0].removeAttribute('aria-activedescendant');\n that._table.attr('aria-activedescendant', id);\n }\n },\n _bindTable: function (table) {\n table.on(FOCUS_WITH_NS, this._addClassProxy).on(BLUR, this._removeClassProxy);\n },\n _click: function (link) {\n var that = this, options = that.options, currentValue = new Date(+that._current), value = toDateObject(link);\n adjustDST(value, 0);\n if (that._view.name == 'month' && that.options.disableDates(value)) {\n value = that._value;\n }\n that._view.setDate(currentValue, value);\n that.navigateDown(restrictValue(currentValue, options.min, options.max));\n },\n _focus: function (value) {\n var that = this, view = that._view;\n if (view.compare(value, that._current) !== 0) {\n that.navigate(value);\n } else {\n that._current = value;\n that._setCurrent(value);\n }\n },\n _focusView: function (active, table) {\n if (active) {\n this.focus(table);\n }\n },\n _viewWrapper: function () {\n var that = this;\n var element = that.element;\n var viewWrapper = element.children('.k-calendar-view');\n if (!viewWrapper[0]) {\n viewWrapper = $('
').insertAfter(element.find(HEADERSELECTOR));\n }\n },\n _footer: function (template) {\n var that = this, today = getToday(), element = that.element, footer = element.find('.k-footer');\n if (!template) {\n that._toggle(false);\n footer.hide();\n return;\n }\n if (!footer[0]) {\n footer = $('
').appendTo(element);\n }\n that._today = footer.show().find('.k-link').html(template(today)).attr('title', kendo.toString(today, 'D', that.options.culture));\n that._toggle();\n },\n _header: function () {\n var that = this, element = that.element, linksSelector = that.options.linksSelector;\n if (!element.find(HEADERSELECTOR)[0]) {\n element.html(kendo.template(that.options.header.template)($.extend(true, {}, that.options, { actionAttr: kendo.attr('action') })));\n }\n element.find(linksSelector).on(CLICK + ' touchend' + ns, function () {\n return false;\n });\n that._title = element.find('[' + kendo.attr('action') + '=\"nav-up\"]').on(CLICK + ' touchend' + ns, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateUp();\n });\n that[PREVARROW] = element.find('[' + kendo.attr('action') + '=\"prev\"]').on(CLICK + ' touchend' + ns, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateToPast();\n });\n that[NEXTARROW] = element.find('[' + kendo.attr('action') + '=\"next\"]').on(CLICK + ' touchend' + ns, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateToFuture();\n });\n element.find('[' + kendo.attr('action') + '=\"today\"]').on(CLICK + ' touchend' + ns, proxy(that._todayClick, that));\n },\n _navigate: function (arrow, modifier) {\n var that = this, index = that._index + 1, currentValue = new DATE(+that._current);\n if (that._isMultipleSelection()) {\n var firstDayCurrentMonth = that._table.find('td:not(.k-other-month):not(.k-out-of-range)').has('.k-link').first();\n currentValue = toDateObject(firstDayCurrentMonth.find('a'));\n that._current = new Date(+currentValue);\n }\n arrow = that[arrow];\n if (!arrow.hasClass(DISABLED)) {\n if (index > 3) {\n currentValue.setFullYear(currentValue.getFullYear() + 100 * modifier);\n } else {\n calendar.views[index].setDate(currentValue, modifier);\n }\n that.navigate(currentValue);\n }\n },\n _option: function (option, value) {\n var that = this, options = that.options, currentValue = that._value || that._current, isBigger;\n if (value === undefined) {\n return options[option];\n }\n value = parse(value, options.format, options.culture);\n if (!value) {\n return;\n }\n options[option] = new DATE(+value);\n if (option === MIN) {\n isBigger = value > currentValue;\n } else {\n isBigger = currentValue > value;\n }\n if (isBigger || isEqualMonth(currentValue, value)) {\n if (isBigger) {\n that._value = null;\n }\n that._changeView = true;\n }\n if (!that._changeView) {\n that._changeView = !!(options.month.content || options.month.empty);\n }\n that.navigate(that._value);\n that._toggle();\n },\n _toggle: function (toggle) {\n var that = this, options = that.options, isTodayDisabled = that.options.disableDates(getToday()), link = that._today, todayClass = that._todayClass();\n if (toggle === undefined) {\n toggle = isInRange(getToday(), options.min, options.max);\n }\n if (link) {\n link.off(CLICK);\n if (toggle && !isTodayDisabled) {\n link.addClass(todayClass).removeClass(DISABLED).on(CLICK, proxy(that._todayClick, that));\n } else {\n link.removeClass(todayClass).addClass(DISABLED).on(CLICK, prevent);\n }\n }\n },\n _todayClass: function () {\n return TODAY;\n },\n _todayClick: function (e) {\n var that = this, depth = views[that.options.depth], disabled = that.options.disableDates, today = getToday();\n e.preventDefault();\n if (disabled(today)) {\n return;\n }\n if (that._view.compare(that._current, today) === 0 && that._index == depth) {\n that._changeView = false;\n }\n if (that._isMultipleSelection()) {\n that._selectDates = [today];\n that.selectable._lastActive = null;\n }\n that._value = today;\n that.navigate(today, depth);\n that.trigger(CHANGE);\n },\n _templates: function () {\n var that = this, options = that.options, footer = options.footer, month = options.month, content = month.content, weekNumber = month.weekNumber, empty = month.empty, footerTemplate = '#= kendo.toString(data,\"D\",\"' + options.culture + '\") #';\n that.month = {\n content: template('' + (content || '#=data.value#') + '', { useWithBlock: !!content }),\n empty: template('' + (empty || ' ') + '', { useWithBlock: !!empty }),\n weekNumber: template('' + (weekNumber || '#= data.weekNumber #') + '', { useWithBlock: !!weekNumber })\n };\n if (footer && footer !== true) {\n footerTemplate = footer;\n }\n that.footer = footer !== false ? template(footerTemplate, { useWithBlock: false }) : null;\n },\n _updateAria: function (ariaTemplate, date) {\n var that = this;\n var cell = that._cell;\n var valueType = that.view().valueType();\n var current = date || that.current();\n var text;\n if (valueType === 'month') {\n text = kendo.toString(current, 'MMMM');\n } else if (valueType === 'date') {\n text = kendo.toString(current, 'D');\n } else {\n text = cell.text();\n }\n cell.attr('aria-label', ariaTemplate({\n current: current,\n valueType: valueType,\n text: text\n }));\n return cell.attr('id');\n }\n });\n ui.plugin(Calendar);\n var calendar = {\n firstDayOfMonth: function (date) {\n return createDate(date.getFullYear(), date.getMonth(), 1);\n },\n firstVisibleDay: function (date, calendarInfo) {\n calendarInfo = calendarInfo || kendo.culture().calendar;\n var firstDay = calendarInfo.firstDay, firstVisibleDay = new DATE(date.getFullYear(), date.getMonth(), 1, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n firstVisibleDay.setFullYear(date.getFullYear());\n while (firstVisibleDay.getDay() != firstDay) {\n calendar.setTime(firstVisibleDay, -1 * MS_PER_DAY);\n }\n return firstVisibleDay;\n },\n setTime: function (date, time) {\n var tzOffsetBefore = date.getTimezoneOffset(), resultDATE = new DATE(date.getTime() + time), tzOffsetDiff = resultDATE.getTimezoneOffset() - tzOffsetBefore;\n date.setTime(resultDATE.getTime() + tzOffsetDiff * MS_PER_MINUTE);\n },\n views: [\n {\n name: MONTH,\n title: function (date, min, max, culture) {\n return getCalendarInfo(culture).months.names[date.getMonth()] + ' ' + date.getFullYear();\n },\n content: function (options) {\n var that = this, idx = 0, min = options.min, max = options.max, date = options.date, dates = options.dates, format = options.format, culture = options.culture, navigateUrl = options.url, showHeader = options.showHeader, otherMonth = options.otherMonth, isWeekColumnVisible = options.isWeekColumnVisible, hasUrl = navigateUrl && dates[0], currentCalendar = getCalendarInfo(culture), firstDayIdx = currentCalendar.firstDay, days = currentCalendar.days, names = shiftArray(days.names, firstDayIdx), shortNames = shiftArray(days.namesShort, firstDayIdx), start = calendar.firstVisibleDay(date, currentCalendar), firstDayOfMonth = that.first(date), lastDayOfMonth = that.last(date), toDateString = that.toDateString, today = getToday(), contentClasses = options.contentClasses, html = '';\n if (showHeader) {\n html += '';\n }\n html += '';\n if (isWeekColumnVisible) {\n html += '';\n }\n for (; idx < 7; idx++) {\n html += '';\n }\n adjustDST(today, 0);\n today = +today;\n return view({\n cells: 42,\n perRow: 7,\n html: html += '',\n start: start,\n isWeekColumnVisible: isWeekColumnVisible,\n weekNumber: options.weekNumber,\n min: createDate(min.getFullYear(), min.getMonth(), min.getDate()),\n max: createDate(max.getFullYear(), max.getMonth(), max.getDate()),\n otherMonth: otherMonth,\n content: options.content,\n lastDayOfMonth: lastDayOfMonth,\n empty: options.empty,\n setter: that.setDate,\n disableDates: options.disableDates,\n build: function (date, idx, disableDates) {\n var cssClass = ['k-calendar-td'], day = date.getDay(), linkClass = '', url = '#';\n if (date < firstDayOfMonth || date > lastDayOfMonth) {\n cssClass.push(OTHERMONTH);\n }\n if (disableDates(date)) {\n cssClass.push(DISABLED);\n }\n if (+date === today) {\n cssClass.push('k-today');\n }\n if (day === 0 || day === 6) {\n cssClass.push('k-weekend');\n }\n if (hasUrl && inArray(+date, dates)) {\n url = navigateUrl.replace('{0}', kendo.toString(date, format, culture));\n linkClass = ' k-action-link';\n }\n return {\n date: date,\n dates: dates,\n ns: kendo.ns,\n title: kendo.toString(date, 'D', culture),\n value: date.getDate(),\n dateString: toDateString(date),\n cssClass: cssClass.join(' '),\n linkClass: linkClass,\n url: url\n };\n },\n weekNumberBuild: function (date) {\n return {\n weekNumber: weekInYear(date, kendo.culture().calendar.firstDay),\n currentDate: date\n };\n }\n });\n },\n first: function (date) {\n return calendar.firstDayOfMonth(date);\n },\n last: function (date) {\n var last = createDate(date.getFullYear(), date.getMonth() + 1, 0), first = calendar.firstDayOfMonth(date), timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\n if (timeOffset) {\n last.setHours(first.getHours() + timeOffset / 60);\n }\n return last;\n },\n compare: function (date1, date2) {\n var result, month1 = date1.getMonth(), year1 = date1.getFullYear(), month2 = date2.getMonth(), year2 = date2.getFullYear();\n if (year1 > year2) {\n result = 1;\n } else if (year1 < year2) {\n result = -1;\n } else {\n result = month1 == month2 ? 0 : month1 > month2 ? 1 : -1;\n }\n return result;\n },\n setDate: function (date, value) {\n var hours = date.getHours();\n if (value instanceof DATE) {\n date.setFullYear(value.getFullYear(), value.getMonth(), value.getDate());\n } else {\n calendar.setTime(date, value * MS_PER_DAY);\n }\n adjustDST(date, hours);\n },\n toDateString: function (date) {\n return date.getFullYear() + '/' + date.getMonth() + '/' + date.getDate();\n },\n valueType: function () {\n return 'date';\n }\n },\n {\n name: 'year',\n title: function (date) {\n return date.getFullYear();\n },\n content: function (options) {\n var namesAbbr = getCalendarInfo(options.culture).months.namesAbbr, toDateString = this.toDateString, min = options.min, max = options.max, html = '';\n if (options.showHeader) {\n html += '
' + this.title(date, min, max, culture) + '
' + options.messages.weekColumnHeader + '' + shortNames[idx] + '
';\n html += '';\n html += '';\n html += '';\n }\n return view({\n min: createDate(min.getFullYear(), min.getMonth(), 1),\n max: createDate(max.getFullYear(), max.getMonth(), 1),\n start: createDate(options.date.getFullYear(), 0, 1),\n html: html,\n setter: this.setDate,\n build: function (date) {\n var cssClass = ['k-calendar-td'];\n return {\n value: namesAbbr[date.getMonth()],\n ns: kendo.ns,\n dateString: toDateString(date),\n cssClass: cssClass.join(' ')\n };\n }\n });\n },\n first: function (date) {\n return createDate(date.getFullYear(), 0, date.getDate());\n },\n last: function (date) {\n return createDate(date.getFullYear(), 11, date.getDate());\n },\n compare: function (date1, date2) {\n return compare(date1, date2);\n },\n setDate: function (date, value) {\n var month, hours = date.getHours();\n if (value instanceof DATE) {\n month = value.getMonth();\n date.setFullYear(value.getFullYear(), month, date.getDate());\n if (month !== date.getMonth()) {\n date.setDate(0);\n }\n } else {\n month = date.getMonth() + value;\n date.setMonth(month);\n if (month > 11) {\n month -= 12;\n }\n if (month > 0 && date.getMonth() != month) {\n date.setDate(0);\n }\n }\n adjustDST(date, hours);\n },\n toDateString: function (date) {\n return date.getFullYear() + '/' + date.getMonth() + '/1';\n },\n valueType: function () {\n return 'month';\n }\n },\n {\n name: 'decade',\n title: function (date, min, max) {\n return title(date, min, max, 10);\n },\n content: function (options) {\n var year = options.date.getFullYear(), toDateString = this.toDateString, html = '';\n if (options.showHeader) {\n html += '
';\n html += this.title(options.date);\n html += '
';\n html += '';\n html += '';\n html += '';\n }\n return view({\n start: createDate(year - year % 10 - 1, 0, 1),\n min: createDate(options.min.getFullYear(), 0, 1),\n max: createDate(options.max.getFullYear(), 0, 1),\n otherMonth: options.otherMonth,\n html: html,\n setter: this.setDate,\n build: function (date, idx) {\n var cssClass = ['k-calendar-td'];\n if (idx === 0 || idx === 11) {\n cssClass.push(OTHERMONTH);\n }\n return {\n value: date.getFullYear(),\n ns: kendo.ns,\n dateString: toDateString(date),\n cssClass: cssClass.join(' ')\n };\n }\n });\n },\n first: function (date) {\n var year = date.getFullYear();\n return createDate(year - year % 10, date.getMonth(), date.getDate());\n },\n last: function (date) {\n var year = date.getFullYear();\n return createDate(year - year % 10 + 9, date.getMonth(), date.getDate());\n },\n compare: function (date1, date2) {\n return compare(date1, date2, 10);\n },\n setDate: function (date, value) {\n setDate(date, value, 1);\n },\n toDateString: function (date) {\n return date.getFullYear() + '/0/1';\n },\n valueType: function () {\n return 'year';\n }\n },\n {\n name: CENTURY,\n title: function (date, min, max) {\n return title(date, min, max, 100);\n },\n content: function (options) {\n var year = options.date.getFullYear(), min = options.min.getFullYear(), max = options.max.getFullYear(), toDateString = this.toDateString, minYear = min, maxYear = max, html = '';\n minYear = minYear - minYear % 10;\n maxYear = maxYear - maxYear % 10;\n if (maxYear - minYear < 10) {\n maxYear = minYear + 9;\n }\n if (options.showHeader) {\n html += '
';\n html += this.title(options.date, options.min, options.max);\n html += '
';\n html += '';\n html += '';\n html += '';\n }\n return view({\n start: createDate(year - year % 100 - 10, 0, 1),\n min: createDate(minYear, 0, 1),\n max: createDate(maxYear, 0, 1),\n otherMonth: options.otherMonth,\n html: html,\n setter: this.setDate,\n build: function (date, idx) {\n var cssClass = ['k-calendar-td'];\n var start = date.getFullYear(), end = start + 9;\n if (idx === 0 || idx === 11) {\n cssClass.push(OTHERMONTH);\n }\n if (start < min) {\n start = min;\n }\n if (end > max) {\n end = max;\n }\n return {\n ns: kendo.ns,\n value: start + ' - ' + end,\n dateString: toDateString(date),\n cssClass: cssClass.join(' ')\n };\n }\n });\n },\n first: function (date) {\n var year = date.getFullYear();\n return createDate(year - year % 100, date.getMonth(), date.getDate());\n },\n last: function (date) {\n var year = date.getFullYear();\n return createDate(year - year % 100 + 99, date.getMonth(), date.getDate());\n },\n compare: function (date1, date2) {\n return compare(date1, date2, 100);\n },\n setDate: function (date, value) {\n setDate(date, value, 10);\n },\n toDateString: function (date) {\n var year = date.getFullYear();\n return year - year % 10 + '/0/1';\n },\n valueType: function () {\n return 'decade';\n }\n }\n ]\n };\n function title(date, min, max, modular) {\n var start = date.getFullYear(), minYear = min.getFullYear(), maxYear = max.getFullYear(), end;\n start = start - start % modular;\n end = start + (modular - 1);\n if (start < minYear) {\n start = minYear;\n }\n if (end > maxYear) {\n end = maxYear;\n }\n return start + '-' + end;\n }\n function view(options) {\n var idx = 0, data, min = options.min, max = options.max, start = options.start, setter = options.setter, build = options.build, weekNumberBuild = options.weekNumberBuild, length = options.cells || 12, isWeekColumnVisible = options.isWeekColumnVisible, cellsPerRow = options.perRow || 4, otherMonth = options.otherMonth, lastDayOfMonth = options.lastDayOfMonth, weekNumber = options.weekNumber || weekNumberTemplate, content = options.content || cellTemplate, empty = options.empty || emptyCellTemplate, otherMonthTemplate = options.otherMonthCellTemplate || otherMonthCellTemplate, html = options.html || '
';\n html += this.title(options.date, options.min, options.max);\n html += '
';\n if (isWeekColumnVisible) {\n html += weekNumber(weekNumberBuild(start));\n }\n for (; idx < length; idx++) {\n if (idx > 0 && idx % cellsPerRow === 0) {\n html += '';\n if (isWeekColumnVisible) {\n html += otherMonth || +start <= +lastDayOfMonth ? weekNumber(weekNumberBuild(start)) : weekNumber({ weekNumber: ' ' });\n }\n }\n start = createDate(start.getFullYear(), start.getMonth(), start.getDate());\n adjustDST(start, 0);\n data = build(start, idx, options.disableDates);\n html += data.cssClass.indexOf(OTHERMONTH) !== -1 && !otherMonth ? otherMonthTemplate(data) : isInRange(start, min, max) ? content(data) : empty(data);\n setter(start, 1);\n }\n return html + '
';\n }\n function compare(date1, date2, modifier) {\n var year1 = date1.getFullYear(), start = date2.getFullYear(), end = start, result = 0;\n if (modifier) {\n start = start - start % modifier;\n end = start - start % modifier + modifier - 1;\n }\n if (year1 > end) {\n result = 1;\n } else if (year1 < start) {\n result = -1;\n }\n return result;\n }\n function getToday() {\n var today = new DATE();\n return new DATE(today.getFullYear(), today.getMonth(), today.getDate());\n }\n function restrictValue(value, min, max) {\n var today = getToday();\n if (value) {\n today = new DATE(+value);\n }\n if (min > today) {\n today = new DATE(+min);\n } else if (max < today) {\n today = new DATE(+max);\n }\n return today;\n }\n function isInRange(date, min, max) {\n return +date >= +min && +date <= +max;\n }\n function shiftArray(array, idx) {\n return array.slice(idx).concat(array.slice(0, idx));\n }\n function setDate(date, value, multiplier) {\n value = value instanceof DATE ? value.getFullYear() : date.getFullYear() + multiplier * value;\n date.setFullYear(value);\n }\n function daysBetweenTwoDates(startDate, endDate) {\n if (+endDate < +startDate) {\n var temp = +startDate;\n calendar.views[0].setDate(startDate, endDate);\n calendar.views[0].setDate(endDate, new Date(temp));\n }\n var fromDateUTC = Date.UTC(startDate.getFullYear(), startDate.getMonth(), startDate.getDate());\n var endDateUTC = Date.UTC(endDate.getFullYear(), endDate.getMonth(), endDate.getDate());\n return Math.ceil((+endDateUTC - +fromDateUTC) / kendo.date.MS_PER_DAY);\n }\n function addDaysToArray(array, numberOfDays, fromDate, disableDates) {\n for (var i = 0; i <= numberOfDays; i++) {\n var nextDay = new Date(fromDate.getTime());\n nextDay = new Date(nextDay.setDate(nextDay.getDate() + i));\n if (!disableDates(nextDay)) {\n array.push(nextDay);\n }\n }\n }\n function mousetoggle(e) {\n var disabled = $(this).hasClass('k-state-disabled');\n if (!disabled) {\n $(this).toggleClass(HOVER, MOUSEENTER.indexOf(e.type) > -1 || e.type == FOCUS);\n }\n }\n function prevent(e) {\n e.preventDefault();\n }\n function createDate(year, month, date) {\n var dateObject = new DATE(year, month, date);\n dateObject.setFullYear(year, month, date);\n return dateObject;\n }\n function getCalendarInfo(culture) {\n return getCulture(culture).calendars.standard;\n }\n function normalize(options) {\n var start = views[options.start], depth = views[options.depth], culture = getCulture(options.culture);\n options.format = extractFormat(options.format || culture.calendars.standard.patterns.d);\n if (isNaN(start)) {\n start = 0;\n options.start = MONTH;\n }\n if (depth === undefined || depth > start) {\n options.depth = MONTH;\n }\n if (options.dates === null) {\n options.dates = [];\n }\n }\n function addClassToViewContainer(element, currentView) {\n element.addClass('k-' + currentView);\n }\n function inArray(date, dates) {\n for (var i = 0, length = dates.length; i < length; i++) {\n if (date === +dates[i]) {\n return true;\n }\n }\n return false;\n }\n function isEqualDatePart(value1, value2) {\n if (value1) {\n return value1.getFullYear() === value2.getFullYear() && value1.getMonth() === value2.getMonth() && value1.getDate() === value2.getDate();\n }\n return false;\n }\n function isEqualMonth(value1, value2) {\n if (value1) {\n return value1.getFullYear() === value2.getFullYear() && value1.getMonth() === value2.getMonth();\n }\n return false;\n }\n function getDisabledExpr(option) {\n if (kendo.isFunction(option)) {\n return option;\n }\n if ($.isArray(option)) {\n return createDisabledExpr(option);\n }\n return $.noop;\n }\n function convertDatesArray(dates) {\n var result = [];\n for (var i = 0; i < dates.length; i++) {\n result.push(dates[i].setHours(0, 0, 0, 0));\n }\n return result;\n }\n function createDisabledExpr(dates) {\n var body, callback, disabledDates = [], days = [\n 'su',\n 'mo',\n 'tu',\n 'we',\n 'th',\n 'fr',\n 'sa'\n ], searchExpression = 'if (found) {' + ' return true ' + '} else {' + 'return false' + '}';\n if (dates[0] instanceof DATE) {\n disabledDates = convertDatesArray(dates);\n body = 'var clonedDate = new Date(date); var found = date && window.kendo.jQuery.inArray(clonedDate.setHours(0, 0, 0, 0),[' + disabledDates + ']) > -1;' + searchExpression;\n } else {\n for (var i = 0; i < dates.length; i++) {\n var day = dates[i].slice(0, 2).toLowerCase();\n var index = $.inArray(day, days);\n if (index > -1) {\n disabledDates.push(index);\n }\n }\n body = 'var clonedDate = new Date(date); var found = date && window.kendo.jQuery.inArray(clonedDate.getDay(),[' + disabledDates + ']) > -1;' + searchExpression;\n }\n callback = new Function('date', body);\n return callback;\n }\n function isEqualDate(oldValue, newValue) {\n if (oldValue instanceof Date && newValue instanceof Date) {\n oldValue = oldValue.getTime();\n newValue = newValue.getTime();\n }\n return oldValue === newValue;\n }\n function toDateObject(link) {\n var value = $(link).attr(kendo.attr(VALUE)).split('/');\n value = createDate(value[0], value[1], value[2]);\n return value;\n }\n calendar.isEqualDatePart = isEqualDatePart;\n calendar.isEqualDate = isEqualDate;\n calendar.restrictValue = restrictValue;\n calendar.isInRange = isInRange;\n calendar.addClassToViewContainer = addClassToViewContainer;\n calendar.normalize = normalize;\n calendar.viewsEnum = views;\n calendar.disabled = getDisabledExpr;\n calendar.toDateObject = toDateObject;\n calendar.getToday = getToday;\n calendar.createDate = createDate;\n kendo.calendar = calendar;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"]}