{"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","OTHERMONTHCLASS","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', OTHERMONTHCLASS = ' class=\"' + OTHERMONTH + '\"', 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-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-link',\n contentClasses: 'k-content'\n },\n 'modern': {\n header: { template: MODERN_HEADER_TEMPLATE },\n hasFooter: false,\n linksSelector: '.k-button',\n contentClasses: '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 if (that[PREVARROW].hasClass(DISABLED)) {\n that[PREVARROW].removeClass(HOVER);\n }\n disabled = compare(value, max) > -1;\n that[NEXTARROW].toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n if (that[NEXTARROW].hasClass(DISABLED)) {\n that[NEXTARROW].removeClass(HOVER);\n }\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 if (that.options.componentType === 'modern') {\n viewWrapper.removeClass('k-calendar-monthview k-calendar-yearview k-calendar-decadeview k-calendar-centuryview');\n viewWrapper.addClass('k-calendar-' + currentView.name + 'view');\n }\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(MOUSEENTER_WITH_NS + ' ' + MOUSELEAVE + ' ' + FOCUS_WITH_NS + ' ' + BLUR, mousetoggle).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 this.options.componentType === 'modern' ? 'k-today' : 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 } else {\n html += '';\n }\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 = [], 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[0] ? ' class=\"' + 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 }\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 return {\n value: namesAbbr[date.getMonth()],\n ns: kendo.ns,\n dateString: toDateString(date),\n cssClass: ''\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 }\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 return {\n value: date.getFullYear(),\n ns: kendo.ns,\n dateString: toDateString(date),\n cssClass: idx === 0 || idx == 11 ? OTHERMONTHCLASS : ''\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 }\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 start = date.getFullYear(), end = start + 9;\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: idx === 0 || idx == 11 ? OTHERMONTHCLASS : ''\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}));"]}