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