{"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","_cellID","_isMultipleSelection","first","closest","last","_lastActive","selectRange","event","_current","_value","_class","_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","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","className","disabledDate","removeAttribute","appendTo","show","toString","actionAttr","_todayClick","arrow","firstDayCurrentMonth","has","isBigger","toggle","isTodayDisabled","todayClass","_todayClass","footerTemplate","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 (id) {\n that._cellID = id + '_cell_selected';\n }\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._class(FOCUSED, 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 that._cell.removeClass(FOCUSED);\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._class('k-state-selected', that._value);\n }\n }\n that._class(FOCUSED, 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._class(FOCUSED, toDateObject(target.find('a')));\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._class(FOCUSED, 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._class(FOCUSED, 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._class(FOCUSED, 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 _class: function (className, date) {\n var that = this, id = that._cellID, cell = that._cell, value = that._view.toDateString(date), disabledDate;\n if (cell && cell.length) {\n cell[0].removeAttribute(ARIA_SELECTED);\n cell[0].removeAttribute(ARIA_LABEL);\n cell[0].removeAttribute(ID);\n }\n if (date && that._view.name == 'month') {\n disabledDate = that.options.disableDates(date);\n }\n that._cellsBySelector(that._isMultipleSelection() ? CELLSELECTOR : 'td:not(.' + OTHERMONTH + ')').removeClass(className);\n cell = that._cellByDate(value, that.options.selectable == 'multiple' ? CELLSELECTOR : 'td:not(.' + OTHERMONTH + ')').attr(ARIA_SELECTED, true);\n if (className === FOCUSED && !that._active && that.options.focusOnNav !== false || disabledDate) {\n className = '';\n }\n cell.addClass(className);\n if (cell[0]) {\n that._cell = cell;\n }\n if (id) {\n cell.attr(ID, id);\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._class(FOCUSED, 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 });\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 },\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 },\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 },\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 }\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}));"]}