{"version":3,"sources":["kendo.scheduler.view.js"],"names":["f","define","kendo","ui","scheduler","$","levels","values","key","collect","depth","level","idx","result","length","push","cellspacing","support","cssBorderSpacing","table","tableRows","className","trim","join","allDayTable","timesHeader","columnLevelCount","allDaySlot","rowCount","text","datesHeader","columnLevels","columnCount","columnIndex","columnLevelIndex","th","colspan","column","allDayTableRows","lastLevel","td","cellContent","dateTableRows","times","rowLevels","rowIndex","rowLevelIndex","rowspan","rows","Array","split","rowHeaderRows","allDay","content","scrollbar","scrollbarWidth","collidingEvents","elements","start","end","index","startIndex","overlaps","endIndex","rangeIndex","eventsForSlot","eventElement","slotStart","slotEnd","event","events","createColumns","eventElements","_createColumns","createRows","eventRange","j","columnLength","endOverlaps","columns","createDateLayoutConfiguration","name","dates","inner","configuration","each","item","obj","minorTicks","createLayoutConfiguration","resources","template","data","dataIndex","resource","dataSource","view","htmlEncode","getter","dataTextField","color","dataColorField","field","title","value","dataValueField","slice","groupEqFilter","isArray","ObservableArray","addSelectedState","cell","replace","selectedStateRegExp","Color","window","getDate","date","Widget","outerHeight","_outerHeight","keys","NS","math","Math","HINT","ResourceView","Class","extend","init","isRtl","this","_index","_timeSlotCollections","_daySlotCollections","_isRtl","addTimeSlotCollection","startDate","endDate","_addCollection","addDaySlotCollection","collections","collection","SlotCollection","timeSlotCollectionCount","daySlotCollectionCount","daySlotByPosition","x","y","byDate","_slotByPosition","timeSlotByPosition","collectionIndex","slotIndex","slot","width","height","nextSlot","horizontalEnd","verticalEnd","count","at","offsetWidth","offsetHeight","offsetLeft","offsetTop","refresh","timeSlotRanges","startTime","endTime","_startSlot","inRange","_endSlot","first","last","_continuousRange","TimeSlotRange","daySlotRanges","isAllDay","MS_PER_DAY","DaySlotRange","range","head","tail","startSlot","endSlot","ranges","slotRanges","isDay","_startTime","toUtcTime","_endTime","undefined","isMultiDay","_startCollection","startInRange","_endCollection","endInRange","_getCollections","continuousSlot","reverse","pad","isDaySlot","firstSlot","lastSlot","upSlot","keepCollection","groupByDateVertically","that","moveToDaySlot","isFirstCell","_verticalSlot","downSlot","moveToTimeSlot","leftSlot","_horizontalSlot","rightSlot","step","swapCollection","_collection","multiday","time","slotByStartDate","slotByEndDate","getSlotCollection","getTimeSlotCollection","getDaySlotCollection","SlotRange","options","innerHeight","addEvent","outerRect","snap","_rect","property","top","bottom","left","right","startOffset","startSlotDuration","endOffset","endSlotDuration","element","round","innerRect","innerWidth","groupIndex","_slots","_events","_start","_end","_groupIndex","_collectionIndex","allday","addTimeSlot","isHorizontal","TimeSlot","addDaySlot","eventCount","DaySlot","Slot","clientWidth","clientHeight","timezone","toLocalDate","fn","apply","arguments","offsetX","rtl","offset","duration","difference","floor","children","firstChild","firstChildHeight","firstChildTop","Date","SchedulerView","call","_normalizeOptions","_scrollbar","_resizeHint","_moveHint","_cellId","guid","_resourcesForGroups","_selectedSlots","visibleEndDate","setMilliseconds","workDayStart","workDayEnd","_isMobile","mobile","mobileOS","_isMobilePhoneView","tablet","_addResourceView","resourceView","groups","dateForTitle","format","selectedDateFormat","shortDateForTitle","selectedShortDateFormat","_changeGroup","selection","previous","method","_isGroupedByDate","_changeDate","group","_changeGroupContinuously","_changeViewPeriod","_isInRange","newStart","newEnd","min","max","_horizontalSlots","multiple","tempSlot","horizontalRange","isVertical","_isVerticallyGrouped","_normalizeHorizontalSelection","_getNextHorizontalRange","_continuousSlot","_verticalSlots","verticalRange","_normalizeVerticalSelection","_getNextVerticalRange","constrainSelection","move","shift","slots","backward","handled","verticalByDate","DOWN","UP","_updateDirection","LEFT","RIGHT","moveToEventInGroup","selectedEvents","prev","found","lastSelected","i","_continuousEvents","uid","inArray","moveToEvent","allEvents","uniqueAllEvents","sortedEvents","eventIndex","_getAllEvents","_getUniqueEvents","_getSortedEvents","_getNextEventIndexBySlot","_getStartIdx","_getSelectedSlot","current","candidate","_current","has","_scrollTo","select","clearSelection","_selectEvents","_selectSlots","eventStartDate","tempIndex","slotStartDate","getTime","selectedEventIndex","concat","exists","sort","second","firstStartDate","secondStartDate","setAttribute","groupEvent","groupEvents","add","indexOf","addClass","attr","addDays","_resourceValue","valuePrimitive","_resourceBySlot","resourceIndex","setter","groupedResources","total","_createResizeHint","css","_removeResizeHint","remove","_removeMoveHint","filter","container","elementOffset","elementOffsetDir","containerScroll","scrollTop","containerOffsetDir","bottomDistance","_shouldInverseResourceColor","resourceColorIsDark","isDark","currentColor","currentColorIsDark","_eventTmpl","wrapper","tmpl","settings","Template","templateSettings","paramName","html","type","state","storage","proxy","eventResources","eventResource","resourceColor","get","createLayout","layout","allDayIndex","splice","find","append","_topSection","_bottomSection","_scroller","refreshLayout","datesHeaderRows","isSchedulerHeightSet","contentDiv","timesTable","toolbar","headerHeight","paddingDirection","eq","footer","el","initialHeight","newHeight","style","kineticScrollNeeded","parseInt","removeClass","wrap","parent","touchScroller","bind","scrollLeft","avoidScrolling","e","target","closest","movable","_touchScroller","scrollElement","sender","groupIdx","groupLength","_createDateLayout","_createColumnsLayout","_groupOrientation","orientation","_createRowsLayout","selectionByElement","removeAttr","destroy","calendarInfo","getCulture","calendars","standard","prevGroupSlot","nextGroupSlot","_eventOptionsForMove","_updateEventForResize","_updateEventForSelection","re","processor","parts","channels","formats","resolveColor","process","exec","r","g","b","normalizeByte","prototype","charAt","substr","toLowerCase","namedColors","isNaN","percBrightness","sqrt","brightnessValue","aqua","azure","beige","black","blue","brown","coral","cyan","darkblue","darkcyan","darkgray","darkgreen","darkorange","darkred","dimgray","fuchsia","gold","goldenrod","gray","green","greenyellow","indigo","ivory","khaki","lightblue","lightgrey","lightgreen","lightpink","lightyellow","lime","limegreen","linen","magenta","maroon","mediumblue","navy","olive","orange","orangered","orchid","pink","plum","purple","red","royalblue","salmon","silver","skyblue","slateblue","slategray","snow","steelblue","tan","teal","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","jQuery","amd","a1","a2","a3"],"mappings":"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","file":"kendo.scheduler.view.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.scheduler.view', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'scheduler.view',\n name: 'Scheduler View',\n category: 'web',\n description: 'The Scheduler Common View',\n depends: ['core'],\n hidden: true\n };\n kendo.ui.scheduler = {};\n (function ($) {\n var kendo = window.kendo, ui = kendo.ui, getDate = kendo.date.getDate, Widget = ui.Widget, outerHeight = kendo._outerHeight, keys = kendo.keys, NS = '.kendoSchedulerView', math = Math;\n function levels(values, key) {\n var result = [];\n function collect(depth, values) {\n values = values[key];\n if (values) {\n var level = result[depth] = result[depth] || [];\n for (var idx = 0; idx < values.length; idx++) {\n level.push(values[idx]);\n collect(depth + 1, values[idx]);\n }\n }\n }\n collect(0, values);\n return result;\n }\n function cellspacing() {\n if (kendo.support.cssBorderSpacing) {\n return '';\n }\n return 'cellspacing=\"0\"';\n }\n function table(tableRows, className) {\n if (!tableRows.length) {\n return '';\n }\n return '' + '' + tableRows.join('') + '' + '
';\n }\n function allDayTable(tableRows, className) {\n if (!tableRows.length) {\n return '';\n }\n return '
' + table(tableRows, className) + '
';\n }\n function timesHeader(columnLevelCount, allDaySlot, rowCount) {\n var tableRows = [];\n if (rowCount > 0) {\n for (var idx = 0; idx < columnLevelCount; idx++) {\n tableRows.push('​');\n }\n }\n if (allDaySlot) {\n tableRows.push('' + allDaySlot.text + '');\n }\n if (rowCount < 1) {\n return $();\n }\n return $('
' + table(tableRows) + '
');\n }\n function datesHeader(columnLevels, columnCount, allDaySlot) {\n var dateTableRows = [];\n var columnIndex;\n for (var columnLevelIndex = 0; columnLevelIndex < columnLevels.length; columnLevelIndex++) {\n var level = columnLevels[columnLevelIndex];\n var th = [];\n var colspan = columnCount / level.length;\n for (columnIndex = 0; columnIndex < level.length; columnIndex++) {\n var column = level[columnIndex];\n th.push('' + column.text + '');\n }\n dateTableRows.push(th.join(''));\n }\n var allDayTableRows = [];\n if (allDaySlot) {\n var lastLevel = columnLevels[columnLevels.length - 1];\n var td = [];\n var cellContent = allDaySlot.cellContent;\n for (columnIndex = 0; columnIndex < lastLevel.length; columnIndex++) {\n td.push('' + (cellContent ? cellContent(columnIndex) : ' ') + '');\n }\n allDayTableRows.push(td.join(''));\n }\n return $('
' + '
' + table(dateTableRows) + allDayTable(allDayTableRows, 'k-scheduler-header-all-day') + '
' + '
');\n }\n function times(rowLevels, rowCount) {\n var rows = new Array(rowCount).join().split(',');\n var rowHeaderRows = [];\n var rowIndex;\n for (var rowLevelIndex = 0; rowLevelIndex < rowLevels.length; rowLevelIndex++) {\n var level = rowLevels[rowLevelIndex];\n var rowspan = rowCount / level.length;\n var className;\n for (rowIndex = 0; rowIndex < level.length; rowIndex++) {\n className = level[rowIndex].className || '';\n if (level[rowIndex].allDay) {\n className = 'k-scheduler-times-all-day';\n }\n rows[rowspan * rowIndex] += '' + level[rowIndex].text + '';\n }\n }\n for (rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n rowHeaderRows.push(rows[rowIndex]);\n }\n if (rowCount < 1) {\n return $();\n }\n return $('
' + table(rowHeaderRows) + '
');\n }\n function content() {\n return $('
' + '' + '');\n }\n var HINT = '
' + '
' + '
' + '
' + '
' + '
' + '
';\n var ResourceView = kendo.Class.extend({\n init: function (index, isRtl) {\n this._index = index;\n this._timeSlotCollections = [];\n this._daySlotCollections = [];\n this._isRtl = isRtl;\n },\n addTimeSlotCollection: function (startDate, endDate) {\n return this._addCollection(startDate, endDate, this._timeSlotCollections);\n },\n addDaySlotCollection: function (startDate, endDate) {\n return this._addCollection(startDate, endDate, this._daySlotCollections);\n },\n _addCollection: function (startDate, endDate, collections) {\n var collection = new SlotCollection(startDate, endDate, this._index, collections.length);\n collections.push(collection);\n return collection;\n },\n timeSlotCollectionCount: function () {\n return this._timeSlotCollections.length;\n },\n daySlotCollectionCount: function () {\n return this._daySlotCollections.length;\n },\n daySlotByPosition: function (x, y, byDate) {\n return this._slotByPosition(x, y, this._daySlotCollections, byDate);\n },\n timeSlotByPosition: function (x, y, byDate) {\n return this._slotByPosition(x, y, this._timeSlotCollections, byDate);\n },\n _slotByPosition: function (x, y, collections, byDate) {\n for (var collectionIndex = 0; collectionIndex < collections.length; collectionIndex++) {\n var collection = collections[collectionIndex];\n for (var slotIndex = 0; slotIndex < collection.count(); slotIndex++) {\n var slot = collection.at(slotIndex);\n var width = slot.offsetWidth;\n var height = slot.offsetHeight;\n var nextSlot;\n var horizontalEnd = slot.offsetLeft + width;\n var verticalEnd = slot.offsetTop + height;\n if (!byDate) {\n nextSlot = collection.at(slotIndex + 1);\n }\n if (nextSlot) {\n if (nextSlot.offsetLeft != slot.offsetLeft) {\n if (this._isRtl) {\n horizontalEnd = slot.offsetLeft + (slot.offsetLeft - nextSlot.offsetLeft);\n } else {\n horizontalEnd = nextSlot.offsetLeft;\n }\n } else {\n verticalEnd = nextSlot.offsetTop;\n }\n }\n if (x >= slot.offsetLeft && x < horizontalEnd && y >= slot.offsetTop && y < verticalEnd) {\n return slot;\n }\n }\n }\n },\n refresh: function () {\n var collectionIndex;\n for (collectionIndex = 0; collectionIndex < this._daySlotCollections.length; collectionIndex++) {\n this._daySlotCollections[collectionIndex].refresh();\n }\n for (collectionIndex = 0; collectionIndex < this._timeSlotCollections.length; collectionIndex++) {\n this._timeSlotCollections[collectionIndex].refresh();\n }\n },\n timeSlotRanges: function (startTime, endTime) {\n var collections = this._timeSlotCollections;\n var start = this._startSlot(startTime, collections);\n if (!start.inRange && startTime >= start.slot.end) {\n start = null;\n }\n var end = start;\n if (startTime < endTime) {\n end = this._endSlot(endTime, collections);\n }\n if (end && !end.inRange && endTime <= end.slot.start) {\n end = null;\n }\n if (start === null && end === null) {\n return [];\n }\n if (start === null) {\n if (end.slot.end <= startTime) {\n return [];\n }\n start = {\n inRange: true,\n slot: collections[end.slot.collectionIndex].first()\n };\n }\n if (end === null) {\n if (start.slot.start >= endTime) {\n return [];\n }\n end = {\n inRange: true,\n slot: collections[start.slot.collectionIndex].last()\n };\n }\n return this._continuousRange(TimeSlotRange, collections, start, end);\n },\n daySlotRanges: function (startTime, endTime, isAllDay) {\n var collections = this._daySlotCollections;\n var start = this._startSlot(startTime, collections, isAllDay);\n if (!start.inRange && startTime >= start.slot.end) {\n start = null;\n }\n var end = start;\n if (startTime < endTime) {\n end = this._endSlot(endTime, collections, isAllDay);\n }\n if (end && !end.inRange && endTime <= end.slot.start) {\n end = null;\n }\n if (start === null && end === null) {\n return [];\n }\n if (start === null) {\n if (end.slot.end <= startTime) {\n return [];\n }\n do {\n startTime += kendo.date.MS_PER_DAY;\n start = this._startSlot(startTime, collections, isAllDay);\n } while (!start.inRange && startTime >= start.slot.end);\n }\n if (end === null) {\n if (start.slot.start >= endTime) {\n return [];\n }\n do {\n endTime -= kendo.date.MS_PER_DAY;\n end = this._endSlot(endTime, collections, isAllDay);\n } while (!end.inRange && endTime <= end.slot.start);\n }\n return this._continuousRange(DaySlotRange, collections, start, end);\n },\n _continuousRange: function (range, collections, start, end) {\n var startSlot = start.slot;\n var endSlot = end.slot;\n var startIndex = startSlot.collectionIndex;\n var endIndex = endSlot.collectionIndex;\n var ranges = [];\n for (var collectionIndex = startIndex; collectionIndex <= endIndex; collectionIndex++) {\n var collection = collections[collectionIndex];\n var first = collection.first();\n var last = collection.last();\n var head = false;\n var tail = false;\n if (collectionIndex == startIndex) {\n tail = !start.inRange;\n }\n if (collectionIndex == endIndex) {\n head = !end.inRange;\n }\n if (first.start < startSlot.start) {\n first = startSlot;\n }\n if (last.start > endSlot.start) {\n last = endSlot;\n }\n if (startIndex < endIndex) {\n if (collectionIndex == startIndex) {\n head = true;\n } else if (collectionIndex == endIndex) {\n tail = true;\n } else {\n head = tail = true;\n }\n }\n ranges.push(new range({\n start: first,\n end: last,\n collection: collection,\n head: head,\n tail: tail\n }));\n }\n return ranges;\n },\n slotRanges: function (event, isDay) {\n var startTime = event._startTime || kendo.date.toUtcTime(event.start);\n var endTime = event._endTime || kendo.date.toUtcTime(event.end);\n if (isDay === undefined) {\n isDay = event.isMultiDay();\n }\n if (isDay) {\n return this.daySlotRanges(startTime, endTime, event.isAllDay);\n }\n return this.timeSlotRanges(startTime, endTime);\n },\n ranges: function (startTime, endTime, isDay, isAllDay) {\n if (typeof startTime != 'number') {\n startTime = kendo.date.toUtcTime(startTime);\n }\n if (typeof endTime != 'number') {\n endTime = kendo.date.toUtcTime(endTime);\n }\n if (isDay) {\n return this.daySlotRanges(startTime, endTime, isAllDay);\n }\n return this.timeSlotRanges(startTime, endTime);\n },\n _startCollection: function (date, collections) {\n for (var collectionIndex = 0; collectionIndex < collections.length; collectionIndex++) {\n var collection = collections[collectionIndex];\n if (collection.startInRange(date)) {\n return collection;\n }\n }\n return null;\n },\n _endCollection: function (date, collections, isAllDay) {\n for (var collectionIndex = 0; collectionIndex < collections.length; collectionIndex++) {\n var collection = collections[collectionIndex];\n if (collection.endInRange(date, isAllDay)) {\n return collection;\n }\n }\n return null;\n },\n _getCollections: function (isDay) {\n return isDay ? this._daySlotCollections : this._timeSlotCollections;\n },\n continuousSlot: function (slot, reverse) {\n var pad = reverse ? -1 : 1;\n var collections = this._getCollections(slot.isDaySlot);\n var collection = collections[slot.collectionIndex + pad];\n return collection ? collection[reverse ? 'last' : 'first']() : undefined;\n },\n firstSlot: function () {\n var collections = this._getCollections(this.daySlotCollectionCount());\n return collections[0].first();\n },\n lastSlot: function () {\n var collections = this._getCollections(this.daySlotCollectionCount());\n return collections[collections.length - 1].last();\n },\n upSlot: function (slot, keepCollection, groupByDateVertically) {\n var that = this;\n var moveToDaySlot = function (isDaySlot, collectionIndex, index) {\n var isFirstCell = index === 0;\n if (!keepCollection && !isDaySlot && isFirstCell && that.daySlotCollectionCount()) {\n return that._daySlotCollections[0].at(collectionIndex);\n }\n };\n if (!this.timeSlotCollectionCount()) {\n keepCollection = true;\n }\n return this._verticalSlot(slot, -1, moveToDaySlot, groupByDateVertically);\n },\n downSlot: function (slot, keepCollection, groupByDateVertically) {\n var that = this;\n var moveToTimeSlot = function (isDaySlot, collectionIndex, index) {\n if (!keepCollection && isDaySlot && that.timeSlotCollectionCount()) {\n return that._timeSlotCollections[index].at(0);\n }\n };\n if (!this.timeSlotCollectionCount()) {\n keepCollection = true;\n }\n return this._verticalSlot(slot, 1, moveToTimeSlot, groupByDateVertically);\n },\n leftSlot: function (slot, groupByDateVertically) {\n return this._horizontalSlot(slot, -1, groupByDateVertically);\n },\n rightSlot: function (slot, groupByDateVertically) {\n return this._horizontalSlot(slot, 1, groupByDateVertically);\n },\n _horizontalSlot: function (slot, step, groupByDateVertically) {\n var index = slot.index;\n var isDaySlot = slot.isDaySlot;\n var collectionIndex = slot.collectionIndex;\n var collections = this._getCollections(isDaySlot);\n isDaySlot = groupByDateVertically ? false : isDaySlot;\n if (isDaySlot) {\n index += step;\n } else {\n collectionIndex += step;\n }\n var collection = collections[collectionIndex];\n return collection ? collection.at(index) : undefined;\n },\n _verticalSlot: function (slot, step, swapCollection, groupByDateVertically) {\n var index = slot.index;\n var isDaySlot = slot.isDaySlot;\n var collectionIndex = slot.collectionIndex;\n var collections = this._getCollections(isDaySlot);\n slot = swapCollection(isDaySlot, collectionIndex, index);\n if (slot) {\n return slot;\n }\n isDaySlot = groupByDateVertically ? false : isDaySlot;\n if (isDaySlot) {\n collectionIndex += step;\n } else {\n index += step;\n }\n var collection = collections[collectionIndex];\n return collection ? collection.at(index) : undefined;\n },\n _collection: function (index, multiday) {\n var collections = multiday ? this._daySlotCollections : this._timeSlotCollections;\n return collections[index];\n },\n _startSlot: function (time, collections, isAllDay) {\n var collection = this._startCollection(time, collections);\n var inRange = true;\n if (!collection) {\n collection = collections[0];\n inRange = false;\n }\n var slot = collection.slotByStartDate(time, isAllDay);\n if (!slot) {\n slot = collection.first();\n inRange = false;\n }\n return {\n slot: slot,\n inRange: inRange\n };\n },\n _endSlot: function (time, collections, isAllDay) {\n var collection = this._endCollection(time, collections, isAllDay);\n var inRange = true;\n if (!collection) {\n collection = collections[collections.length - 1];\n inRange = false;\n }\n var slot = collection.slotByEndDate(time, isAllDay);\n if (!slot) {\n slot = collection.last();\n inRange = false;\n }\n return {\n slot: slot,\n inRange: inRange\n };\n },\n getSlotCollection: function (index, isDay) {\n return this[isDay ? 'getDaySlotCollection' : 'getTimeSlotCollection'](index);\n },\n getTimeSlotCollection: function (index) {\n return this._timeSlotCollections[index];\n },\n getDaySlotCollection: function (index) {\n return this._daySlotCollections[index];\n }\n });\n var SlotRange = kendo.Class.extend({\n init: function (options) {\n $.extend(this, options);\n },\n innerHeight: function () {\n var collection = this.collection;\n var startIndex = this.start.index;\n var endIndex = this.end.index;\n var result = 0;\n for (var slotIndex = startIndex; slotIndex <= endIndex; slotIndex++) {\n result += collection.at(slotIndex).offsetHeight;\n }\n return result;\n },\n events: function () {\n return this.collection.events();\n },\n addEvent: function (event) {\n this.events().push(event);\n },\n startSlot: function () {\n if (this.start.offsetLeft > this.end.offsetLeft) {\n return this.end;\n }\n return this.start;\n },\n endSlot: function () {\n if (this.start.offsetLeft > this.end.offsetLeft) {\n return this.start;\n }\n return this.end;\n }\n });\n var TimeSlotRange = SlotRange.extend({\n innerHeight: function () {\n var collection = this.collection;\n var startIndex = this.start.index;\n var endIndex = this.end.index;\n var result = 0;\n for (var slotIndex = startIndex; slotIndex <= endIndex; slotIndex++) {\n result += collection.at(slotIndex).offsetHeight;\n }\n return result;\n },\n outerRect: function (start, end, snap) {\n return this._rect('offset', start, end, snap);\n },\n _rect: function (property, start, end, snap) {\n var top;\n var bottom;\n var left;\n var right;\n var startSlot = this.start;\n var endSlot = this.end;\n var isRtl = kendo.support.isRtl(startSlot.element);\n if (typeof start != 'number') {\n start = kendo.date.toUtcTime(start);\n }\n if (typeof end != 'number') {\n end = kendo.date.toUtcTime(end);\n }\n if (snap) {\n top = startSlot.offsetTop;\n bottom = endSlot.offsetTop + endSlot[property + 'Height'];\n if (isRtl) {\n left = endSlot.offsetLeft;\n right = startSlot.offsetLeft + startSlot[property + 'Width'];\n } else {\n left = startSlot.offsetLeft;\n right = endSlot.offsetLeft + endSlot[property + 'Width'];\n }\n } else {\n var startOffset = start - startSlot.start;\n if (startOffset < 0) {\n startOffset = 0;\n }\n var startSlotDuration = startSlot.end - startSlot.start;\n top = startSlot.offsetTop + startSlot[property + 'Height'] * startOffset / startSlotDuration;\n var endOffset = endSlot.end - end;\n if (endOffset < 0) {\n endOffset = 0;\n }\n var endSlotDuration = endSlot.end - endSlot.start;\n bottom = endSlot.offsetTop + endSlot[property + 'Height'] - endSlot[property + 'Height'] * endOffset / endSlotDuration;\n if (isRtl) {\n left = Math.round(endSlot.offsetLeft + endSlot[property + 'Width'] * endOffset / endSlotDuration);\n right = Math.round(startSlot.offsetLeft + startSlot[property + 'Width'] - startSlot[property + 'Width'] * startOffset / startSlotDuration);\n } else {\n left = Math.round(startSlot.offsetLeft + startSlot[property + 'Width'] * startOffset / startSlotDuration);\n right = Math.round(endSlot.offsetLeft + endSlot[property + 'Width'] - endSlot[property + 'Width'] * endOffset / endSlotDuration);\n }\n }\n return {\n top: top,\n bottom: bottom,\n left: left === 0 ? left : left + 1,\n right: right\n };\n },\n innerRect: function (start, end, snap) {\n return this._rect('client', start, end, snap);\n }\n });\n var DaySlotRange = SlotRange.extend({\n innerWidth: function () {\n var collection = this.collection;\n var startIndex = this.start.index;\n var endIndex = this.end.index;\n var result = 0;\n var width = startIndex !== endIndex ? 'offsetWidth' : 'clientWidth';\n for (var slotIndex = startIndex; slotIndex <= endIndex; slotIndex++) {\n result += collection.at(slotIndex)[width];\n }\n return result;\n }\n });\n var SlotCollection = kendo.Class.extend({\n init: function (startDate, endDate, groupIndex, collectionIndex) {\n this._slots = [];\n this._events = [];\n this._start = kendo.date.toUtcTime(startDate);\n this._end = kendo.date.toUtcTime(endDate);\n this._groupIndex = groupIndex;\n this._collectionIndex = collectionIndex;\n },\n refresh: function () {\n for (var slotIndex = 0; slotIndex < this._slots.length; slotIndex++) {\n this._slots[slotIndex].refresh();\n }\n },\n startInRange: function (date) {\n return this._start <= date && date < this._end;\n },\n endInRange: function (date, isAllDay) {\n var end = isAllDay ? date < this._end : date <= this._end;\n return this._start <= date && end;\n },\n slotByStartDate: function (date) {\n var time = date;\n if (typeof time != 'number') {\n time = kendo.date.toUtcTime(date);\n }\n for (var slotIndex = 0; slotIndex < this._slots.length; slotIndex++) {\n var slot = this._slots[slotIndex];\n if (slot.startInRange(time)) {\n return slot;\n }\n }\n return null;\n },\n slotByEndDate: function (date, allday) {\n var time = date;\n if (typeof time != 'number') {\n time = kendo.date.toUtcTime(date);\n }\n if (allday) {\n return this.slotByStartDate(date, false);\n }\n for (var slotIndex = 0; slotIndex < this._slots.length; slotIndex++) {\n var slot = this._slots[slotIndex];\n if (slot.endInRange(time)) {\n return slot;\n }\n }\n return null;\n },\n count: function () {\n return this._slots.length;\n },\n events: function () {\n return this._events;\n },\n addTimeSlot: function (element, start, end, isHorizontal) {\n var slot = new TimeSlot(element, start, end, this._groupIndex, this._collectionIndex, this._slots.length, isHorizontal);\n this._slots.push(slot);\n },\n addDaySlot: function (element, start, end, eventCount) {\n var slot = new DaySlot(element, start, end, this._groupIndex, this._collectionIndex, this._slots.length, eventCount);\n this._slots.push(slot);\n },\n first: function () {\n return this._slots[0];\n },\n last: function () {\n return this._slots[this._slots.length - 1];\n },\n at: function (index) {\n return this._slots[index];\n }\n });\n var Slot = kendo.Class.extend({\n init: function (element, start, end, groupIndex, collectionIndex, index) {\n this.element = element;\n this.clientWidth = element.clientWidth;\n this.clientHeight = element.clientHeight;\n this.offsetWidth = element.offsetWidth;\n this.offsetHeight = element.offsetHeight;\n this.offsetTop = element.offsetTop;\n this.offsetLeft = element.offsetLeft;\n this.start = start;\n this.end = end;\n this.element = element;\n this.groupIndex = groupIndex;\n this.collectionIndex = collectionIndex;\n this.index = index;\n this.isDaySlot = false;\n },\n refresh: function () {\n var element = this.element;\n this.clientWidth = element.clientWidth;\n this.clientHeight = element.clientHeight;\n this.offsetWidth = element.offsetWidth;\n this.offsetHeight = element.offsetHeight;\n this.offsetTop = element.offsetTop;\n this.offsetLeft = element.offsetLeft;\n },\n startDate: function () {\n return kendo.timezone.toLocalDate(this.start);\n },\n endDate: function () {\n return kendo.timezone.toLocalDate(this.end);\n },\n startInRange: function (date) {\n return this.start <= date && date < this.end;\n },\n endInRange: function (date) {\n return this.start < date && date <= this.end;\n },\n startOffset: function () {\n return this.start;\n },\n endOffset: function () {\n return this.end;\n }\n });\n var TimeSlot = Slot.extend({\n init: function (element, start, end, groupIndex, collectionIndex, index, isHorizontal) {\n Slot.fn.init.apply(this, arguments);\n this.isHorizontal = isHorizontal ? true : false;\n },\n offsetX: function (rtl, offset) {\n if (rtl) {\n return this.offsetLeft + offset;\n } else {\n return this.offsetLeft + offset;\n }\n },\n startInRange: function (date) {\n return this.start <= date && date < this.end;\n },\n endInRange: function (date) {\n return this.start < date && date <= this.end;\n },\n startOffset: function (x, y, snap) {\n if (snap) {\n return this.start;\n }\n var offset = $(this.element).offset();\n var duration = this.end - this.start;\n var difference;\n var time;\n if (this.isHorizontal) {\n var isRtl = kendo.support.isRtl(this.element);\n difference = x - offset.left;\n time = Math.floor(duration * (difference / this.offsetWidth));\n if (isRtl) {\n return this.start + duration - time;\n }\n } else {\n difference = y - offset.top;\n time = Math.floor(duration * (difference / this.offsetHeight));\n }\n return this.start + time;\n },\n endOffset: function (x, y, snap) {\n if (snap) {\n return this.end;\n }\n var offset = $(this.element).offset();\n var duration = this.end - this.start;\n var difference;\n var time;\n if (this.isHorizontal) {\n var isRtl = kendo.support.isRtl(this.element);\n difference = x - offset.left;\n time = Math.floor(duration * (difference / this.offsetWidth));\n if (isRtl) {\n return this.start + duration - time;\n }\n } else {\n difference = y - offset.top;\n time = Math.floor(duration * (difference / this.offsetHeight));\n }\n return this.start + time;\n }\n });\n var DaySlot = Slot.extend({\n init: function (element, start, end, groupIndex, collectionIndex, index, eventCount) {\n Slot.fn.init.apply(this, arguments);\n this.eventCount = eventCount;\n this.isDaySlot = true;\n if (this.element.children.length) {\n var firstChild = this.element.children[0];\n this.firstChildHeight = firstChild.offsetHeight;\n this.firstChildTop = firstChild.offsetTop;\n } else {\n this.firstChildHeight = 3;\n this.firstChildTop = 0;\n }\n },\n startDate: function () {\n var date = new Date(this.start);\n return kendo.timezone.apply(date, 'Etc/UTC');\n },\n endDate: function () {\n var date = new Date(this.end);\n return kendo.timezone.apply(date, 'Etc/UTC');\n },\n startInRange: function (date) {\n return this.start <= date && date < this.end;\n },\n endInRange: function (date) {\n return this.start < date && date <= this.end;\n }\n });\n var scrollbarWidth;\n function scrollbar() {\n scrollbarWidth = scrollbarWidth ? scrollbarWidth : kendo.support.scrollbar();\n return scrollbarWidth;\n }\n kendo.ui.SchedulerView = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this._normalizeOptions();\n this._scrollbar = scrollbar();\n this._isRtl = kendo.support.isRtl(element);\n this._resizeHint = $();\n this._moveHint = $();\n this._cellId = kendo.guid();\n this._resourcesForGroups();\n this._selectedSlots = [];\n },\n visibleEndDate: function () {\n return this.endDate();\n },\n _normalizeOptions: function () {\n var options = this.options;\n if (options.startTime) {\n options.startTime.setMilliseconds(0);\n }\n if (options.endTime) {\n options.endTime.setMilliseconds(0);\n }\n if (options.workDayStart) {\n options.workDayStart.setMilliseconds(0);\n }\n if (options.workDayEnd) {\n options.workDayEnd.setMilliseconds(0);\n }\n },\n _isMobile: function () {\n var options = this.options;\n return options.mobile === true && kendo.support.mobileOS || options.mobile === 'phone' || options.mobile === 'tablet';\n },\n _isMobilePhoneView: function () {\n var options = this.options;\n return options.mobile === true && kendo.support.mobileOS && !kendo.support.mobileOS.tablet || options.mobile === 'phone';\n },\n _addResourceView: function () {\n var resourceView = new ResourceView(this.groups.length, this._isRtl);\n this.groups.push(resourceView);\n return resourceView;\n },\n dateForTitle: function () {\n return kendo.format(this.options.selectedDateFormat, this.startDate(), this.endDate());\n },\n shortDateForTitle: function () {\n return kendo.format(this.options.selectedShortDateFormat, this.startDate(), this.endDate());\n },\n _changeGroup: function (selection, previous) {\n var method = previous ? 'prevGroupSlot' : 'nextGroupSlot';\n var slot = this[method](selection.start, selection.groupIndex, selection.isAllDay);\n if (slot) {\n selection.groupIndex += previous ? -1 : 1;\n }\n if (this._isGroupedByDate() && !slot) {\n selection.groupIndex = previous ? this.groups.length - 1 : 0;\n }\n return slot;\n },\n _changeDate: function (selection, slot, previous) {\n var group = this.groups[selection.groupIndex];\n var collections, index;\n if (previous) {\n collections = group._getCollections(false);\n index = group.daySlotCollectionCount() ? slot.index - 1 : slot.collectionIndex - 1;\n if (index >= 0) {\n return collections[index]._slots[collections[index]._slots.length - 1];\n }\n } else {\n collections = group._getCollections(group.daySlotCollectionCount());\n index = group.daySlotCollectionCount() ? 0 : slot.collectionIndex + 1;\n var slotIndex = group.daySlotCollectionCount() ? slot.collectionIndex + 1 : 0;\n if (collections[index] && collections[index]._slots[slotIndex]) {\n return collections[index]._slots[slotIndex];\n }\n }\n },\n _changeGroupContinuously: function () {\n return null;\n },\n _changeViewPeriod: function () {\n return false;\n },\n _isInRange: function (newStart, newEnd) {\n if (!newStart || !newEnd || !this.options.min || !this.options.max) {\n return false;\n }\n return getDate(newStart) <= getDate(this.options.min) || getDate(newEnd) >= getDate(this.options.max);\n },\n _horizontalSlots: function (selection, ranges, multiple, reverse) {\n var method = reverse ? 'leftSlot' : 'rightSlot';\n var horizontalRange = {\n startSlot: ranges[0].start,\n endSlot: ranges[ranges.length - 1].end\n };\n var group = this.groups[selection.groupIndex];\n var isVertical = this._isVerticallyGrouped();\n if (!multiple) {\n var slot = this._normalizeHorizontalSelection(selection, ranges, reverse);\n if (slot) {\n horizontalRange.startSlot = horizontalRange.endSlot = slot;\n }\n }\n if (this._isGroupedByDate() && !multiple) {\n var tempSlot = this._changeGroup(selection, reverse);\n if (!tempSlot) {\n horizontalRange = this._getNextHorizontalRange(group, method, horizontalRange);\n } else {\n horizontalRange.startSlot = horizontalRange.endSlot = tempSlot;\n }\n } else {\n horizontalRange.startSlot = group[method](horizontalRange.startSlot);\n horizontalRange.endSlot = group[method](horizontalRange.endSlot);\n if (!multiple && !isVertical && (!horizontalRange.startSlot || !horizontalRange.endSlot)) {\n horizontalRange.startSlot = horizontalRange.endSlot = this._changeGroup(selection, reverse);\n }\n }\n var continuousSlot;\n if ((!horizontalRange.startSlot || !horizontalRange.endSlot) && !this._isGroupedByDate()) {\n continuousSlot = this._continuousSlot(selection, ranges, reverse);\n continuousSlot = this._changeGroupContinuously(selection, continuousSlot, multiple, reverse);\n if (continuousSlot) {\n horizontalRange.startSlot = horizontalRange.endSlot = continuousSlot;\n }\n }\n return horizontalRange;\n },\n _getNextHorizontalRange: function (group, method, horizontalRange) {\n if (!this._isVerticallyGrouped()) {\n horizontalRange.startSlot = group[method](horizontalRange.startSlot);\n horizontalRange.endSlot = group[method](horizontalRange.endSlot);\n }\n return horizontalRange;\n },\n _verticalSlots: function (selection, ranges, multiple, reverse) {\n var group = this.groups[selection.groupIndex];\n var slot;\n var verticalRange = {\n startSlot: ranges[0].start,\n endSlot: ranges[ranges.length - 1].end\n };\n if (!multiple) {\n slot = this._normalizeVerticalSelection(selection, ranges, reverse);\n if (slot) {\n verticalRange.startSlot = verticalRange.endSlot = slot;\n }\n }\n var method = reverse ? 'upSlot' : 'downSlot';\n verticalRange = this._getNextVerticalRange(group, method, verticalRange, multiple);\n if (!multiple && this._isVerticallyGrouped() && (!verticalRange.startSlot || !verticalRange.endSlot)) {\n if (this._isGroupedByDate()) {\n verticalRange.startSlot = verticalRange.endSlot = this._changeDate(selection, slot, reverse);\n } else {\n verticalRange.startSlot = verticalRange.endSlot = this._changeGroup(selection, reverse);\n }\n }\n return verticalRange;\n },\n _getNextVerticalRange: function (group, method, verticalRange, multiple) {\n verticalRange.startSlot = group[method](verticalRange.startSlot, multiple);\n verticalRange.endSlot = group[method](verticalRange.endSlot, multiple);\n return verticalRange;\n },\n _normalizeHorizontalSelection: function () {\n return null;\n },\n _normalizeVerticalSelection: function (selection, ranges, reverse) {\n var slot;\n if (reverse) {\n slot = ranges[0].start;\n } else {\n slot = ranges[ranges.length - 1].end;\n }\n return slot;\n },\n _continuousSlot: function () {\n return null;\n },\n constrainSelection: function (selection) {\n var group = this.groups[0];\n var slot;\n if (!this.inRange(selection)) {\n slot = group.firstSlot();\n selection.isAllDay = slot.isDaySlot;\n selection.start = slot.startDate();\n selection.end = slot.endDate();\n } else {\n if (!group.daySlotCollectionCount()) {\n selection.isAllDay = false;\n } else if (!group.timeSlotCollectionCount()) {\n selection.isAllDay = true;\n }\n }\n if (!this.groups[selection.groupIndex]) {\n selection.groupIndex = 0;\n }\n },\n move: function (selection, key, shift) {\n var handled = false;\n var group = this.groups[selection.groupIndex];\n var verticalByDate = this._isGroupedByDate() && this._isVerticallyGrouped();\n if (!group.timeSlotCollectionCount()) {\n selection.isAllDay = true;\n }\n var ranges = group.ranges(selection.start, selection.end, selection.isAllDay, false);\n var startSlot, endSlot, reverse, slots;\n if (key === keys.DOWN || key === keys.UP) {\n handled = true;\n reverse = key === keys.UP;\n this._updateDirection(selection, ranges, shift, reverse, true);\n slots = this._verticalSlots(selection, ranges, shift, reverse);\n if (!slots.startSlot && !shift && this._changeViewPeriod(selection, reverse, !verticalByDate)) {\n return handled;\n }\n } else if (key === keys.LEFT || key === keys.RIGHT) {\n handled = true;\n reverse = key === keys.LEFT;\n this._updateDirection(selection, ranges, shift, reverse, false);\n slots = this._horizontalSlots(selection, ranges, shift, reverse);\n if (!slots.startSlot && !shift && this._changeViewPeriod(selection, reverse, verticalByDate)) {\n return handled;\n }\n }\n if (handled) {\n startSlot = slots.startSlot;\n endSlot = slots.endSlot;\n if (shift) {\n var backward = selection.backward;\n if (backward && startSlot) {\n selection.start = startSlot.startDate();\n } else if (!backward && endSlot) {\n selection.end = endSlot.endDate();\n }\n } else if (startSlot && endSlot) {\n selection.isAllDay = startSlot.isDaySlot;\n selection.start = startSlot.startDate();\n selection.end = endSlot.endDate();\n }\n selection.events = [];\n }\n return handled;\n },\n moveToEventInGroup: function (group, slot, selectedEvents, prev) {\n var events = group._continuousEvents || [];\n var found, event;\n var pad = prev ? -1 : 1;\n var length = events.length;\n var idx = prev ? length - 1 : 0;\n if (selectedEvents.length) {\n var lastSelected = selectedEvents[selectedEvents.length - 1];\n for (var i = 0; i < events.length; i++) {\n if (events[i].uid === lastSelected) {\n idx = i + pad;\n }\n }\n }\n while (idx < length && idx > -1) {\n event = events[idx];\n if (!prev && event.start.startDate() >= slot.startDate() || prev && event.start.startDate() <= slot.startDate()) {\n if (event && $.inArray(event.uid, selectedEvents) === -1) {\n found = !!event;\n break;\n }\n }\n idx += pad;\n }\n return event;\n },\n moveToEvent: function (selection, prev) {\n var groupIndex = selection.groupIndex;\n var group = this.groups[groupIndex];\n var slot = group.ranges(selection.start, selection.end, selection.isAllDay, false)[0].start;\n var length = this.groups.length;\n var pad = prev ? -1 : 1;\n var events = selection.events;\n var event;\n if (this._isGroupedByDate()) {\n var allEvents = this._getAllEvents();\n var uniqueAllEvents = this._getUniqueEvents(allEvents);\n var sortedEvents = this._getSortedEvents(uniqueAllEvents);\n if (events.length === 0) {\n var eventIndex = this._getNextEventIndexBySlot(slot, sortedEvents, groupIndex);\n if (prev) {\n eventIndex--;\n }\n event = sortedEvents[eventIndex];\n } else {\n var idx = this._getStartIdx(events, sortedEvents);\n while (idx < sortedEvents.length && idx > -1) {\n if (events.length > 0) {\n slot = this._getSelectedSlot(slot, sortedEvents, event, idx, pad, prev);\n }\n if (!slot) {\n break;\n }\n if (!prev && sortedEvents[idx].start.startDate() >= slot.startDate() || prev && sortedEvents[idx].start.startDate() <= slot.startDate()) {\n if (events[0] != sortedEvents[idx].uid) {\n event = sortedEvents[idx];\n break;\n }\n }\n idx += pad;\n }\n }\n } else {\n while (groupIndex < length && groupIndex > -1) {\n event = this.moveToEventInGroup(group, slot, events, prev);\n groupIndex += pad;\n group = this.groups[groupIndex];\n if (!group || event) {\n break;\n }\n events = [];\n if (prev) {\n slot = group.lastSlot();\n } else {\n slot = group.firstSlot(true);\n }\n }\n }\n if (event) {\n selection.events = [event.uid];\n selection.start = event.start.startDate();\n selection.end = event.end.endDate();\n selection.isAllDay = event.start.isDaySlot;\n selection.groupIndex = event.start.groupIndex;\n }\n return !!event;\n },\n current: function (candidate) {\n if (candidate !== undefined) {\n this._current = candidate;\n if (this.content.has(candidate)) {\n this._scrollTo(candidate, this.content[0]);\n }\n } else {\n return this._current;\n }\n },\n select: function (selection) {\n this.clearSelection();\n if (!this._selectEvents(selection)) {\n this._selectSlots(selection);\n }\n },\n _getNextEventIndexBySlot: function (slot, sortedEvents, groupIndex) {\n var tempIndex = 0;\n var slotStartDate = kendo.date.getDate(slot.startDate());\n for (var i = 0; i < sortedEvents.length; i++) {\n var eventStartDate = kendo.date.getDate(sortedEvents[i].start.startDate());\n if (slotStartDate > eventStartDate) {\n tempIndex++;\n continue;\n }\n if (slotStartDate.getTime() === eventStartDate.getTime() && groupIndex > sortedEvents[i].start.groupIndex) {\n tempIndex++;\n continue;\n }\n if (slotStartDate.getTime() === eventStartDate.getTime() && groupIndex >= sortedEvents[i].start.groupIndex && slot.startDate() > sortedEvents[i].start.startDate()) {\n tempIndex++;\n continue;\n }\n break;\n }\n return tempIndex;\n },\n _getSelectedSlot: function (slot, sortedEvents, event, idx, pad, prev) {\n if (sortedEvents[idx + pad] && sortedEvents[idx].start.groupIndex !== sortedEvents[idx + pad].start.groupIndex) {\n var groupIndex = sortedEvents[idx + pad].start.groupIndex;\n var group = this.groups[groupIndex];\n if (!group || event) {\n slot = null;\n }\n if (prev) {\n slot = group.lastSlot();\n } else {\n slot = group.firstSlot(true);\n }\n }\n return slot;\n },\n _getStartIdx: function (events, sortedEvents) {\n var selectedEventIndex = 0;\n $.each(sortedEvents, function () {\n if (this.uid === events[0]) {\n return false;\n }\n selectedEventIndex++;\n });\n return selectedEventIndex;\n },\n _getAllEvents: function () {\n var allEvents = [];\n var groups = this.groups;\n for (var idx = 0; idx < groups.length; idx++) {\n if (groups[idx]._continuousEvents) {\n allEvents = allEvents.concat(groups[idx]._continuousEvents);\n }\n }\n return allEvents;\n },\n _getUniqueEvents: function (allEvents) {\n var uniqueAllEvents = [];\n for (var i = 0; i < allEvents.length; i++) {\n var exists = false;\n for (var j = 0; j < uniqueAllEvents.length; j++) {\n if (allEvents[i].uid === uniqueAllEvents[j].uid) {\n exists = true;\n break;\n }\n }\n if (!exists) {\n uniqueAllEvents.push(allEvents[i]);\n }\n }\n return uniqueAllEvents;\n },\n _getSortedEvents: function (uniqueAllEvents) {\n return uniqueAllEvents.sort(function (first, second) {\n var firstStartDate = first.start.startDate();\n var secondStartDate = second.start.startDate();\n var result = kendo.date.getDate(firstStartDate) - kendo.date.getDate(secondStartDate);\n if (result === 0) {\n result = first.start.groupIndex - second.start.groupIndex;\n }\n if (result === 0) {\n result = firstStartDate.getTime() - secondStartDate.getTime();\n }\n if (result === 0) {\n if (first.start.isDaySlot && !second.start.isDaySlot) {\n result = -1;\n }\n if (!first.start.isDaySlot && second.start.isDaySlot) {\n result = 1;\n }\n }\n if (result === 0) {\n result = $(first.element).index() - $(second.element).index();\n }\n return result;\n });\n },\n _selectSlots: function (selection) {\n var isAllDay = selection.isAllDay;\n var group = this.groups[selection.groupIndex];\n if (!group.timeSlotCollectionCount()) {\n isAllDay = true;\n }\n this._selectedSlots = [];\n var ranges = group.ranges(selection.start, selection.end, isAllDay, false);\n var element;\n var slot;\n for (var rangeIndex = 0; rangeIndex < ranges.length; rangeIndex++) {\n var range = ranges[rangeIndex];\n var collection = range.collection;\n for (var slotIndex = range.start.index; slotIndex <= range.end.index; slotIndex++) {\n slot = collection.at(slotIndex);\n element = slot.element;\n element.setAttribute('aria-selected', true);\n addSelectedState(element);\n this._selectedSlots.push({\n start: slot.startDate(),\n end: slot.endDate(),\n element: element\n });\n }\n }\n if (selection.backward) {\n element = ranges[0].start.element;\n }\n this.current(element);\n },\n _selectEvents: function (selection) {\n var found = false;\n var events = selection.events;\n var groupEvents = this._getAllEvents();\n var idx, groupEvent, length = groupEvents.length;\n if (!events[0] || !groupEvents[0]) {\n return found;\n }\n var result = $();\n selection.events = [];\n for (idx = 0; idx < length; idx++) {\n if ($.inArray(groupEvents[idx].uid, events) > -1) {\n groupEvent = groupEvents[idx];\n result = result.add(groupEvent.element);\n if (selection.events.indexOf(groupEvent.uid) === -1) {\n selection.events.push(groupEvent.uid);\n }\n }\n }\n if (result[0]) {\n result.addClass('k-state-selected').attr('aria-selected', true);\n this.current(result.last()[0]);\n this._selectedSlots = [];\n found = true;\n }\n return found;\n },\n inRange: function (options) {\n var startDate = this.startDate();\n var endDate = kendo.date.addDays(this.endDate(), 1);\n var start = options.start;\n var end = options.end;\n return startDate <= start && start < endDate && startDate < end && end <= endDate;\n },\n _resourceValue: function (resource, item) {\n if (resource.valuePrimitive) {\n item = kendo.getter(resource.dataValueField)(item);\n }\n return item;\n },\n _resourceBySlot: function (slot) {\n var resources = this.groupedResources;\n var result = {};\n if (resources.length) {\n var resourceIndex = slot.groupIndex;\n for (var idx = resources.length - 1; idx >= 0; idx--) {\n var resource = resources[idx];\n var value = this._resourceValue(resource, resource.dataSource.view()[resourceIndex % resource.dataSource.total()]);\n if (resource.multiple) {\n value = [value];\n }\n var setter = kendo.setter(resource.field);\n setter(result, value);\n resourceIndex = Math.floor(resourceIndex / resource.dataSource.total());\n }\n }\n return result;\n },\n _createResizeHint: function (left, top, width, height) {\n return $(HINT).css({\n left: left,\n top: top,\n width: width,\n height: height\n });\n },\n _removeResizeHint: function () {\n this._resizeHint.remove();\n this._resizeHint = $();\n },\n _removeMoveHint: function (uid) {\n if (uid) {\n this._moveHint.filter('[data-uid=\\'' + uid + '\\']').remove();\n this._moveHint = this._moveHint.filter('[data-uid!=\\'' + uid + '\\']');\n } else {\n this._moveHint.remove();\n this._moveHint = $();\n }\n },\n _scrollTo: function (element, container) {\n var elementOffset = element.offsetTop, elementOffsetDir = element.offsetHeight, containerScroll = container.scrollTop, containerOffsetDir = container.clientHeight, bottomDistance = elementOffset + elementOffsetDir, result = 0;\n if (containerScroll > elementOffset) {\n result = elementOffset;\n } else if (bottomDistance > containerScroll + containerOffsetDir) {\n if (elementOffsetDir <= containerOffsetDir) {\n result = bottomDistance - containerOffsetDir;\n } else {\n result = elementOffset;\n }\n } else {\n result = containerScroll;\n }\n container.scrollTop = result;\n },\n _shouldInverseResourceColor: function (resource) {\n var resourceColorIsDark = new Color(resource.color).isDark();\n var currentColor = this.element.css('color');\n var currentColorIsDark = new Color(currentColor).isDark();\n return resourceColorIsDark == currentColorIsDark;\n },\n _eventTmpl: function (template, wrapper) {\n var options = this.options, settings = $.extend({}, kendo.Template, options.templateSettings), paramName = settings.paramName, html = '', type = typeof template, state = {\n storage: {},\n count: 0\n };\n if (type === 'function') {\n state.storage['tmpl' + state.count] = template;\n html += '#=this.tmpl' + state.count + '(' + paramName + ')#';\n state.count++;\n } else if (type === 'string') {\n html += template;\n }\n var tmpl = kendo.template(kendo.format(wrapper, html), settings);\n if (state.count > 0) {\n tmpl = $.proxy(tmpl, state.storage);\n }\n return tmpl;\n },\n eventResources: function (event) {\n var resources = [], options = this.options;\n if (!options.resources) {\n return resources;\n }\n for (var idx = 0; idx < options.resources.length; idx++) {\n var resource = options.resources[idx];\n var field = resource.field;\n var eventResources = kendo.getter(field)(event);\n if (eventResources == null) {\n continue;\n }\n if (!resource.multiple) {\n eventResources = [eventResources];\n }\n var data = resource.dataSource.view();\n for (var resourceIndex = 0; resourceIndex < eventResources.length; resourceIndex++) {\n var eventResource = null;\n var value = eventResources[resourceIndex];\n if (!resource.valuePrimitive) {\n value = kendo.getter(resource.dataValueField)(value);\n }\n for (var dataIndex = 0; dataIndex < data.length; dataIndex++) {\n if (data[dataIndex].get(resource.dataValueField) == value) {\n eventResource = data[dataIndex];\n break;\n }\n }\n if (eventResource !== null) {\n var resourceColor = kendo.getter(resource.dataColorField)(eventResource);\n resources.push({\n field: resource.field,\n title: resource.title,\n name: resource.name,\n text: kendo.getter(resource.dataTextField)(eventResource),\n value: value,\n color: resourceColor\n });\n }\n }\n }\n return resources;\n },\n createLayout: function (layout) {\n var allDayIndex = -1;\n if (!layout.rows) {\n layout.rows = [];\n }\n for (var idx = 0; idx < layout.rows.length; idx++) {\n if (layout.rows[idx].allDay) {\n allDayIndex = idx;\n break;\n }\n }\n var allDaySlot = layout.rows[allDayIndex];\n if (allDayIndex >= 0) {\n layout.rows.splice(allDayIndex, 1);\n }\n var columnLevels = this.columnLevels = levels(layout, 'columns');\n var rowLevels = this.rowLevels = levels(layout, 'rows');\n this.table = $('
');\n var rowCount = rowLevels[rowLevels.length - 1].length;\n this.table.find('tbody:first').append(this._topSection(columnLevels, allDaySlot, rowCount));\n this.table.find('tbody:first').append(this._bottomSection(columnLevels, rowLevels, rowCount));\n this.element.append(this.table);\n this._scroller();\n },\n refreshLayout: function () {\n var that = this, toolbar = that.element.find('>.k-scheduler-toolbar'), height = that.element.innerHeight(), scrollbar = this._scrollbar, headerHeight = 0, paddingDirection = this._isRtl ? 'left' : 'right';\n for (var idx = 0; idx < toolbar.length; idx++) {\n height -= outerHeight(toolbar.eq(idx));\n }\n if (that.datesHeader) {\n headerHeight = outerHeight(that.datesHeader);\n }\n if (that.timesHeader && outerHeight(that.timesHeader) > headerHeight) {\n headerHeight = outerHeight(that.timesHeader);\n }\n if (that.datesHeader && that.timesHeader) {\n var datesHeaderRows = that.datesHeader.find('table:first tr');\n that.timesHeader.find('tr').height(function (index) {\n $(this).height(datesHeaderRows.eq(index).height());\n });\n }\n if (headerHeight) {\n height -= headerHeight;\n }\n if (that.footer) {\n height -= outerHeight(that.footer);\n }\n var isSchedulerHeightSet = function (el) {\n var initialHeight, newHeight;\n if (el[0].style.height) {\n return true;\n } else {\n initialHeight = el.height();\n }\n el.height('auto');\n newHeight = el.height();\n if (initialHeight != newHeight) {\n el.height('');\n return true;\n }\n el.height('');\n return false;\n };\n var contentDiv = that.content[0], scrollbarWidth = !kendo.support.kineticScrollNeeded ? scrollbar : 0;\n if (isSchedulerHeightSet(that.element)) {\n if (height > scrollbar * 2) {\n that.content.height(height);\n } else {\n that.content.height(scrollbar * 2 + 1);\n }\n that.times.height(contentDiv.clientHeight);\n var timesTable = that.times.find('table');\n if (timesTable.length) {\n timesTable.height(that.content.find('table')[0].clientHeight);\n }\n }\n if (contentDiv.offsetWidth - contentDiv.clientWidth > 0) {\n that.table.addClass('k-scrollbar-v');\n that.datesHeader.css('padding-' + paddingDirection, scrollbarWidth - parseInt(that.datesHeader.children().css('border-' + paddingDirection + '-width'), 10));\n } else {\n that.datesHeader.css('padding-' + paddingDirection, '');\n }\n if (contentDiv.offsetHeight - contentDiv.clientHeight > 0 || contentDiv.clientHeight > that.content.children('.k-scheduler-table').height()) {\n that.table.addClass('k-scrollbar-h');\n } else {\n that.table.removeClass('k-scrollbar-h');\n }\n },\n _topSection: function (columnLevels, allDaySlot, rowCount) {\n this.timesHeader = timesHeader(columnLevels.length, allDaySlot, rowCount);\n var columnCount = columnLevels[columnLevels.length - 1].length;\n this.datesHeader = datesHeader(columnLevels, columnCount, allDaySlot);\n return $('').append(this.timesHeader.add(this.datesHeader).wrap('').parent());\n },\n _bottomSection: function (columnLevels, rowLevels, rowCount) {\n this.times = times(rowLevels, rowCount);\n this.content = content(columnLevels[columnLevels.length - 1], rowLevels[rowLevels.length - 1]);\n return $('').append(this.times.add(this.content).wrap('').parent());\n },\n _scroller: function () {\n var that = this;\n this.content.bind('scroll' + NS, function () {\n that.datesHeader.find('>.k-scheduler-header-wrap').scrollLeft(this.scrollLeft);\n that.times.scrollTop(this.scrollTop);\n });\n var touchScroller = kendo.touchScroller(this.content, {\n avoidScrolling: function (e) {\n return $(e.event.target).closest('.k-event.k-event-active').length > 0;\n }\n });\n if (touchScroller && touchScroller.movable) {\n this._touchScroller = touchScroller;\n this.content = touchScroller.scrollElement;\n touchScroller.movable.bind('change', function (e) {\n that.datesHeader.find('>.k-scheduler-header-wrap').scrollLeft(-e.sender.x);\n that.times.scrollTop(-e.sender.y);\n });\n }\n },\n _resourcesForGroups: function () {\n var result = [];\n var groups = this.options.group;\n var resources = this.options.resources;\n groups = groups && groups.resources ? groups.resources : [];\n if (resources && groups.length) {\n for (var idx = 0, length = resources.length; idx < length; idx++) {\n for (var groupIdx = 0, groupLength = groups.length; groupIdx < groupLength; groupIdx++) {\n if (resources[idx].name === groups[groupIdx]) {\n result.push(resources[idx]);\n }\n }\n }\n }\n this.groupedResources = result;\n },\n _createDateLayout: function (dates, inner, times) {\n return createDateLayoutConfiguration('rows', dates, inner, times);\n },\n _createColumnsLayout: function (resources, inner, template, dates, times) {\n return createLayoutConfiguration('columns', resources, inner, template, dates, times);\n },\n _groupOrientation: function () {\n var groups = this.options.group;\n return groups && groups.resources ? groups.orientation : 'horizontal';\n },\n _isGroupedByDate: function () {\n return this.options.group && this.options.group.date;\n },\n _isVerticallyGrouped: function () {\n return this.groupedResources.length && this._groupOrientation() === 'vertical';\n },\n _createRowsLayout: function (resources, inner, template, dates) {\n return createLayoutConfiguration('rows', resources, inner, template, dates);\n },\n selectionByElement: function () {\n return null;\n },\n clearSelection: function () {\n this.content.find('.k-state-selected').removeAttr('id').attr('aria-selected', false).removeClass('k-state-selected');\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(this);\n if (that.table) {\n kendo.destroy(that.table);\n that.table.remove();\n }\n that.groups = null;\n that.table = null;\n that.content = null;\n that.times = null;\n that.datesHeader = null;\n that.timesHeader = null;\n that.footer = null;\n that._resizeHint = null;\n that._moveHint = null;\n },\n calendarInfo: function () {\n return kendo.getCulture().calendars.standard;\n },\n prevGroupSlot: function (date, groupIndex, isDay) {\n var collection;\n var group = this.groups[groupIndex];\n var slot = group.ranges(date, date, isDay, false)[0].start;\n if (groupIndex <= 0) {\n return;\n }\n if (this._isGroupedByDate()) {\n return slot;\n }\n if (this._isVerticallyGrouped()) {\n if (!group.timeSlotCollectionCount()) {\n collection = group._collection(group.daySlotCollectionCount() - 1, true);\n return collection.at(slot.index);\n } else {\n collection = group._collection(isDay ? slot.index : slot.collectionIndex, false);\n return collection.last();\n }\n } else {\n if (!group.timeSlotCollectionCount()) {\n collection = group._collection(slot.collectionIndex, true);\n return collection.last();\n } else {\n collection = group._collection(isDay ? 0 : group.timeSlotCollectionCount() - 1, isDay);\n return isDay ? collection.last() : collection.at(slot.index);\n }\n }\n },\n nextGroupSlot: function (date, groupIndex, isDay) {\n var collection;\n var group = this.groups[groupIndex];\n var slot = group.ranges(date, date, isDay, false)[0].start;\n var daySlotCollectionCount;\n if (groupIndex >= this.groups.length - 1) {\n return;\n }\n if (this._isGroupedByDate()) {\n return slot;\n }\n if (this._isVerticallyGrouped()) {\n if (!group.timeSlotCollectionCount()) {\n collection = group._collection(0, true);\n return collection.at(slot.index);\n } else {\n daySlotCollectionCount = group.daySlotCollectionCount();\n collection = group._collection(daySlotCollectionCount ? 0 : slot.collectionIndex, daySlotCollectionCount);\n return isDay ? collection.first() : collection.at(slot.collectionIndex);\n }\n } else {\n if (!group.timeSlotCollectionCount()) {\n collection = group._collection(slot.collectionIndex, true);\n return collection.first();\n } else {\n collection = group._collection(0, isDay);\n return isDay ? collection.first() : collection.at(slot.index);\n }\n }\n },\n _eventOptionsForMove: function () {\n return {};\n },\n _updateEventForResize: function () {\n return;\n },\n _updateEventForSelection: function (event) {\n return event;\n }\n });\n function collidingEvents(elements, start, end) {\n var idx, index, startIndex, overlaps, endIndex;\n for (idx = elements.length - 1; idx >= 0; idx--) {\n index = rangeIndex(elements[idx]);\n startIndex = index.start;\n endIndex = index.end;\n overlaps = startIndex <= start && endIndex >= start;\n if (overlaps || startIndex >= start && endIndex <= end || start <= startIndex && end >= startIndex) {\n if (startIndex < start) {\n start = startIndex;\n }\n if (endIndex > end) {\n end = endIndex;\n }\n }\n }\n return eventsForSlot(elements, start, end);\n }\n function rangeIndex(eventElement) {\n return {\n start: eventElement.start,\n end: eventElement.end\n };\n }\n function eventsForSlot(elements, slotStart, slotEnd) {\n var events = [];\n for (var idx = 0; idx < elements.length; idx++) {\n var event = rangeIndex(elements[idx]);\n if (event.start < slotStart && event.end > slotStart || event.start >= slotStart && event.end <= slotEnd) {\n events.push(elements[idx]);\n }\n }\n return events;\n }\n function createColumns(eventElements) {\n return _createColumns(eventElements);\n }\n function createRows(eventElements) {\n return _createColumns(eventElements);\n }\n var Color = function (value) {\n var color = this, formats = Color.formats, re, processor, parts, i, channels;\n if (arguments.length === 1) {\n value = color.resolveColor(value);\n for (i = 0; i < formats.length; i++) {\n re = formats[i].re;\n processor = formats[i].process;\n parts = re.exec(value);\n if (parts) {\n channels = processor(parts);\n color.r = channels[0];\n color.g = channels[1];\n color.b = channels[2];\n }\n }\n } else {\n color.r = arguments[0];\n color.g = arguments[1];\n color.b = arguments[2];\n }\n color.r = color.normalizeByte(color.r);\n color.g = color.normalizeByte(color.g);\n color.b = color.normalizeByte(color.b);\n };\n Color.prototype = {\n resolveColor: function (value) {\n value = value || '#000';\n if (value.charAt(0) == '#') {\n value = value.substr(1, 6);\n }\n value = value.replace(/ /g, '');\n value = value.toLowerCase();\n value = Color.namedColors[value] || value;\n return value;\n },\n normalizeByte: function (value) {\n return value < 0 || isNaN(value) ? 0 : value > 255 ? 255 : value;\n },\n percBrightness: function () {\n var color = this;\n return math.sqrt(0.241 * color.r * color.r + 0.691 * color.g * color.g + 0.068 * color.b * color.b);\n },\n isDark: function () {\n var color = this;\n var brightnessValue = color.percBrightness();\n return brightnessValue < 180;\n }\n };\n Color.formats = [\n {\n re: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\n process: function (parts) {\n return [\n parseInt(parts[1], 10),\n parseInt(parts[2], 10),\n parseInt(parts[3], 10)\n ];\n }\n },\n {\n re: /^(\\w{2})(\\w{2})(\\w{2})$/,\n process: function (parts) {\n return [\n parseInt(parts[1], 16),\n parseInt(parts[2], 16),\n parseInt(parts[3], 16)\n ];\n }\n },\n {\n re: /^(\\w{1})(\\w{1})(\\w{1})$/,\n process: function (parts) {\n return [\n parseInt(parts[1] + parts[1], 16),\n parseInt(parts[2] + parts[2], 16),\n parseInt(parts[3] + parts[3], 16)\n ];\n }\n }\n ];\n Color.namedColors = {\n aqua: '00ffff',\n azure: 'f0ffff',\n beige: 'f5f5dc',\n black: '000000',\n blue: '0000ff',\n brown: 'a52a2a',\n coral: 'ff7f50',\n cyan: '00ffff',\n darkblue: '00008b',\n darkcyan: '008b8b',\n darkgray: 'a9a9a9',\n darkgreen: '006400',\n darkorange: 'ff8c00',\n darkred: '8b0000',\n dimgray: '696969',\n fuchsia: 'ff00ff',\n gold: 'ffd700',\n goldenrod: 'daa520',\n gray: '808080',\n green: '008000',\n greenyellow: 'adff2f',\n indigo: '4b0082',\n ivory: 'fffff0',\n khaki: 'f0e68c',\n lightblue: 'add8e6',\n lightgrey: 'd3d3d3',\n lightgreen: '90ee90',\n lightpink: 'ffb6c1',\n lightyellow: 'ffffe0',\n lime: '00ff00',\n limegreen: '32cd32',\n linen: 'faf0e6',\n magenta: 'ff00ff',\n maroon: '800000',\n mediumblue: '0000cd',\n navy: '000080',\n olive: '808000',\n orange: 'ffa500',\n orangered: 'ff4500',\n orchid: 'da70d6',\n pink: 'ffc0cb',\n plum: 'dda0dd',\n purple: '800080',\n red: 'ff0000',\n royalblue: '4169e1',\n salmon: 'fa8072',\n silver: 'c0c0c0',\n skyblue: '87ceeb',\n slateblue: '6a5acd',\n slategray: '708090',\n snow: 'fffafa',\n steelblue: '4682b4',\n tan: 'd2b48c',\n teal: '008080',\n tomato: 'ff6347',\n turquoise: '40e0d0',\n violet: 'ee82ee',\n wheat: 'f5deb3',\n white: 'ffffff',\n whitesmoke: 'f5f5f5',\n yellow: 'ffff00',\n yellowgreen: '9acd32'\n };\n function _createColumns(eventElements) {\n var columns = [];\n for (var idx = 0; idx < eventElements.length; idx++) {\n var event = eventElements[idx];\n var eventRange = rangeIndex(event);\n var column = null;\n for (var j = 0, columnLength = columns.length; j < columnLength; j++) {\n var endOverlaps = eventRange.start > columns[j].end;\n if (eventRange.start < columns[j].start || endOverlaps) {\n column = columns[j];\n if (column.end < eventRange.end) {\n column.end = eventRange.end;\n }\n break;\n }\n }\n if (!column) {\n column = {\n start: eventRange.start,\n end: eventRange.end,\n events: []\n };\n columns.push(column);\n }\n column.events.push(event);\n }\n return columns;\n }\n function createDateLayoutConfiguration(name, dates, inner, times) {\n var configuration = [];\n $.each(dates, function (index, item) {\n var className = item.className ? 'k-slot-cell ' + item.className : 'k-slot-cell';\n var obj = {\n text: item.text,\n className: className\n };\n if (times && !item.minorTicks) {\n obj[name] = createDateLayoutConfiguration(name, item.columns, inner, times);\n } else {\n obj[name] = inner;\n }\n configuration.push(obj);\n });\n return configuration;\n }\n function createLayoutConfiguration(name, resources, inner, template, dates, times) {\n var resource = resources[0];\n var configuration = [];\n if (resource) {\n if (dates && inner) {\n $.each(dates, function (index, item) {\n if (times && !item.minorTicks) {\n item[name] = createLayoutConfiguration(name, resources, item.columns, template, item.columns, times);\n } else {\n item[name] = createLayoutConfiguration(name, resources, null, template);\n }\n });\n configuration = dates;\n } else {\n var data = resource.dataSource.view();\n for (var dataIndex = 0; dataIndex < data.length; dataIndex++) {\n var obj = {\n text: template({\n text: kendo.htmlEncode(kendo.getter(resource.dataTextField)(data[dataIndex])),\n color: kendo.getter(resource.dataColorField)(data[dataIndex]),\n field: resource.field,\n title: resource.title,\n name: resource.name,\n value: kendo.getter(resource.dataValueField)(data[dataIndex])\n }),\n className: 'k-slot-cell'\n };\n obj[name] = createLayoutConfiguration(name, resources.slice(1), inner, template);\n configuration.push(obj);\n }\n }\n return configuration;\n }\n return inner;\n }\n function groupEqFilter(value) {\n return function (item) {\n if ($.isArray(item) || item instanceof kendo.data.ObservableArray) {\n for (var idx = 0; idx < item.length; idx++) {\n if (item[idx] == value) {\n return true;\n }\n }\n return false;\n }\n return item == value;\n };\n }\n var selectedStateRegExp = /\\s*k-state-selected/;\n function addSelectedState(cell) {\n cell.className = cell.className.replace(selectedStateRegExp, '') + ' k-state-selected';\n }\n $.extend(ui.SchedulerView, {\n createColumns: createColumns,\n createRows: createRows,\n rangeIndex: rangeIndex,\n collidingEvents: collidingEvents,\n groupEqFilter: groupEqFilter\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"]}