{"version":3,"sources":["kendo.scheduler.view.js"],"names":["f","define","kendo","ui","scheduler","$","levels","values","key","collect","depth","level","idx","result","length","push","table","tableRows","className","trim","join","allDayTable","timesHeader","columnLevelCount","allDaySlot","rowCount","text","content","scrollbar","scrollbarWidth","support","collidingEvents","elements","start","end","index","startIndex","overlaps","endIndex","rangeIndex","eventsForSlot","eventElement","slotStart","slotEnd","event","events","createColumns","eventElements","_createColumns","createRows","eventRange","column","j","columnLength","endOverlaps","columns","createDateLayoutConfiguration","name","dates","inner","times","configuration","each","item","obj","minorTicks","createLayoutConfiguration","resources","template","parentValue","data","dataIndex","value","resource","dataSource","view","filter","itemParentValue","getter","dataParentValueField","undefined","dataValueField","htmlEncode","dataTextField","color","dataColorField","field","title","slice","groupEqFilter","isArray","ObservableArray","addSelectedState","cell","replace","selectedStateRegExp","Color","window","getDate","date","Widget","outerHeight","_outerHeight","keys","NS","INVERSE_COLOR_CLASS","MIN_HORIZONTAL_SCROLL_SIZE","math","Math","HINT","ResourceView","Class","extend","init","isRtl","enforceAllDaySlot","this","_index","_timeSlotCollections","_daySlotCollections","_isRtl","_enforceAllDaySlot","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","firstIndex","lastIndex","_startSlot","inRange","_endSlot","MS_PER_DAY","first","last","_continuousRange","TimeSlotRange","daySlotRanges","isAllDay","DaySlotRange","range","head","tail","startSlot","endSlot","ranges","slotRanges","isDay","_startTime","toUtcTime","_endTime","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","_start","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","_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","_addResourceView","resourceView","groups","dateForTitle","format","selectedDateFormat","shortDateForTitle","selectedShortDateFormat","mobileDateForTitle","selectedMobileDateFormat","_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","_footer","html","messages","today","footer","appendTo","on","e","action","currentDate","timezoneOffset","preventDefault","convert","getTimezoneOffset","trigger","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","_setResourceValue","groupLevelMember","setter","_resourceBySlot","resourceIndex","groupOptions","nestedMember","dateGroupCompensation","groupLevel","passedChildren","numberOfChildren","groupedResources","orientation","rowLevels","columnLevels","_createResizeHint","css","_removeResizeHint","remove","_removeMoveHint","container","elementOffset","elementOffsetDir","containerScroll","scrollTop","containerOffsetDir","bottomDistance","_inverseEventColor","eventColor","eventColorIsDark","isDark","eventBackground","eventBackgroundIsDark","_eventTmpl","wrapper","tmpl","settings","Template","templateSettings","paramName","type","state","storage","proxy","eventResources","eventResource","resourceColor","get","createLayout","layout","allDayIndex","rows","allDay","splice","_isVirtualized","_trimRowLevels","find","append","_topSection","_bottomSection","_updateDomRowLevels","_groupOrientation","_outerWidth","_scroller","virtual","levelMarker","stopAtLevel","rowLevelIndex","stop","lastGroup","cachedRowLevels","_hasContentToRender","parentLevel","hasParent","createNextLayout","trimmedRowLevels","rowSpan","clone","_height","_times","parseInt","_virtualContent","render","_cachedEvents","_tryRenderContent","bufferHeight","groupCells","_rowLevelIndices","map","toArray","refreshLayout","datesHeaderRows","isSchedulerHeightSet","contentDiv","timesTable","toolbar","headerHeight","paddingDirection","eq","datesHeader","el","initialHeight","newHeight","style","kineticScrollNeeded","removeClass","dateGroup","thElm","_datesHeader","closest","wrap","parent","touchScroller","bind","scrollLeft","avoidScrolling","target","movable","_touchScroller","scrollElement","sender","groupIdx","groupLength","_createDateLayout","_createColumnsLayout","_createRowsLayout","selectionByElement","removeAttr","destroy","calendarInfo","getCulture","calendars","standard","prevGroupSlot","nextGroupSlot","_eventOptionsForMove","_updateEventForResize","_updateEventForSelection","_innerElements","countInner","innerCollection","innerSpan","innerEls","isMobile","rowIndex","rowsBefore","currentRow","rowspan","Array","split","rowHeaderRows","columnIndex","columnLevelIndex","th","colspan","allDayTableRows","lastLevel","td","cellContent","dateTableRows","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', INVERSE_COLOR_CLASS = 'k-event-inverse', MIN_HORIZONTAL_SCROLL_SIZE = 1024, 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 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 content() {\n return $('
' + '
' + '
');\n }\n var HINT = '
' + '
' + '
' + '
' + '
' + '
' + '
';\n var ResourceView = kendo.Class.extend({\n init: function (index, isRtl, enforceAllDaySlot) {\n this._index = index;\n this._timeSlotCollections = [];\n this._daySlotCollections = [];\n this._isRtl = isRtl;\n this._enforceAllDaySlot = enforceAllDaySlot;\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 var firstIndex, lastIndex;\n if (!start.inRange && startTime >= start.slot.end) {\n firstIndex = start.slot.collectionIndex + 1;\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 lastIndex = end.slot.collectionIndex;\n if (endTime === end.slot.start && (start && lastIndex > start.slot.collectionIndex || lastIndex > firstIndex)) {\n lastIndex -= 1;\n }\n end = null;\n }\n if (start === null && end === null) {\n if (endTime - startTime < kendo.date.MS_PER_DAY) {\n return [];\n } else {\n start = {\n inRange: true,\n slot: collections[firstIndex].first()\n };\n end = {\n inRange: true,\n slot: collections[lastIndex].last()\n };\n }\n }\n if (start === null) {\n if (end.slot.end <= startTime) {\n return [];\n }\n start = {\n inRange: true,\n slot: (collections[firstIndex] || 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[lastIndex] || 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 if (this._enforceAllDaySlot) {\n isDay = event.isMultiDay();\n } else {\n isDay = event.isAllDay;\n }\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 var index = 0;\n if (!collection) {\n collection = collections[index];\n while (index < collections.length - 1 && collection._start < time) {\n index++;\n collection = collections[index];\n }\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 var index = collections.length - 1;\n if (!collection) {\n collection = collections[index];\n while (index > 0 && collection._start > time) {\n index--;\n collection = collections[index];\n }\n inRange = false;\n }\n var slot = collection.slotByEndDate(time, isAllDay);\n if (!slot) {\n if (time <= collection.first().start) {\n slot = collection.first();\n } else {\n slot = collection.last();\n }\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 _addResourceView: function () {\n var resourceView = new ResourceView(this.groups.length, this._isRtl, this.options.enforceAllDaySlot);\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 mobileDateForTitle: function () {\n return kendo.format(this.options.selectedMobileDateFormat || 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 _footer: function () {\n var that = this;\n var options = that.options;\n if (that._isMobile()) {\n var html = '';\n that.footer = $(html).appendTo(that.element);\n }\n if (that.footer) {\n that.footer.on('click' + NS, '.k-scheduler-today', function (e) {\n e.preventDefault();\n var timezone = that.options.timezone;\n var action = 'today';\n var currentDate = new Date();\n var date;\n if (timezone) {\n var timezoneOffset = kendo.timezone.offset(currentDate, timezone);\n date = kendo.timezone.convert(currentDate, currentDate.getTimezoneOffset(), timezoneOffset);\n } else {\n date = currentDate;\n }\n that.trigger('navigate', {\n view: that.name || options.name,\n action: action,\n date: date\n });\n });\n }\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 _setResourceValue: function (groupLevelMember, resource, result) {\n var value = groupLevelMember.value, setter;\n if (resource.multiple) {\n value = [value];\n }\n setter = kendo.setter(resource.field);\n setter(result, value);\n },\n _resourceBySlot: function (slot) {\n var resources = this.groupedResources;\n var result = {};\n if (resources.length) {\n var resourceIndex = slot.groupIndex, groupOptions = this.options.group, nestedMember = groupOptions.date || groupOptions.orientation === 'horizontal' ? 'columns' : 'rows', levels = nestedMember === 'rows' ? this.rowLevels : this.columnLevels, dateGroupCompensation = groupOptions.date && groupOptions.orientation === 'horizontal' ? 1 : 0, groupLevel = levels[resources.length - 1 + dateGroupCompensation], resource = resources[resources.length - 1], groupLevelMember = groupLevel[resourceIndex], passedChildren, numberOfChildren, j, i;\n this._setResourceValue(groupLevelMember, resource, result);\n for (j = resources.length - 2; j >= 0; j--) {\n groupLevel = levels[j + dateGroupCompensation];\n resource = resources[j];\n passedChildren = 0;\n for (i = 0; i < groupLevel.length; i++) {\n groupLevelMember = groupLevel[i];\n numberOfChildren = groupLevelMember[nestedMember].length;\n if (numberOfChildren > resourceIndex - passedChildren) {\n this._setResourceValue(groupLevelMember, resource, result);\n i = groupLevel.length;\n } else {\n passedChildren += numberOfChildren;\n }\n }\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 _inverseEventColor: function (element) {\n var eventColor = element.css('color');\n var eventColorIsDark = new Color(eventColor).isDark();\n var eventBackground = element.css('background-color');\n var eventBackgroundIsDark = new Color(eventBackground).isDark();\n if (eventColorIsDark == eventBackgroundIsDark) {\n element.addClass(INVERSE_COLOR_CLASS);\n }\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 if (this._isVirtualized()) {\n this._trimRowLevels(rowLevels);\n }\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 if (this._isVirtualized()) {\n this._updateDomRowLevels();\n }\n if (this._isMobile() && columnLevels.length > 1 && this._groupOrientation() === 'horizontal' && kendo._outerWidth($(window)) < MIN_HORIZONTAL_SCROLL_SIZE) {\n this.table.find('.k-scheduler-content .k-scheduler-table').width(columnLevels[columnLevels.length - 2].length * 100 + '%');\n this.table.find('.k-scheduler-header .k-scheduler-table').width(columnLevels[columnLevels.length - 2].length * 100 + '%');\n }\n this._scroller();\n },\n _isVirtualized: function () {\n return this.options.virtual && this.rowLevels.length > 1 && this._isVerticallyGrouped();\n },\n _trimRowLevels: function (rowLevels) {\n var lastGroup = rowLevels[rowLevels.length - 2];\n var cachedRowLevels = this.cachedRowLevels || [];\n var levelMarker;\n this._hasContentToRender = true;\n var stopAtLevel = function (levels, index) {\n var hasParent = levels[index - 1].length > 0, parentLevel, parentValue;\n if (hasParent) {\n parentLevel = levels[index - 1][0];\n parentValue = levels[index][0].parentValue;\n return parentLevel.value !== parentValue;\n } else {\n return true;\n }\n };\n for (var rowLevelIndex = rowLevels.length - 2; rowLevelIndex >= 0; rowLevelIndex--) {\n var stop = false;\n if (rowLevelIndex > 0 && stopAtLevel(rowLevels, rowLevelIndex)) {\n stop = true;\n levelMarker = rowLevelIndex;\n }\n cachedRowLevels[rowLevelIndex] = rowLevels[rowLevelIndex].splice(1);\n if (rowLevelIndex < rowLevels.length - 2 && rowLevels[rowLevelIndex][0].rows.length != 1) {\n rowLevels[rowLevelIndex][0].rows = rowLevels[rowLevelIndex + 1];\n }\n if (stop) {\n break;\n }\n }\n cachedRowLevels[rowLevels.length - 1] = rowLevels[rowLevels.length - 1].splice(lastGroup[0].rows.length);\n this.cachedRowLevels = cachedRowLevels;\n if (!cachedRowLevels[cachedRowLevels.length - 1].length) {\n this._hasContentToRender = false;\n }\n return {\n levelMarker: levelMarker || 0,\n rowLevels: rowLevels\n };\n },\n createNextLayout: function () {\n var clone = [];\n var trimmedRowLevels;\n var rowLevels;\n var levelMarker;\n var rowCount;\n for (var rowLevelIndex = 0; rowLevelIndex < this.cachedRowLevels.length; rowLevelIndex++) {\n clone[rowLevelIndex] = this.cachedRowLevels[rowLevelIndex];\n }\n trimmedRowLevels = this._trimRowLevels(clone);\n rowLevels = trimmedRowLevels.rowLevels.splice(trimmedRowLevels.levelMarker);\n levelMarker = trimmedRowLevels.levelMarker;\n rowCount = rowLevels[rowLevels.length - 1].length;\n delete this._height;\n for (var i = levelMarker; i < this.rowLevels.length; i++) {\n this.rowLevels[i] = this.rowLevels[i].concat(rowLevels[i - levelMarker]);\n }\n this.table.find('.k-scheduler-times:last tbody').append(this._times(rowLevels, rowCount, this._isMobile()).find('tr'));\n this._updateDomRowLevels();\n if (levelMarker > 0) {\n for (i = 0; i < levelMarker; i++) {\n var cell = this.table.find('[data-row-level=' + i + ']:last');\n var rowSpan = parseInt(cell.attr('rowspan'), 10) + rowCount;\n cell.attr('rowspan', rowSpan);\n }\n }\n this._virtualContent(rowLevels, this.columnLevels);\n this.render(this._cachedEvents);\n },\n _tryRenderContent: function () {\n var that = this;\n var bufferHeight = that.table.innerHeight();\n var height = that.content.find('table').innerHeight();\n var scrollTop = that.content.scrollTop();\n while (that._hasContentToRender && height - bufferHeight < scrollTop) {\n that.createNextLayout();\n height = that.content.find('table').innerHeight();\n }\n },\n _updateDomRowLevels: function () {\n var that = this;\n var groupCells = that.times.find('.k-scheduler-group-cell:not([data-row-level])');\n if (!this._rowLevelIndices) {\n this._rowLevelIndices = groupCells.map(function (index, item) {\n $(item).attr('data-row-level', index);\n return index;\n }).toArray().reverse();\n return;\n }\n groupCells = groupCells.toArray().reverse();\n for (var i = 0; i <= groupCells.length; i++) {\n $(groupCells[i]).attr('data-row-level', this._rowLevelIndices[i]);\n }\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 if (that.times) {\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 }\n if (that.table) {\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 },\n _topSection: function (columnLevels, allDaySlot, rowCount) {\n var thElm = $('');\n this.timesHeader = timesHeader(columnLevels.length, allDaySlot, rowCount);\n this.datesHeader = this._datesHeader(columnLevels, allDaySlot);\n var dateGroup = this.datesHeader.find('.k-nav-day');\n if (dateGroup.length) {\n dateGroup.closest('tr').addClass('k-scheduler-date-group');\n }\n if (this._isMobile()) {\n thElm.addClass('k-mobile-header');\n thElm.addClass('k-mobile-' + this._groupOrientation() + '-header');\n }\n return $(thElm).append(this.timesHeader.add(this.datesHeader).wrap('').parent());\n },\n _bottomSection: function (columnLevels, rowLevels, rowCount) {\n this.times = this._times(rowLevels, rowCount, this._isMobile());\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 kendo.scrollLeft(that.datesHeader.find('>.k-scheduler-header-wrap'), this.scrollLeft);\n that.times.scrollTop(this.scrollTop);\n if (that._isVirtualized()) {\n that._tryRenderContent();\n }\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 kendo.scrollLeft(that.datesHeader.find('>.k-scheduler-header-wrap'), -e.sender.x);\n that.times.scrollTop(-e.sender.y);\n if (that._isVirtualized()) {\n that._tryRenderContent();\n }\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, parentValue) {\n return createLayoutConfiguration('columns', resources, inner, template, dates, times, parentValue);\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 if (that.footer) {\n kendo.destroy(that.footer);\n that.footer.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 _innerElements: function (element, type, inner) {\n var count = 0, countInner = function (el) {\n var innerSpan = el[inner], innerEls = el[type], current, innerCollection, i;\n if (innerSpan) {\n count += innerSpan;\n return;\n }\n if (!innerEls || innerEls.length === 0) {\n count += 1;\n return;\n }\n for (i = 0; i < innerEls.length; i++) {\n current = innerEls[i];\n innerCollection = current[type];\n if (innerCollection && innerCollection[0]) {\n if (!innerCollection[0][type] || innerCollection[0][type].length === 0) {\n count += innerCollection.length;\n } else {\n countInner(current);\n }\n } else {\n count += 1;\n }\n }\n };\n countInner(element);\n return count;\n },\n _times: function (rowLevels, rowCount, isMobile) {\n var that = this;\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 rowsBefore = 0;\n for (rowIndex = 0; rowIndex < level.length; rowIndex++) {\n var currentRow = level[rowIndex];\n var className = currentRow.className || '';\n var text = currentRow.text;\n var rowspan = that._innerElements(currentRow, 'rows');\n rowsBefore += rowspan;\n if (currentRow.allDay) {\n className = 'k-scheduler-times-all-day';\n }\n if (isMobile && className.indexOf('k-scheduler-group-cell') !== -1) {\n text = '' + text + '';\n }\n rows[rowsBefore - rowspan] += '' + 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 _datesHeader: function (columnLevels, allDaySlot) {\n var that = this;\n var dateTableRows = [];\n var columnIndex;\n for (var columnLevelIndex = 0; columnLevelIndex < columnLevels.length; columnLevelIndex++) {\n var level = columnLevels[columnLevelIndex];\n var th = [];\n for (columnIndex = 0; columnIndex < level.length; columnIndex++) {\n var column = level[columnIndex];\n var colspan = that._innerElements(column, 'columns', 'colspan');\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 });\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, parentValue) {\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, parentValue);\n } else {\n item[name] = createLayoutConfiguration(name, resources, null, template, null, null, parentValue);\n }\n });\n configuration = dates;\n } else {\n var data = resource.dataSource.view();\n data = data.filter(function (item) {\n var itemParentValue = kendo.getter(resource.dataParentValueField)(item);\n return itemParentValue === null || itemParentValue === undefined || itemParentValue === parentValue;\n });\n for (var dataIndex = 0; dataIndex < data.length; dataIndex++) {\n var value = kendo.getter(resource.dataValueField)(data[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: value\n }),\n className: 'k-slot-cell k-scheduler-group-cell',\n parentValue: parentValue,\n value: value\n };\n obj[name] = createLayoutConfiguration(name, resources.slice(1), inner, template, dates, times, value);\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}));"]}