Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/js/calendar/planner/dist/ |
Upload File : |
{"version":3,"file":"planner.bundle.js","sources":["../src/selector.js","../src/planner.js"],"sourcesContent":["\"use strict\";\nimport {EventEmitter, BaseEvent} from 'main.core.events';\nimport {Util} from 'calendar.util';\nimport {Type, Dom, Tag} from 'main.core';\nimport { EventDragAndDrop } from 'calendar.ui.tools.draganddrop';\n\nexport class Selector extends EventEmitter\n{\n\tDOM = {};\n\tselectMode = false;\n\tcurrentDateFrom = new Date();\n\tcurrentDateTo = new Date();\n\tcurrentFullDay = false;\n\tuseAnimation = true;\n\tbeforeBeginChange = false;\n\n\tconstructor(params = {})\n\t{\n\t\tsuper();\n\t\tthis.setEventNamespace('BX.Calendar.Planner.Selector');\n\n\t\tthis.getPosByDate = params.getPosByDate;\n\t\tthis.getDateByPos = params.getDateByPos;\n\t\tthis.getPosDateMap = params.getPosDateMap;\n\t\tthis.getTimelineWidth = params.getTimelineWidth;\n\t\tthis.getScaleInfo = params.getScaleInfo;\n\t\tthis.solidStatus = params.solidStatus;\n\t\tthis.alwaysBlue = params.alwaysBlue;\n\t\tthis.vacationOffset = 0;\n\n\t\tthis.eventDragAndDrop = new EventDragAndDrop(params.getDateByPos, params.getPosByDate, params.getEvents);\n\n\t\tthis.useAnimation = params.useAnimation !== false;\n\n\t\tthis.render();\n\t}\n\n\trender()\n\t{\n\t\tthis.DOM.timeNodes = {};\n\t\tthis.DOM.timeWrap = Tag.render`\n\t\t\t<div class=\"calendar-planner-selector-notices-container\"></div>\n\t\t`;\n\n\t\tthis.DOM.wrap = Tag.render`\n\t\t\t<div class=\"calendar-planner-timeline-selector\" data-bx-planner-meta=\"selector\">\n\t\t\t\t<span data-bx-planner-meta=\"selector-resize-left\" class=\"calendar-planner-timeline-drag-left\"></span>\n\t\t\t\t<span class=\"calendar-planner-timeline-selector-grip\"></span>\n\t\t\t\t<span data-bx-planner-meta=\"selector-resize-right\" class=\"calendar-planner-timeline-drag-right\"></span>\n\t\t\t\t${this.DOM.timeWrap}\n\t\t\t\t<div class=\"calendar-planner-timeline-selector-background\"></div>\n\t\t\t\t${this.renderMoreButton()}\n\t\t\t</div>\n\t\t`;\n\n\t\t// prefent draging selector and activating uploader controll in livefeed\n\t\tthis.DOM.wrap.ondrag = BX.False;\n\t\tthis.DOM.wrap.ondragstart = BX.False;\n\n\t\tthis.DOM.titleNode = Tag.render`<div class=\"calendar-planner-selector-notice\" style=\"display: none\"></div>`;\n\t}\n\n\trenderMoreButton()\n\t{\n\t\tthis.DOM.moreButton = Tag.render`\n\t\t\t<div class=\"calendar-planner-timeline-selector-more-button\" style=\"display: none;\"></div>\n\t\t`;\n\n\t\treturn this.DOM.moreButton;\n\t}\n\n\tshake()\n\t{\n\t\tconst shakeClass = 'calendar-planner-selector-shake';\n\t\tDom.addClass(this.DOM.wrap, shakeClass);\n\t\tclearTimeout(this.shakeTimeout);\n\t\tthis.shakeTimeout = setTimeout(() => Dom.removeClass(this.DOM.wrap, shakeClass), 400);\n\t}\n\n\tclearTimeNodes()\n\t{\n\t\tfor (const offset in this.DOM.timeNodes)\n\t\t{\n\t\t\tthis.destroyTimeNode(offset);\n\t\t}\n\t}\n\n\tsetVacationOffset(offset)\n\t{\n\t\tthis.vacationOffset = offset;\n\t}\n\n\tshowTimeNode(offsetTop, time, timezone, entryId, isWarning = false)\n\t{\n\t\tthis.destroyTimeNode(offsetTop);\n\n\t\tconst warningClass = isWarning ? '--warning' : '';\n\n\t\tthis.DOM.timeNodes[offsetTop] = Tag.render`\n\t\t\t<div \n\t\t\tclass=\"calendar-planner-timeline-side-notice --left ${warningClass}\" \n\t\t\tid=\"timeline-side-notice-${entryId}\" \n\t\t\tstyle=\"top: ${offsetTop}px\" \n\t\t\ttitle=\"${timezone}\"\n\t\t\t>${time}</div>\n\t\t`;\n\t\tthis.DOM.timeWrap.append(this.DOM.timeNodes[offsetTop]);\n\n\t\tthis.updateTimeWrapWidth();\n\t}\n\n\tupdateTimeWrapWidth()\n\t{\n\t\tconst width = Object.values(this.DOM.timeNodes).reduce((acc, el) => Math.max(acc, el?.offsetWidth), 0) + 5;\n\n\t\tthis.DOM.timeWrap.style.width = `${width}px`;\n\t\tthis.DOM.timeWrap.style.marginLeft = `${-width}px`;\n\t\tthis.DOM.timeWrap.style.left = `${this.vacationOffset}px`;\n\t}\n\n\tdestroyTimeNode(offset)\n\t{\n\t\tif (Type.isElementNode(this.DOM.timeNodes[offset]))\n\t\t{\n\t\t\tthis.DOM.timeNodes[offset].remove();\n\t\t\tthis.DOM.timeNodes[offset] = null;\n\t\t}\n\t}\n\n\tgetWrap()\n\t{\n\t\treturn this.DOM.wrap;\n\t}\n\n\tgetTitleNode()\n\t{\n\t\treturn this.DOM.titleNode;\n\t}\n\n\t/**\n\t *\n\t *\n\t * @params array array of parameters\n\t * @params[from]\n\t * @params[to]\n\t * @params[updateScaleType] bool\n\t * @params[updateScaleLimits] bool\n\t *\n\t * @return null\n\t */\n\tupdate(params = {})\n\t{\n\t\tif (!Type.isPlainObject(params))\n\t\t{\n\t\t\tparams = {};\n\t\t}\n\n\t\tparams.updateScaleType = !!params.updateScaleType;\n\t\tparams.updateScaleLimits = !!params.updateScaleLimits;\n\t\tparams.animation = !!params.animation;\n\n\t\tlet from = Type.isDate(params.from) ? params.from : BX.parseDate(params.from) || this.currentDateFrom;\n\t\tlet to = Type.isDate(params.to) ? params.to : BX.parseDate(params.to) || this.currentDateTo;\n\t\tthis.fullDayMode = params.fullDay !== undefined ? params.fullDay : this.currentFullDay;\n\n\t\tif (Type.isDate(from) && Type.isDate(to))\n\t\t{\n\t\t\tthis.currentFullDay = this.fullDayMode;\n\n\t\t\tif (this.fullDayMode)\n\t\t\t{\n\t\t\t\tfrom.setHours(0, 0, 0, 0);\n\t\t\t\tconst dayCount = Math.ceil((to.getTime() - from.getTime() + 1) / (1000 * 3600 * 24));\n\t\t\t\tto = new Date(from.getTime() + (dayCount - 1) * 24 * 3600 * 1000);\n\t\t\t\tto.setHours(23, 55, 0, 0);\n\t\t\t}\n\n\t\t\tthis.boundaryFrom = from;\n\t\t\tthis.currentDateFrom = from;\n\t\t\tthis.currentDateTo = to;\n\n\t\t\t// Update selector\n\t\t\tthis.show(\n\t\t\t\tfrom,\n\t\t\t\tto,\n\t\t\t\t{\n\t\t\t\t\tanimation: params.animation,\n\t\t\t\t\tfocus: params.focus\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tconst isSelectorInThePast = this.currentDateTo.getTime() < this.getScaleInfo().scaleDateFrom.getTime();\n\t\tconst isSelectorInTheFuture = this.currentDateFrom.getTime() > this.getScaleInfo().scaleDateTo.getTime();\n\t\tif (isSelectorInThePast || isSelectorInTheFuture)\n\t\t{\n\t\t\tthis.DOM.wrap.style.display = 'none';\n\t\t}\n\t}\n\n\tshow(from, to, params)\n\t{\n\t\tconst animation = params.animation && this.useAnimation !== false;\n\t\tconst focus = params.focus === true;\n\t\tconst alignCenter = params.alignCenter !== false;\n\n\t\tthis.DOM.wrap.style.display = 'block';\n\n\t\tif (Type.isDate(from) && Type.isDate(to))\n\t\t{\n\t\t\tlet\n\t\t\t\tfromPos = this.getPosByDate(from),\n\t\t\t\ttoPos = this.getPosByDate(to);\n\n\t\t\tthis.DOM.wrap.style.width = (toPos - fromPos) + 'px';\n\n\t\t\tif (animation && this.DOM.wrap.style.left && !this.currentFullDay)\n\t\t\t{\n\t\t\t\tthis.transit({\n\t\t\t\t\ttoX: fromPos,\n\t\t\t\t\t// triggerChangeEvents: false, //if everything is broken - uncomment\n\t\t\t\t\tfocus: focus\n\t\t\t\t});\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.DOM.wrap.style.left = fromPos + 'px';\n\t\t\t\tthis.DOM.wrap.style.width = (toPos - fromPos) + 'px';\n\t\t\t\tif (focus)\n\t\t\t\t{\n\t\t\t\t\tthis.focus(true, 200, alignCenter);\n\t\t\t\t}\n\t\t\t\tthis.checkStatus(fromPos, true);\n\t\t\t}\n\t\t}\n\t}\n\n\thide()\n\t{\n\t\tthis.DOM.wrap.style.display = 'none';\n\t}\n\n\tstartMove()\n\t{\n\t\tdocument.addEventListener('pointermove', this.preventDefault, { passive:false });\n\t\tthis.selectorIsDraged = true;\n\t\tthis.selectorStartLeft = parseInt(this.DOM.wrap.style.left);\n\t\tthis.selectorStartScrollLeft = this.DOM.timelineWrap.scrollLeft;\n\n\t\tthis.eventDragAndDrop.onDragStart(this.currentDateTo.getTime() - this.currentDateFrom.getTime(), this.selectorStartLeft);\n\n\t\tDom.addClass(document.body, 'calendar-planner-unselectable');\n\n\t\tthis.beforeBeginChange = true;\n\t}\n\n\tmove(x)\n\t{\n\t\tif (this.selectorIsDraged)\n\t\t{\n\t\t\tlet pos = this.selectorStartLeft + x;\n\n\t\t\t// Correct cursor position acording to changes of scrollleft\n\t\t\tpos -= this.selectorStartScrollLeft - this.DOM.timelineWrap.scrollLeft;\n\t\t\tpos = this.checkPosition(pos);\n\n\t\t\tif (!this.getDateByPos(pos) || !this.getDateByPos(pos + parseInt(this.DOM.wrap.style.width)))\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet boundary = this.eventDragAndDrop.getDragBoundary(pos);\n\n\t\t\tconst valueChanged = boundary.from.getTime() !== this.boundaryFrom.getTime();\n\t\t\tif (valueChanged && this.beforeBeginChange)\n\t\t\t{\n\t\t\t\tthis.emit('onBeginChange');\n\t\t\t\tthis.beforeBeginChange = false;\n\t\t\t}\n\n\t\t\tboundary = this.getAutoScrollBoundary(boundary, valueChanged);\n\t\t\tboundary = this.getConstrainedBoundary(boundary);\n\n\t\t\tthis.setBoundary(boundary);\n\t\t}\n\t}\n\n\tgetAutoScrollBoundary(boundary, valueChanged)\n\t{\n\t\tconst boundaryLeft = boundary.position - this.DOM.timelineWrap.scrollLeft;\n\t\tconst containerLeft = this.getPosByDate(this.getScaleInfo().scaleDateFrom);\n\t\tconst boundaryRight = boundaryLeft + boundary.size;\n\t\tconst containerRight = this.DOM.timelineFixedWrap.offsetWidth;\n\n\t\tif (boundaryRight > containerRight)\n\t\t{\n\t\t\tthis.scrollSpeed = this.getSpeed(boundaryRight, containerRight);\n\t\t\tboundary.position = containerRight + this.DOM.timelineWrap.scrollLeft - boundary.size;\n\t\t\tthis.setAutoScrollInterval(boundary, 1);\n\t\t}\n\t\telse if (boundaryLeft < containerLeft)\n\t\t{\n\t\t\tthis.scrollSpeed = this.getSpeed(boundaryLeft, containerLeft);\n\t\t\tboundary.position = containerLeft + this.DOM.timelineWrap.scrollLeft;\n\t\t\tthis.setAutoScrollInterval(boundary, -1);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.stopAutoScroll(valueChanged);\n\t\t}\n\n\t\treturn boundary;\n\t}\n\n\tgetSpeed(x1, x2)\n\t{\n\t\treturn Math.floor(Math.sqrt(Math.abs(x1 - x2))) + 1;\n\t}\n\n\tsetAutoScrollInterval(boundary, direction)\n\t{\n\t\tif (!this.scrollInterval)\n\t\t{\n\t\t\tthis.scrollInterval = setInterval(() => {\n\t\t\t\tif (!this.getDateByPos(boundary.position + this.scrollSpeed * direction)\n\t\t\t\t\t|| !this.getDateByPos(boundary.position + boundary.size + this.scrollSpeed * direction)\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\tthis.stopAutoScroll();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.DOM.timelineWrap.scrollLeft += this.scrollSpeed * direction;\n\t\t\t\tboundary.position += this.scrollSpeed * direction;\n\t\t\t\tboundary.from = this.getDateByPos(boundary.position);\n\t\t\t\tboundary.to = this.getDateByPos(boundary.position + boundary.size);\n\t\t\t\tthis.eventDragAndDrop.setFinalTimeInterval(boundary.from, boundary.to);\n\t\t\t\tthis.setBoundary(boundary);\n\t\t\t}, 13);\n\t\t}\n\t}\n\n\tstopAutoScroll(valueChanged = true)\n\t{\n\t\tclearInterval(this.scrollInterval);\n\t\tthis.scrollInterval = false;\n\n\t\tif (valueChanged || !this.beforeBeginChange)\n\t\t{\n\t\t\tthis.emit('onStopAutoScroll');\n\t\t}\n\t}\n\n\tsetBoundary(boundary)\n\t{\n\t\tif (boundary.wasMagnetized)\n\t\t{\n\t\t\tthis.DOM.wrap.style.transition = 'left .05s, width .1s';\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.DOM.wrap.style.transition = 'width .1s';\n\t\t}\n\n\t\tthis.DOM.wrap.style.width = boundary.size + 'px';\n\t\tthis.DOM.wrap.style.left = boundary.position + 'px';\n\n\t\tthis.showTitle(boundary.from, boundary.to);\n\n\t\tthis.checkStatus(boundary.position, true);\n\n\t\tthis.boundaryFrom = boundary.from;\n\t}\n\n\tgetConstrainedBoundary(boundary)\n\t{\n\t\tif (boundary.wasMagnetized || this.fullDayMode)\n\t\t{\n\t\t\treturn boundary;\n\t\t}\n\n\t\tlet from = new Date(boundary.from.getTime());\n\t\tlet to = new Date(boundary.to.getTime());\n\t\tconst duration = to.getTime() - from.getTime();\n\t\tlet position = boundary.position;\n\t\tlet size = boundary.size;\n\t\tlet wasMagnetized = false;\n\n\t\tif (from.getHours() < this.getScaleInfo().shownTimeFrom)\n\t\t{\n\t\t\tfrom.setHours(this.getScaleInfo().shownTimeFrom, 0, 0, 0);\n\t\t\tto = new Date(from.getTime() + duration);\n\t\t\twasMagnetized = true;\n\t\t\tposition = this.getPosByDate(from);\n\t\t\tsize = this.getPosByDate(to) - position;\n\t\t}\n\n\t\tif (to.getHours() > this.getScaleInfo().shownTimeTo\n\t\t\t|| (to.getHours() === this.getScaleInfo().shownTimeTo && to.getMinutes() > 0))\n\t\t{\n\t\t\tto.setHours(this.getScaleInfo().shownTimeTo, 0, 0, 0);\n\t\t\tfrom = new Date(to.getTime() - duration);\n\t\t\twasMagnetized = true;\n\t\t\tposition = this.getPosByDate(from);\n\t\t\tsize = this.getPosByDate(to) - position;\n\t\t}\n\n\t\treturn { from, to, position, size, wasMagnetized };\n\t}\n\n\tendMove()\n\t{\n\t\tdocument.removeEventListener('pointermove', this.preventDefault, { passive:false });\n\t\tthis.stopAutoScroll();\n\t\tif (this.selectorIsDraged)\n\t\t{\n\t\t\tthis.selectorIsDraged = false;\n\n\t\t\tconst left = this.getPosByDate(this.eventDragAndDrop.getFinalFrom());\n\t\t\tconst right = this.getPosByDate(this.eventDragAndDrop.getFinalTo());\n\n\t\t\tconst finalBoundary = this.getConstrainedBoundary({\n\t\t\t\tfrom: this.eventDragAndDrop.getFinalFrom(),\n\t\t\t\tto: this.eventDragAndDrop.getFinalTo(),\n\t\t\t\tposition: left,\n\t\t\t\tsize: right - left\n\t\t\t});\n\n\t\t\tthis.DOM.wrap.style.left = finalBoundary.position + 'px';\n\t\t\tthis.DOM.wrap.style.width = finalBoundary.size + 'px';\n\t\t\tthis.DOM.wrap.style.transition = 'none';\n\n\t\t\tthis.checkStatus(left, true);\n\t\t\tthis.hideTitle();\n\t\t\tthis.setValue();\n\t\t}\n\t\tthis.selectorIsDraged = false;\n\t}\n\n\tstartResize()\n\t{\n\t\tdocument.addEventListener('pointermove', this.preventDefault, { passive:false });\n\n\t\tthis.selectorIsResized = true;\n\n\t\tthis.selectorStartLeft = parseInt(this.DOM.wrap.style.left);\n\t\tthis.selectorStartWidth = parseInt(this.DOM.wrap.style.width);\n\t\tthis.selectorStartScrollLeft = this.DOM.timelineWrap.scrollLeft;\n\n\t\tthis.beforeBeginChange = true;\n\t}\n\n\tresize(x)\n\t{\n\t\tif (this.selectorIsResized)\n\t\t{\n\t\t\tlet\n\t\t\t\ttoDate,\n\t\t\t\ttimeTo,\n\t\t\t\twidth = this.selectorStartWidth + x;\n\n\t\t\t// Correct cursor position according to changes of scrollLeft\n\t\t\twidth -= this.selectorStartScrollLeft - this.DOM.timelineWrap.scrollLeft;\n\t\t\tlet rightPos = Math.min(this.selectorStartLeft + width, this.getTimelineWidth());\n\t\t\tif (rightPos < this.selectorStartLeft)\n\t\t\t{\n\t\t\t\trightPos = this.selectorStartLeft;\n\t\t\t}\n\n\t\t\ttoDate = this.getDateByPos(rightPos, true);\n\n\t\t\tif (this.fullDayMode)\n\t\t\t{\n\t\t\t\tif (toDate.getTime() - this.currentDateFrom.getTime() < Util.getDayLength())\n\t\t\t\t{\n\t\t\t\t\ttoDate = new Date(this.currentDateFrom.getTime() + Util.getDayLength());\n\t\t\t\t}\n\n\t\t\t\ttimeTo = parseInt(toDate.getHours()) + Math.round((toDate.getMinutes() / 60) * 10) / 10;\n\t\t\t\ttoDate.setHours(0, 0, 0, 0);\n\t\t\t\tif (timeTo > 12)\n\t\t\t\t{\n\t\t\t\t\ttoDate = new Date(toDate.getTime() + Util.getDayLength());\n\t\t\t\t\ttoDate.setHours(0, 0, 0, 0);\n\t\t\t\t}\n\t\t\t\trightPos = this.getPosByDate(toDate);\n\t\t\t}\n\t\t\telse if (this.getScaleInfo().shownTimeFrom !== 0 || this.getScaleInfo().shownTimeTo !== 24)\n\t\t\t{\n\t\t\t\tlet fromDate = this.getDateByPos(this.selectorStartLeft);\n\t\t\t\tif (toDate && fromDate && fromDate.getDate() !== toDate.getDate())\n\t\t\t\t{\n\t\t\t\t\ttoDate = new Date(fromDate.getTime());\n\t\t\t\t\ttoDate.setHours(this.getScaleInfo().shownTimeTo, 0, 0, 0);\n\t\t\t\t\trightPos = this.getPosByDate(toDate);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.getPosDateMap()[rightPos])\n\t\t\t{\n\t\t\t\tthis.selectorRoundedRightPos = rightPos;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tlet roundedPos = Selector.roundPos(rightPos);\n\t\t\t\tif (this.getPosDateMap()[roundedPos])\n\t\t\t\t{\n\t\t\t\t\tthis.selectorRoundedRightPos = roundedPos;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.selectorRoundedRightPos < this.selectorStartLeft)\n\t\t\t{\n\t\t\t\tthis.selectorRoundedRightPos = this.selectorStartLeft;\n\t\t\t}\n\n\t\t\tif (!this.fullDayMode && this.selectorRoundedRightPos - this.DOM.timelineWrap.scrollLeft > this.DOM.timelineFixedWrap.offsetWidth)\n\t\t\t{\n\t\t\t\tthis.selectorRoundedRightPos = this.DOM.timelineWrap.scrollLeft + this.DOM.timelineFixedWrap.offsetWidth;\n\t\t\t}\n\n\t\t\twidth = this.selectorRoundedRightPos - this.selectorStartLeft;\n\n\t\t\tthis.DOM.wrap.style.width = width + 'px';\n\t\t\tthis.showTitle(this.getDateByPos(this.selectorStartLeft), this.getDateByPos(this.selectorRoundedRightPos));\n\t\t\tthis.checkStatus(this.selectorStartLeft, true);\n\n\t\t\tif (this.beforeBeginChange)\n\t\t\t{\n\t\t\t\tthis.emit('onBeginChange');\n\t\t\t\tthis.beforeBeginChange = false;\n\t\t\t}\n\t\t}\n\t}\n\n\tendResize()\n\t{\n\t\tdocument.removeEventListener('pointermove', this.preventDefault, { passive:false });\n\t\tif (this.selectorIsResized)\n\t\t{\n\t\t\tthis.selectorIsResized = false;\n\n\t\t\tlet left = parseInt(this.DOM.wrap.style.left);\n\t\t\tlet right = left + parseInt(this.DOM.wrap.style.width);\n\t\t\tconst from = this.getDateByPos(left);\n\t\t\tconst to = this.getDateByPos(right);\n\t\t\tleft = this.getPosByDate(from);\n\t\t\tright = this.getPosByDate(to);\n\t\t\tthis.DOM.wrap.style.width = (right - left) + 'px';\n\n\t\t\tthis.checkStatus(left, true);\n\t\t\tthis.hideTitle();\n\t\t\tthis.setValue();\n\t\t}\n\t\tthis.selectorIsResized = false;\n\t}\n\n\tpreventDefault(e)\n\t{\n\t\te.preventDefault();\n\t}\n\n\tisDragged()\n\t{\n\t\treturn this.selectorIsResized || this.selectorIsDraged;\n\t}\n\n\tcheckStatus(selectorPos, checkPosition)\n\t{\n\t\tif (this.solidStatus)\n\t\t{\n\t\t\tif (this.alwaysBlue)\n\t\t\t{\n\t\t\t\tDom.removeClass(this.DOM.wrap, 'calendar-planner-timeline-selector-warning');\n\t\t\t\tDom.removeClass(this.mainContWrap, 'calendar-planner-selector-warning');\n\t\t\t\tDom.addClass(this.DOM.wrap, '--always-blue');\n\t\t\t}\n\t\t\tDom.addClass(this.DOM.wrap, 'solid');\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (!selectorPos)\n\t\t\t{\n\t\t\t\tselectorPos = Selector.roundPos(this.DOM.wrap.style.left);\n\t\t\t}\n\n\t\t\tlet fromDate, toDate;\n\t\t\tif (checkPosition === true || !this.currentDateFrom)\n\t\t\t{\n\t\t\t\tlet\n\t\t\t\t\tselectorWidth = parseInt(this.DOM.wrap.style.width),\n\t\t\t\t\tfromPos = selectorPos,\n\t\t\t\t\ttoPos = fromPos + selectorWidth;\n\n\t\t\t\tif (!fromPos && !toPos && !selectorWidth && this.lastFromDate)\n\t\t\t\t{\n\t\t\t\t\tfromDate = this.lastFromDate;\n\t\t\t\t\ttoDate = this.lastToDate;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tfromDate = this.getDateByPos(fromPos);\n\t\t\t\t\ttoDate = this.getDateByPos(toPos, true);\n\t\t\t\t\tthis.lastFromDate = fromDate;\n\t\t\t\t\tthis.lastToDate = toDate;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tfromDate = this.currentDateFrom;\n\t\t\t\ttoDate = this.currentDateTo;\n\t\t\t}\n\n\t\t\tthis.emit(\n\t\t\t\t'doCheckStatus',\n\t\t\t\tnew BaseEvent(\n\t\t\t\t{\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tdateFrom: fromDate,\n\t\t\t\t\t\t\tdateTo: toDate\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t}\n\n\tsetSolid()\n\t{\n\t\tDom.addClass(this.DOM.wrap, 'solid');\n\t}\n\n\tsetSelectorStatus(status)\n\t{\n\t\tthis.selectorIsFree = status;\n\t\tif (this.selectorIsFree)\n\t\t{\n\t\t\tDom.removeClass(this.DOM.wrap, 'calendar-planner-timeline-selector-warning');\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDom.addClass(this.DOM.wrap, 'calendar-planner-timeline-selector-warning');\n\t\t}\n\t}\n\n\tsetValue(selectorPos = null, duration = null)\n\t{\n\t\tif (!selectorPos)\n\t\t{\n\t\t\tselectorPos = parseInt(this.DOM.wrap.style.left);\n\t\t}\n\t\tselectorPos = Math.max(0, selectorPos);\n\t\tconst selectorWidth = parseInt(this.DOM.wrap.style.width);\n\n\t\tif (selectorPos + selectorWidth > parseInt(this.getTimelineWidth()))\n\t\t{\n\t\t\tselectorPos = parseInt(this.getTimelineWidth()) - selectorWidth;\n\t\t}\n\n\t\tconst dateFrom = this.getDateByPos(selectorPos);\n\t\tlet dateTo;\n\t\tif (duration)\n\t\t{\n\t\t\tdateTo = new Date(dateFrom.getTime() + duration);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tdateTo = this.getDateByPos(selectorPos + selectorWidth, true);\n\t\t}\n\n\t\tif (dateFrom && dateTo)\n\t\t{\n\t\t\tif (this.fullDayMode)\n\t\t\t{\n\t\t\t\tconst dayCount = Math.ceil((dateTo.getTime() - dateFrom.getTime()) / (1000 * 3600 * 24));\n\t\t\t\tdateTo = new Date(dateFrom.getTime() + (dayCount - 1) * 24 * 3600 * 1000);\n\t\t\t\tdateTo.setHours(23, 55, 0, 0);\n\t\t\t}\n\t\t\tif (!this.fullDayMode && dateFrom.getDate() !== dateTo.getDate() && dateTo.getHours() !== 0 && dateTo.getMinutes() !== 0)\n\t\t\t{\n\t\t\t\tconst duration = this.currentDateTo.getTime() - this.currentDateFrom.getTime();\n\t\t\t\tdateTo = new Date(dateFrom.getTime() + duration);\n\t\t\t}\n\n\t\t\tthis.currentDateFrom = dateFrom;\n\t\t\tthis.currentDateTo = dateTo;\n\t\t\tthis.currentFullDay = this.fullDayMode;\n\t\t\tthis.boundaryFrom = this.currentDateFrom;\n\n\t\t\tthis.emit('onChange', new BaseEvent({data: {\n\t\t\t\tdateFrom: dateFrom,\n\t\t\t\tdateTo: dateTo,\n\t\t\t\tfullDay: this.fullDayMode\n\t\t\t}}));\n\t\t}\n\t}\n\n\tcheckPosition(fromPos, selectorWidth, toPos)\n\t{\n\t\tlet scaleInfo = this.getScaleInfo();\n\t\tif (!this.fullDayMode && scaleInfo.shownTimeFrom === 0 && scaleInfo.shownTimeTo === 24)\n\t\t{\n\t\t\treturn fromPos;\n\t\t}\n\n\t\tfromPos = fromPos || parseInt(this.DOM.wrap.style.left);\n\t\tselectorWidth = selectorWidth || parseInt(this.DOM.wrap.style.width);\n\t\ttoPos = toPos || (fromPos + selectorWidth);\n\t\tif (toPos > parseInt(this.getTimelineWidth()))\n\t\t{\n\t\t\tfromPos = parseInt(this.getTimelineWidth()) - selectorWidth;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tlet\n\t\t\t\tfromDate = this.getDateByPos(fromPos),\n\t\t\t\ttoDate = this.getDateByPos(toPos, true),\n\t\t\t\ttimeFrom, timeTo,\n\t\t\t\tscaleTimeFrom = parseInt(scaleInfo.shownTimeFrom),\n\t\t\t\tscaleTimeTo = parseInt(scaleInfo.shownTimeTo);\n\n\t\t\tif (fromDate && toDate)\n\t\t\t{\n\t\t\t\tif (this.fullDayMode)\n\t\t\t\t{\n\t\t\t\t\tif (fromDate.getHours() > 12)\n\t\t\t\t\t{\n\t\t\t\t\t\tfromDate = new Date(fromDate.getTime() + Util.getDayLength());\n\t\t\t\t\t}\n\t\t\t\t\tfromDate.setHours(0, 0, 0, 0);\n\n\t\t\t\t\tfromPos = this.getPosByDate(fromDate);\n\t\t\t\t}\n\t\t\t\telse if (fromDate.getDay() !== toDate.getDay())\n\t\t\t\t{\n\t\t\t\t\ttimeFrom = parseInt(fromDate.getHours()) + Math.round((fromDate.getMinutes() / 60) * 10) / 10;\n\t\t\t\t\ttimeTo = parseInt(toDate.getHours()) + Math.round((toDate.getMinutes() / 60) * 10) / 10;\n\n\t\t\t\t\tif (Math.abs(scaleTimeTo - timeFrom) > Math.abs(scaleTimeFrom - timeTo))\n\t\t\t\t\t{\n\t\t\t\t\t\tfromDate.setHours(scaleInfo.shownTimeTo, 0, 0,0);\n\t\t\t\t\t\tfromPos = this.getPosByDate(fromDate) - selectorWidth;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\ttoDate.setHours(scaleInfo.shownTimeFrom, 0, 0,0);\n\t\t\t\t\t\tfromPos = this.getPosByDate(toDate);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn Math.max(fromPos, 0);\n\t}\n\n\ttransit(params = {})\n\t{\n\t\tthis.DOM.wrap.style.display = 'block';\n\n\t\tlet duration;\n\t\tif (Type.isDate(params.leftDate) && Type.isDate(params.rightDate))\n\t\t{\n\t\t\tif (this.fullDayMode)\n\t\t\t{\n\t\t\t\tconst dayCount = Math.ceil((this.currentDateTo.getTime() - this.currentDateFrom.getTime()) / (1000 * 3600 * 24));\n\t\t\t\tparams.leftDate.setHours(0, 0, 0, 0);\n\t\t\t\tparams.rightDate = new Date(params.leftDate.getTime() + (dayCount - 1) * 24 * 3600 * 1000);\n\t\t\t\tparams.rightDate.setHours(23, 55, 0, 0);\n\t\t\t}\n\t\t\tduration = params.rightDate.getTime() - params.leftDate.getTime();\n\t\t\tconst fromPos = this.getPosByDate(params.leftDate);\n\t\t\tconst toPos = this.getPosByDate(params.rightDate);\n\t\t\tparams.toX = fromPos;\n\t\t\tthis.DOM.wrap.style.width = (toPos - fromPos) + 'px';\n\t\t}\n\n\t\tlet\n\t\t\tfromX = params.fromX ?? parseInt(this.DOM.wrap.style.left),\n\t\t\ttoX = Selector.roundPos(params.toX ?? fromX),\n\t\t\ttriggerChangeEvents = params.triggerChangeEvents !== false,\n\t\t\tfocus = !!params.focus;\n\n\t\tif (fromX !== toX)\n\t\t{\n\t\t\tif (this.animation)\n\t\t\t{\n\t\t\t\tthis.animation.stop();\n\t\t\t}\n\n\t\t\tthis.emit('onStartTransit');\n\n\t\t\tthis.animation = new BX.easing({\n\t\t\t\tduration: 300,\n\t\t\t\tstart: {left: fromX},\n\t\t\t\tfinish: {left: toX},\n\t\t\t\ttransition: BX.easing.makeEaseOut(BX.easing.transitions.quart),\n\t\t\t\tstep: (state) => {this.DOM.wrap.style.left = state.left + 'px'},\n\t\t\t\tcomplete: () => {\n\t\t\t\t\tthis.animation = null;\n\t\t\t\t\tlet\n\t\t\t\t\t\tfromPos = parseInt(this.DOM.wrap.style.left),\n\t\t\t\t\t\tcheckedPos = this.checkPosition(fromPos);\n\n\t\t\t\t\tif (checkedPos !== fromPos)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.DOM.wrap.style.left = checkedPos + 'px';\n\t\t\t\t\t}\n\n\t\t\t\t\tif (triggerChangeEvents)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.setValue(checkedPos, duration);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (focus)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.focus(true, 300);\n\t\t\t\t\t}\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.show(\n\t\t\t\t\t\t\tthis.currentDateFrom,\n\t\t\t\t\t\t\tthis.currentDateTo,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tanimation: false,\n\t\t\t\t\t\t\t\tfocus: focus,\n\t\t\t\t\t\t\t\talignCenter: false\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\t\t\t\t\t}, 200);\n\n\t\t\t\t\tthis.checkStatus(checkedPos);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.animation.animate();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (triggerChangeEvents)\n\t\t\t{\n\t\t\t\tthis.setValue(false, duration);\n\t\t\t}\n\n\t\t\tif (focus === true)\n\t\t\t{\n\t\t\t\tthis.focus(true, 300);\n\t\t\t}\n\n\t\t\tthis.checkStatus();\n\t\t}\n\t}\n\n\tshowTitle(from, to)\n\t{\n\t\tlet\n\t\t\tfromDate = new Date(from.getTime()),\n\t\t\ttoDate = new Date(to.getTime()),\n\t\t\tselectorTitle = this.getTitleNode(),\n\t\t\tselector = this.DOM.wrap;\n\n\t\tif (this.fullDayMode)\n\t\t{\n\t\t\ttoDate = new Date(toDate.getTime() - 5 * 60 * 1000);\n\t\t\tif (toDate.getDate() === fromDate.getDate())\n\t\t\t{\n\t\t\t\tselectorTitle.innerHTML = BX.date.format('d F, D', fromDate.getTime() / 1000);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tselectorTitle.innerHTML =\n\t\t\t\t\tBX.date.format('d F', fromDate.getTime() / 1000)\n\t\t\t\t\t+ ' - '\n\t\t\t\t\t+ BX.date.format('d F', toDate.getTime() / 1000);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tselectorTitle.removeAttribute('style');\n\t\t\tselectorTitle.innerHTML = Util.formatTime(fromDate) + ' - ' + Util.formatTime(toDate);\n\t\t}\n\n\t\tselector.appendChild(selectorTitle);\n\n\t\tif (selectorTitle === this.selectorTitle)\n\t\t{\n\t\t\tif (selectorTitle.style.display === 'none' || this.selectorHideTimeout)\n\t\t\t{\n\t\t\t\tthis.selectorHideTimeout = clearTimeout(this.selectorHideTimeout);\n\t\t\t\t// Opacity animation\n\t\t\t\tthis.selectorTitle.style.display = '';\n\t\t\t\tthis.selectorTitle.style.opacity = 0;\n\t\t\t\tnew BX.easing({\n\t\t\t\t\tduration: 400,\n\t\t\t\t\tstart: {opacity: 0},\n\t\t\t\t\tfinish: {opacity: 100},\n\t\t\t\t\ttransition: BX.easing.makeEaseOut(BX.easing.transitions.quad),\n\t\t\t\t\tstep: (state)=>{this.selectorTitle.style.opacity = state.opacity / 100;},\n\t\t\t\t\tcomplete: ()=>{this.selectorTitle.removeAttribute('style');}\n\t\t\t\t}).animate();\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tselectorTitle.removeAttribute('style');\n\t\t}\n\t}\n\n\thideTitle(params = {})\n\t{\n\t\tif (!Type.isPlainObject(params))\n\t\t\tparams = {};\n\n\t\tlet\n\t\t\ttimeoutName = params.selectorIndex === undefined ? 'selectorHideTimeout' : 'selectorHideTimeout_' + params.selectorIndex,\n\t\t\tselectorTitle = params.selectorTitle || this.getTitleNode();\n\n\t\tif (this[timeoutName])\n\t\t\tthis[timeoutName] = clearTimeout(this[timeoutName]);\n\n\t\tif (params.timeout !== false)\n\t\t{\n\t\t\tthis[timeoutName] = setTimeout(() => {\n\t\t\t\tparams.timeout = false;\n\t\t\t\tthis.hideTitle(params);\n\t\t\t}, 700);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Opacity animation\n\t\t\tselectorTitle.style.display = '';\n\t\t\tselectorTitle.style.opacity = 1;\n\t\t\tnew BX.easing({\n\t\t\t\tduration: 400,\n\t\t\t\tstart: {opacity: 100},\n\t\t\t\tfinish: {opacity: 0},\n\t\t\t\ttransition: BX.easing.makeEaseOut(BX.easing.transitions.quad),\n\t\t\t\tstep: (state) => {selectorTitle.style.opacity = state.opacity / 100;},\n\t\t\t\tcomplete: () => {\n\t\t\t\t\tselectorTitle.removeAttribute('style');\n\t\t\t\t\tselectorTitle.style.display = 'none';\n\t\t\t\t}\n\t\t\t}).animate();\n\t\t}\n\t}\n\n\tstatic roundPos(x)\n\t{\n\t\treturn Math.round(parseFloat(x));\n\t}\n\n\tfocus(animation = true, timeout = 300, alignCenter)\n\t{\n\t\talignCenter = alignCenter === true;\n\n\t\tif (this.focusTimeout)\n\t\t{\n\t\t\tthis.focusTimeout = !!clearTimeout(this.focusTimeout);\n\t\t}\n\n\t\tif (this.useAnimation === false)\n\t\t{\n\t\t\tanimation = false;\n\t\t}\n\n\t\tif (timeout)\n\t\t{\n\t\t\tthis.focusTimeout = setTimeout(() => {this.focus(animation, false, alignCenter);}, timeout);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tconst\n\t\t\t\tscreenDelta = 10,\n\t\t\t\tselectorLeft = parseInt(this.DOM.wrap.style.left),\n\t\t\t\tselectorWidth = parseInt(this.DOM.wrap.style.width),\n\t\t\t\tviewWidth = parseInt(this.DOM.timelineWrap.offsetWidth),\n\t\t\t\tviewLeft = parseInt(this.DOM.timelineWrap.scrollLeft),\n\t\t\t\tviewRight = viewLeft + viewWidth;\n\n\t\t\tlet newScrollLeft = viewLeft;\n\n\t\t\tif (selectorLeft < viewLeft + screenDelta\n\t\t\t\t|| selectorLeft > viewRight - screenDelta\n\t\t\t\t|| alignCenter\n\t\t\t)\n\t\t\t{\n\t\t\t\t// Selector is smaller than view - we puting it in the middle of the view\n\t\t\t\tif (selectorWidth <= viewWidth)\n\t\t\t\t{\n\t\t\t\t\tnewScrollLeft = Math.max(Math.round(selectorLeft - ((viewWidth - selectorWidth) / 2 )), screenDelta);\n\n\t\t\t\t}\n\t\t\t\telse // Selector is wider, so we adjust by left side\n\t\t\t\t{\n\t\t\t\t\tnewScrollLeft = Math.max(Math.round(selectorLeft - screenDelta), screenDelta);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (newScrollLeft !== viewLeft)\n\t\t\t{\n\t\t\t\tif (animation === false)\n\t\t\t\t{\n\t\t\t\t\tthis.DOM.timelineWrap.scrollLeft = newScrollLeft;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tnew BX.easing({\n\t\t\t\t\t\tduration: 300,\n\t\t\t\t\t\tstart: {scrollLeft: this.DOM.timelineWrap.scrollLeft},\n\t\t\t\t\t\tfinish: {scrollLeft: newScrollLeft},\n\t\t\t\t\t\ttransition: BX.easing.makeEaseOut(BX.easing.transitions.quad),\n\t\t\t\t\t\tstep: (state)=>{this.DOM.timelineWrap.scrollLeft = state.scrollLeft;},\n\t\t\t\t\t\tcomplete: ()=>{}\n\t\t\t\t\t}).animate();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tgetDuration()\n\t{\n\t\tlet duration = Math.round((this.currentDateTo - this.currentDateFrom) / 1000) * 1000;\n\n\t\tif (this.fullDayMode)\n\t\t{\n\t\t\tduration += Util.getDayLength();\n\t\t}\n\n\t\treturn duration;\n\t}\n\n\tgetDateFrom()\n\t{\n\t\treturn this.currentDateFrom;\n\t}\n\n\tgetDateTo()\n\t{\n\t\treturn this.currentDateTo;\n\t}\n}","// @flow\nimport { Runtime, Type, Event, Loc, Dom, Tag, Text, Browser, Extension } from 'main.core';\nimport { Util } from 'calendar.util';\nimport { EventEmitter, BaseEvent } from 'main.core.events';\nimport { FeaturePromotersRegistry } from 'ui.info-helper';\nimport { Selector } from './selector.js';\nimport { PopupWindowManager } from 'main.popup';\nimport { DateTimeFormat } from 'main.date';\nimport { AvatarRoundGuest } from 'ui.avatar';\n\nexport class Planner extends EventEmitter\n{\n\tDOM = {};\n\tconfig = {};\n\tentryStatusMap = {\n\t\th : 'user-status-h',\n\t\ty : 'user-status-y',\n\t\tq : 'user-status-q',\n\t\tn : 'user-status-n',\n\t\ttzAll: 'user-status-different-timezone',\n\t};\n\tscaleTypes = ['15min','30min','1hour', '2hour', '1day'];\n\tsavedScaleType = null;\n\tSCALE_OFFSET_BEFORE = 0; // in days\n\tSCALE_OFFSET_AFTER = 13; // in days\n\tEXPAND_OFFSET = 3; // in days\n\tEXPAND_DELAY = 2000; // ms\n\tREBUILD_DELAY = 100;\n\tmaxTimelineSize = 300;\n\tinitialMinEntryRows = 3;\n\tMIN_ENTRY_ROWS = this.initialMinEntryRows;\n\tMAX_ENTRY_ROWS = 300;\n\twidth = 700;\n\theight = 84;\n\tminWidth = 700;\n\tminHeight = 84;\n\tworkTime = [8, 18];\n\twarningHoursFrom = 9;\n\twarningHoursTo = 18;\n\tscrollStep = 10;\n\tshown = false;\n\tbuilt = false;\n\tlocked = false;\n\tshownScaleTimeFrom = 24;\n\tshownScaleTimeTo = 0;\n\ttimelineCellWidthOrig = false;\n\tproposeTimeLimit = 14; // in days\n\texpandTimelineDelay = 600;\n\tlimitScaleSizeMode = false;\n\tuseAnimation = true;\n\tcheckTimeCache = {};\n\tentriesIndex = new Map();\n\tsolidStatus = false;\n\n\tconstructor(params = {})\n\t{\n\t\tsuper();\n\t\tthis.setEventNamespace('BX.Calendar.Planner');\n\t\tthis.config = params;\n\t\tthis.setEntriesCount(params.entriesCount ?? 0);\n\t\tthis.id = params.id;\n\t\tthis.userId = parseInt(params.userId || Loc.getMessage('USER_ID'));\n\t\tthis.DOM.wrap = params.wrap;\n\t\tthis.SCALE_TIME_FORMAT = BX.isAmPmMode() ? 'g a' : 'G';\n\t\tthis.userTimezone = Util.getUserSettings().timezoneName;\n\t\tthis.currentTimezone = Type.isStringFilled(params.entryTimezone) ? params.entryTimezone : this.userTimezone;\n\t\tthis.alwaysBlue = params.alwaysBlue;\n\n\t\tthis.expandTimelineDebounce = Runtime.debounce(this.expandTimeline, this.EXPAND_DELAY, this);\n\t\tthis.showMoreUsersBind = this.showMoreUsers.bind(this);\n\t\tthis.hideMoreUsersBind = this.hideMoreUsers.bind(this);\n\t\tthis.setConfig(params);\n\t}\n\n\tstatic getMaxPlannerUsers(): number\n\t{\n\t\tconst settings = Extension.getSettings('calendar.planner');\n\n\t\treturn settings.maxPlannerUsers;\n\t}\n\n\tshow()\n\t{\n\t\tif (this.currentFromDate && this.currentToDate)\n\t\t{\n\t\t\tconst hourFrom = this.currentFromDate.getHours();\n\t\t\tconst hourTo = this.currentToDate.getHours() + Math.ceil(this.currentToDate.getMinutes() / 60);\n\t\t\tthis.extendScaleTimeLimits(hourFrom, hourTo);\n\t\t}\n\n\t\tif (this.currentFromDate && this.currentToDate)\n\t\t{\n\t\t\tthis.updateScaleLimitsFromEntry(this.currentFromDate, this.currentToDate);\n\t\t}\n\n\t\tlet animation = false;\n\n\t\tif (this.hideAnimation)\n\t\t{\n\t\t\tthis.hideAnimation.stop();\n\t\t\tthis.hideAnimation = null;\n\t\t}\n\n\t\tif (this.isBuilt())\n\t\t{\n\t\t\tthis.resizePlannerWidth(this.width);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.build();\n\t\t\tthis.bindEventHandlers();\n\t\t}\n\n\t\tthis.buildTimeline();\n\t\tthis.DOM.wrap.style.display = '';\n\n\t\tif (this.adjustWidth)\n\t\t{\n\t\t\tthis.resizePlannerWidth(this.DOM.timelineInnerWrap.offsetWidth);\n\t\t}\n\n\t\tthis.selector.update({\n\t\t\tfrom: this.currentFromDate,\n\t\t\tto: this.currentToDate,\n\t\t\tanimation: false\n\t\t});\n\t\tif (this.currentFromDate && this.currentToDate\n\t\t\t&& this.currentFromDate.getTime() >= this.scaleDateFrom.getTime()\n\t\t\t&& this.currentToDate.getTime() <= this.scaleDateTo.getTime()\n\t\t)\n\t\t{\n\t\t\tthis.selector.focus(false, 0, true);\n\t\t}\n\n\t\tif (this.readonly)\n\t\t{\n\t\t\tDom.addClass(this.DOM.mainWrap, 'calendar-planner-readonly');\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDom.removeClass(this.DOM.mainWrap, 'calendar-planner-readonly');\n\t\t}\n\n\t\tif (this.compactMode)\n\t\t{\n\t\t\tDom.addClass(this.DOM.mainWrap, 'calendar-planner-compact');\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDom.removeClass(this.DOM.mainWrap, 'calendar-planner-compact');\n\t\t}\n\n\t\tthis.DOM.entriesOuterWrap.style.display = this.compactMode ? 'none' : '';\n\n\t\tif (animation)\n\t\t{\n\t\t\tif (this.showAnimation)\n\t\t\t{\n\t\t\t\tthis.showAnimation.stop();\n\t\t\t}\n\t\t\tthis.showAnimation = new BX.easing({\n\t\t\t\tduration: 300,\n\t\t\t\tstart: {height: 0},\n\t\t\t\tfinish: {height: this.height},\n\t\t\t\ttransition: BX.easing.makeEaseOut(BX.easing.transitions.quart),\n\t\t\t\tstep: (state) => {this.DOM.wrap.style.height = state.height + 'px';},\n\t\t\t\tcomplete: () => {\n\t\t\t\t\tif (parseInt(this.DOM.wrap.style.height) < this.height)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.DOM.wrap.style.height = this.height + 'px';\n\t\t\t\t\t}\n\t\t\t\t\tthis.showAnimation = null;\n\t\t\t\t\tthis.selector.focus();\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.showAnimation.animate();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (parseInt(this.DOM.wrap.style.height) < this.height)\n\t\t\t{\n\t\t\t\tthis.DOM.wrap.style.height = this.height + 'px';\n\t\t\t}\n\t\t\tthis.adjustHeight();\n\t\t}\n\n\t\tthis.shown = true;\n\t}\n\n\tsetEntriesCount(entriesCount: number): void\n\t{\n\t\tconst maxPlannerUsers = Planner.getMaxPlannerUsers();\n\t\tif (maxPlannerUsers > 0 && entriesCount > 0)\n\t\t{\n\t\t\tthis.setVisible(entriesCount <= maxPlannerUsers);\n\t\t}\n\t}\n\n\tsetVisible(isVisible: boolean): void\n\t{\n\t\tif (isVisible === this.isVisible)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (isVisible)\n\t\t{\n\t\t\tthis.DOM.wrap.parentElement.style.setProperty('display', '');\n\t\t\tthis.rebuildDebounce({ dontFocus: true });\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.DOM.wrap.parentElement.style.setProperty('display', 'none', 'important');\n\t\t}\n\n\t\tthis.isVisible = isVisible;\n\t}\n\n\tsetConfig(params)\n\t{\n\t\tthis.todayLocMessage = Loc.getMessage('EC_PLANNER_TODAY');\n\n\t\tthis.setScaleType(params.scaleType);\n\n\t\t// showTimelineDayTitle\n\t\tif (params.showTimelineDayTitle !== undefined)\n\t\t{\n\t\t\tthis.showTimelineDayTitle = !!params.showTimelineDayTitle;\n\t\t}\n\t\telse if(this.showTimelineDayTitle === undefined)\n\t\t{\n\t\t\tthis.showTimelineDayTitle = true;\n\t\t}\n\n\t\t// compactMode\n\t\tif (params.compactMode !== undefined)\n\t\t{\n\t\t\tthis.compactMode = !!params.compactMode;\n\t\t}\n\t\telse if (this.compactMode === undefined)\n\t\t{\n\t\t\tthis.compactMode = false;\n\t\t}\n\n\t\t// readonly\n\t\tif (params.readonly !== undefined)\n\t\t{\n\t\t\tthis.readonly = Boolean(params.readonly);\n\t\t}\n\t\telse if (this.readonly === undefined)\n\t\t{\n\t\t\tthis.readonly = false;\n\t\t}\n\n\t\tif (this.compactMode)\n\t\t{\n\t\t\tlet compactHeight = 50;\n\t\t\tif (this.showTimelineDayTitle && !this.isOneDayScale())\n\t\t\t\tcompactHeight += 20;\n\t\t\tthis.height = this.minHeight = compactHeight;\n\t\t}\n\n\t\tif (Type.isInteger(params.SCALE_OFFSET_BEFORE))\n\t\t{\n\t\t\tthis.SCALE_OFFSET_BEFORE = parseInt(params.SCALE_OFFSET_BEFORE);\n\t\t}\n\t\tif (Type.isInteger(params.SCALE_OFFSET_AFTER))\n\t\t{\n\t\t\tthis.SCALE_OFFSET_AFTER = parseInt(params.SCALE_OFFSET_AFTER);\n\t\t}\n\t\tif (Type.isInteger(params.maxTimelineSize))\n\t\t{\n\t\t\tthis.maxTimelineSize = parseInt(params.maxTimelineSize);\n\t\t}\n\t\tif (Type.isInteger(params.minEntryRows))\n\t\t{\n\t\t\tthis.MIN_ENTRY_ROWS = parseInt(params.minEntryRows);\n\t\t}\n\t\tif (Type.isInteger(params.maxEntryRows))\n\t\t{\n\t\t\tthis.MAX_ENTRY_ROWS = parseInt(params.maxEntryRows);\n\t\t}\n\n\t\tif (Type.isInteger(params.width))\n\t\t{\n\t\t\tthis.width = parseInt(params.width);\n\t\t}\n\t\tif (Type.isInteger(params.height))\n\t\t{\n\t\t\tthis.height = parseInt(params.height);\n\t\t}\n\t\tif (Type.isInteger(params.minWidth))\n\t\t{\n\t\t\tthis.minWidth = parseInt(params.minWidth);\n\t\t}\n\t\tif (Type.isInteger(params.minHeight))\n\t\t{\n\t\t\tthis.minHeight = parseInt(params.minHeight);\n\t\t}\n\t\tthis.width = Math.max(this.minWidth, this.width);\n\t\tthis.height = Math.max(this.minHeight, this.height);\n\n\t\tif (Type.isArray(params.workTime))\n\t\t{\n\t\t\tthis.workTime = params.workTime;\n\t\t}\n\t\tthis.extendScaleTime(this.workTime[0], this.workTime[1]);\n\n\t\tthis.weekHolidays = params.weekHolidays || this.weekHolidays || [];\n\t\tthis.yearHolidays = params.yearHolidays || this.yearHolidays || [];\n\t\tthis.accuracy = params.accuracy || this.accuracy || 300; // 5 min\n\t\tthis.clickSelectorScaleAccuracy = params.clickSelectorScaleAccuracy || this.accuracy; // 5 min\n\t\tthis.selectorAccuracy = parseInt(params.selectorAccuracy) || this.selectorAccuracy || 300; // 5 min\n\t\tthis.entriesListWidth = parseInt(params.entriesListWidth) || this.entriesListWidth || 200;\n\t\tthis.timelineCellWidth = params.timelineCellWidth || this.timelineCellWidth || 40;\n\t\tthis.solidStatus = params.solidStatus === true;\n\t\tthis.showWorkTimeNotice = params.showWorkTimeNotice === true;\n\n\t\tthis.showEntiesHeader = params.showEntiesHeader === undefined ? true : !!params.showEntiesHeader;\n\t\tthis.showEntryName = params.showEntryName === undefined ? true : !!params.showEntryName;\n\n\t\tif (this.isOneDayScale() && this.timelineCellWidth < 100)\n\t\t{\n\t\t\tthis.timelineCellWidthOrig = this.timelineCellWidth;\n\t\t\tthis.timelineCellWidth = 100;\n\t\t}\n\t\telse if(this.timelineCellWidthOrig && !this.isOneDayScale())\n\t\t{\n\t\t\tthis.timelineCellWidth = this.timelineCellWidthOrig;\n\t\t\tthis.timelineCellWidthOrig = false;\n\t\t}\n\n\t\tif (this.allowAdjustCellWidth === undefined || params.allowAdjustCellWidth !== undefined)\n\t\t{\n\t\t\tthis.allowAdjustCellWidth = this.readonly\n\t\t\t\t&& this.compactMode\n\t\t\t\t&& params.allowAdjustCellWidth !== false;\n\t\t}\n\n\t\tif (params.locked !== undefined)\n\t\t{\n\t\t\tthis.locked = params.locked;\n\t\t}\n\n\t\tif (this.isLocked())\n\t\t{\n\t\t\tthis.readonly = true;\n\t\t}\n\n\t\tthis.adjustCellWidth();\n\n\t\t// Scale params\n\t\tthis.setScaleLimits(params.scaleDateFrom, params.scaleDateTo);\n\n\t\tconst warningTimeFrom = Util.config?.work_time_start ?? 9;\n\t\tconst warningTimeTo = Util.config?.work_time_end ?? 18;\n\n\t\tconst date = new Date().toDateString();\n\t\tconst warningDateFrom = new Date(`${date} ${`${warningTimeFrom}`.replace('.', ':')}:00`);\n\t\tconst warningDateTo = new Date(`${date} ${`${warningTimeTo}`.replace('.', ':')}:00`);\n\n\t\tthis.warningHoursFrom = this.getDateHours(warningDateFrom);\n\t\tthis.warningHoursTo = this.getDateHours(warningDateTo);\n\t}\n\n\tupdateScaleLimitsFromEntry(from, to)\n\t{\n\t\tif (from.getTime() > this.scaleDateTo.getTime() || to.getTime() < this.scaleDateFrom.getTime())\n\t\t{\n\t\t\tthis.setScaleLimits(new Date(from.getTime()), new Date(to.getTime() + Util.getDayLength() * this.SCALE_OFFSET_AFTER));\n\t\t}\n\t}\n\n\tsetScaleLimits(scaleDateFrom, scaleDateTo)\n\t{\n\t\tif (scaleDateFrom !== undefined)\n\t\t{\n\t\t\tthis.scaleDateFrom = Type.isDate(scaleDateFrom) ? scaleDateFrom : Util.parseDate(scaleDateFrom);\n\t\t}\n\n\t\tif (!Type.isDate(this.scaleDateFrom))\n\t\t{\n\t\t\tif (this.compactMode && this.readonly)\n\t\t\t{\n\t\t\t\tthis.scaleDateFrom = new Date();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.scaleDateFrom = new Date(new Date().getTime() - Util.getDayLength() * this.SCALE_OFFSET_BEFORE);\n\t\t\t}\n\t\t}\n\t\tthis.scaleDateFrom.setHours(this.isOneDayScale() ? 0 : this.shownScaleTimeFrom, 0, 0, 0);\n\n\t\tif (scaleDateTo !== undefined)\n\t\t{\n\t\t\tthis.scaleDateTo = BX.type.isString(scaleDateTo) ? Util.parseDate(scaleDateTo) : scaleDateTo;\n\t\t}\n\n\t\tif (!Type.isDate(this.scaleDateTo))\n\t\t{\n\t\t\tif (this.compactMode && this.readonly)\n\t\t\t{\n\t\t\t\tthis.scaleDateTo = new Date();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.scaleDateTo = new Date(new Date().getTime() + Util.getDayLength() * this.SCALE_OFFSET_AFTER);\n\t\t\t}\n\t\t}\n\t\tthis.scaleDateTo.setHours(this.isOneDayScale() ? 0 : this.shownScaleTimeTo, 0, 0, 0);\n\t}\n\n\textendScaleTimeLimits(fromTime, toTime)\n\t{\n\t\tif (fromTime !== false && !isNaN(parseInt(fromTime)))\n\t\t{\n\t\t\tthis.shownScaleTimeFrom = Math.min(parseInt(fromTime), this.shownScaleTimeFrom, 23);\n\t\t\tthis.shownScaleTimeFrom = Math.max(this.shownScaleTimeFrom, 0);\n\n\t\t\tif (this.scaleDateFrom)\n\t\t\t{\n\t\t\t\tthis.scaleDateFrom.setHours(this.shownScaleTimeFrom, 0, 0 ,0);\n\t\t\t}\n\t\t}\n\n\t\tif (toTime !== false && !isNaN(parseInt(toTime)))\n\t\t{\n\t\t\tthis.shownScaleTimeTo = Math.max(parseInt(toTime), this.shownScaleTimeTo, 1);\n\t\t\tthis.shownScaleTimeTo = Math.min(this.shownScaleTimeTo, 24);\n\n\t\t\tif (this.scaleDateTo)\n\t\t\t{\n\t\t\t\tthis.scaleDateTo.setHours(this.shownScaleTimeTo, 0, 0, 0);\n\t\t\t}\n\t\t}\n\n\t\tif (this.shownScaleTimeFrom % 2 !== 0)\n\t\t{\n\t\t\tthis.shownScaleTimeFrom--;\n\t\t}\n\n\t\tif (this.shownScaleTimeTo % 2 !== 0)\n\t\t{\n\t\t\tthis.shownScaleTimeTo++;\n\t\t}\n\t}\n\n\tSetLoadedDataLimits(from, to)\n\t{\n\t\tif (from)\n\t\t{\n\t\t\tthis.loadedDataFrom = from.getTime ? from : Util.parseDate(from);\n\t\t}\n\t\tif (to)\n\t\t{\n\t\t\tthis.loadedDataTo = to.getTime ? to : Util.parseDate(to);\n\t\t}\n\t}\n\n\textendScaleTime(fromTime, toTime)\n\t{\n\t\tconst savedTimeFrom = this.shownScaleTimeFrom;\n\t\tconst savedTimeTo = this.shownScaleTimeTo;\n\n\t\tthis.extendScaleTimeLimits(fromTime, toTime);\n\n\t\tif (fromTime === false && toTime !== false)\n\t\t{\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.extendTimelineToRight(savedTimeTo, this.shownScaleTimeTo);\n\t\t\t}, 200);\n\t\t}\n\t\tif (fromTime !== false && toTime === false)\n\t\t{\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.extendTimelineToLeft(this.shownScaleTimeFrom, savedTimeFrom);\n\t\t\t}, 200);\n\t\t}\n\t\tif (fromTime !== false && toTime !== false)\n\t\t{\n\t\t\tthis.rebuildDebounce();\n\t\t}\n\t}\n\n\tadjustCellWidth()\n\t{\n\t\tif (this.allowAdjustCellWidth)\n\t\t{\n\t\t\tthis.timelineCellWidth = Math.round(this.width / ((this.shownScaleTimeTo - this.shownScaleTimeFrom) * 3600 / this.scaleSize));\n\t\t}\n\t}\n\n\tbuild()\n\t{\n\t\tthis.DOM.wrap.style.width = this.width + 'px';\n\t\tthis.DOM.wrap.append(this.render());\n\n\t\tif (this.isLocked())\n\t\t{\n\t\t\tthis.lock();\n\t\t}\n\n\t\tthis.built = true;\n\t\twindow.plannerr = this;\n\t}\n\n\trender()\n\t{\n\t\tthis.selector = this.createSelector();\n\n\t\tthis.DOM.mainWrap = Tag.render`\n\t\t\t<div\n\t\t\t\tclass=\"calendar-planner-main-container calendar-planner-main-container-resource\"\n\t\t\t\tstyle=\"\n\t\t\t\t\tmin-height: ${this.minHeight}px;\n\t\t\t\t\theight: ${this.height}px;\n\t\t\t\t\twidth: ${this.width}px;\n\t\t\t\t\"\n\t\t\t>\n\t\t\t\t${this.renderEntriesOuterWrap()}\n\t\t\t\t${this.renderTimelineFixedWrap()}\n\t\t\t\t${this.renderSelectorPopup()}\n\t\t\t\t${this.renderTimezoneNoticeCount()}\n\t\t\t\t${this.selector.getTitleNode()}\n\t\t\t\t${this.renderSettingsButton()}\n\t\t\t</div>\n\t\t`;\n\n\t\tthis.selector.DOM.timelineFixedWrap = this.DOM.timelineFixedWrap;\n\t\tthis.selector.DOM.timelineWrap = this.DOM.timelineVerticalConstraint;\n\n\t\tif (!this.showEntryName)\n\t\t{\n\t\t\tthis.DOM.entriesOuterWrap.style.width = '55px';\n\t\t\tDom.addClass(this.DOM.mainWrap, 'calendar-planner-entry-icons-only');\n\t\t}\n\n\t\tif (this.readonly)\n\t\t{\n\t\t\tDom.addClass(this.DOM.mainWrap, 'calendar-planner-readonly');\n\t\t}\n\n\t\tif (this.compactMode)\n\t\t{\n\t\t\tDom.addClass(this.DOM.mainWrap, 'calendar-planner-compact');\n\t\t}\n\n\t\treturn this.DOM.mainWrap;\n\t}\n\n\tcreateSelector()\n\t{\n\t\tconst selector = new Selector({\n\t\t\tgetPosByDate: this.getPosByDate.bind(this),\n\t\t\tgetDateByPos: this.getDateByPos.bind(this),\n\t\t\tgetEvents: this.getAllEvents.bind(this),\n\t\t\tgetPosDateMap: () => {\n\t\t\t\treturn this.posDateMap;\n\t\t\t},\n\t\t\tuseAnimation: this.useAnimation,\n\t\t\tsolidStatus: this.solidStatus,\n\t\t\tgetScaleInfo: () => {return {\n\t\t\t\tscale: this.scaleType,\n\t\t\t\tshownTimeFrom: this.shownScaleTimeFrom,\n\t\t\t\tshownTimeTo: this.shownScaleTimeTo,\n\t\t\t\tscaleDateFrom: this.scaleDateFrom,\n\t\t\t\tscaleDateTo: this.scaleDateTo,\n\t\t\t}},\n\t\t\tgetTimelineWidth: () => {\n\t\t\t\treturn parseInt(this.DOM.timelineInnerWrap.style.width)\n\t\t\t},\n\t\t\talwaysBlue: this.alwaysBlue === true,\n\t\t});\n\t\tselector.subscribe('onChange', this.handleSelectorChanges.bind(this));\n\t\tselector.subscribe('doCheckStatus', this.doCheckSelectorStatus.bind(this));\n\t\tselector.subscribe('onBeginChange', this.onBeginChangeHandler.bind(this));\n\t\tselector.subscribe('onStopAutoScroll', this.onStopAutoScrollHandler.bind(this));\n\t\tselector.subscribe('onStartTransit', this.hideTimezoneNotice.bind(this));\n\n\t\treturn selector;\n\t}\n\n\trenderEntriesOuterWrap()\n\t{\n\t\tthis.DOM.entriesOuterWrap = Tag.render`\n\t\t\t<div\n\t\t\t\tclass=\"calendar-planner-user-container\"\n\t\t\t\tstyle=\"\n\t\t\t\t\twidth: ${this.entriesListWidth}px;\n\t\t\t\t\theight: ${this.height}px;\n\t\t\t\t\"\n\t\t\t>\n\t\t\t\t${this.renderEntriesListHeader()}\n\t\t\t\t${this.renderEntriesListWrap()}\n\t\t\t</div>\n\t\t`;\n\n\t\tUtil.preventSelection(this.DOM.entriesOuterWrap);\n\t\tif (this.compactMode)\n\t\t{\n\t\t\tthis.DOM.entriesOuterWrap.style.display = 'none';\n\t\t}\n\n\t\tif (this.isOneDayScale())\n\t\t{\n\t\t\tDom.addClass(this.DOM.entriesOuterWrap, 'calendar-planner-no-daytitle');\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDom.removeClass(this.DOM.entriesOuterWrap, 'calendar-planner-no-daytitle');\n\t\t}\n\n\t\treturn this.DOM.entriesOuterWrap;\n\t}\n\n\trenderEntriesListHeader()\n\t{\n\t\tif (!this.showEntiesHeader)\n\t\t{\n\t\t\treturn '';\n\t\t}\n\n\t\treturn Tag.render`\n\t\t\t<div class=\"calendar-planner-header\">\n\t\t\t\t<div class=\"calendar-planner-general-info\">\n\t\t\t\t\t<div class=\"calendar-planner-users-header\">\n\t\t\t\t\t\t<span class=\"calendar-planner-users-item\">\n\t\t\t\t\t\t\t${Loc.getMessage('EC_PL_ATTENDEES_TITLE') + ' '}\n\t\t\t\t\t\t\t${this.renderEntriesListTitleCounter()}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`;\n\t}\n\n\trenderEntriesListTitleCounter()\n\t{\n\t\tthis.entriesListTitleCounter = Tag.render`\n\t\t\t<span></span>\n\t\t`;\n\n\t\treturn this.entriesListTitleCounter;\n\t}\n\n\trenderEntriesListWrap()\n\t{\n\t\tthis.DOM.entrieListWrap = Tag.render`\n\t\t\t<div\n\t\t\t\tclass=\"calendar-planner-user-container-inner\"\n\t\t\t\tstyle=\"\n\t\t\t\t\twidth: ${this.entriesListWidth - 25}px;\n\t\t\t\t\"\n\t\t\t></div>\n\t\t`;\n\n\t\treturn this.DOM.entrieListWrap;\n\t}\n\n\trenderTimelineFixedWrap()\n\t{\n\t\tthis.DOM.timelineFixedWrap = Tag.render`\n\t\t\t<div class=\"calendar-planner-timeline-wrapper\" style=\"height: ${this.height}px;\">\n\t\t\t\t${this.renderTimelineVerticalConstraint()}\n\t\t\t</div>\n\t\t`;\n\n\t\treturn this.DOM.timelineFixedWrap;\n\t}\n\n\trenderTimelineVerticalConstraint()\n\t{\n\t\tthis.DOM.timelineVerticalConstraint = Tag.render`\n\t\t\t<div class=\"calendar-planner-timeline-constraint\">\n\t\t\t\t${this.renderTimelineInnerWrap()}\n\t\t\t</div>\n\t\t`;\n\n\t\tif (this.isTodayButtonEnabled())\n\t\t{\n\t\t\tthis.DOM.timelineVerticalConstraint.addEventListener('scroll', this.onScrollHandler.bind(this));\n\t\t}\n\n\t\treturn this.DOM.timelineVerticalConstraint;\n\t}\n\n\trenderTimelineInnerWrap()\n\t{\n\t\tthis.DOM.timelineInnerWrap = Tag.render`\n\t\t\t<div class=\"calendar-planner-timeline-inner-wrapper\" data-bx-planner-meta=\"timeline\">\n\t\t\t\t${this.renderTimelineScaleWrap()}\n\t\t\t\t${this.renderTimelineDataWrap()}\n\t\t\t</div>\n\t\t`;\n\n\t\treturn this.DOM.timelineInnerWrap;\n\t}\n\n\trenderTimelineScaleWrap()\n\t{\n\t\tthis.DOM.timelineScaleWrap = Tag.render`\n\t\t\t<div class=\"calendar-planner-time\"></div>\n\t\t`;\n\t\tUtil.preventSelection(this.DOM.timelineScaleWrap);\n\n\t\treturn this.DOM.timelineScaleWrap;\n\t}\n\n\trenderTimelineDataWrap()\n\t{\n\t\tthis.DOM.timelineDataWrap = Tag.render`\n\t\t\t<div class=\"calendar-planner-timeline-container\" style=\"height: ${this.height}px\">\n\t\t\t\t${this.renderTimelineAccessibilityWrap()}\n\t\t\t\t${this.selector.getWrap()}\n\t\t\t</div>\n\t\t`;\n\n\t\treturn this.DOM.timelineDataWrap;\n\t}\n\n\trenderTimelineAccessibilityWrap()\n\t{\n\t\tthis.DOM.accessibilityWrap = Tag.render`\n\t\t\t<div class=\"calendar-planner-acc-wrap\"></div>\n\t\t`;\n\n\t\treturn this.DOM.accessibilityWrap;\n\t}\n\n\trenderSettingsButton()\n\t{\n\t\tif (this.compactMode)\n\t\t{\n\t\t\treturn ''\n\t\t}\n\n\t\tthis.DOM.settingsButton = Tag.render`\n\t\t\t<div class=\"calendar-planner-settings-icon-container\" title=\"${Loc.getMessage('EC_PL_SETTINGS_SCALE')}\">\n\t\t\t\t<span class=\"calendar-planner-settings-title\">\n\t\t\t\t\t${Loc.getMessage('EC_PL_SETTINGS_SCALE')}\n\t\t\t\t</span>\n\t\t\t\t<span class=\"calendar-planner-settings-icon\"></span>\n\t\t\t</div>\n\t\t`;\n\n\t\tEvent.bind(this.DOM.settingsButton, 'click', () => this.showSettingsPopup());\n\n\t\treturn this.DOM.settingsButton;\n\t}\n\n\trenderSelectorPopup()\n\t{\n\t\tthis.DOM.selectorPopup = Tag.render`\n\t\t\t<div class=\"calendar-planner-selector-notice-popup\" style=\"display: none;\">\n\t\t\t\t${Loc.getMessage('EC_PLANNER_TIMEZONE_NOTICE')}\n\t\t\t</div>\n\t\t`;\n\n\t\tEvent.bind(this.DOM.selectorPopup, 'click', () => this.hideSelectorPopup());\n\n\t\tthis.doShowTimezoneNoticePopup = true;\n\n\t\treturn this.DOM.selectorPopup;\n\t}\n\n\trenderTimezoneNoticeCount()\n\t{\n\t\tthis.DOM.timezoneNoticeCount = Tag.render`\n\t\t\t<div class=\"calendar-planner-timezone-count-notice\" style=\"display: none;\">\n\t\t\t\t${this.renderTimezoneNoticeText(1)}\n\t\t\t</div>\n\t\t`;\n\n\t\treturn this.DOM.timezoneNoticeCount;\n\t}\n\n\trenderTimezoneNoticeText(count, isWarning = false)\n\t{\n\t\tconst warningClass = isWarning ? '--warning' : '';\n\t\treturn Loc.getMessage('EC_PLANNER_TIMEZONE_NOTICE_TEXT', {\n\t\t\t'#CLASS#': `calendar-planner-timezone-count-notice-text ${warningClass}`,\n\t\t\t'#COUNT#': count,\n\t\t});\n\t}\n\n\trenderVacationNode(entryId)\n\t{\n\t\tconst vacationNode = Tag.render`\n\t\t\t<div \n\t\t\tclass=\"calendar-planner-timeline-side-notice --vacation\"\n\t\t\tid=\"timeline-side-notice-${entryId}\"\n\t\t\tstyle=\"display: none;\"\n\t\t\t>${Loc.getMessage('EC_PLANNER_IN_VACATION')}</div>\n\t\t`;\n\n\t\tEvent.bind(vacationNode, 'mouseenter', this.showHintPopup.bind(this, vacationNode));\n\t\tEvent.bind(vacationNode, 'mouseleave', this.hideHintPopup.bind(this, vacationNode));\n\n\t\treturn vacationNode;\n\t}\n\n\tshowHintPopup(node)\n\t{\n\t\tnode.hintPopup = Tag.render`\n\t\t\t<div class=\"calendar-planner-selector-notice-popup --hint\">\n\t\t\t\t${node.dataHint}\n\t\t\t</div>\n\t\t`;\n\n\t\tEvent.bind(this.DOM.selectorPopup, 'click', () => this.hideHintPopup(node));\n\n\t\tthis.DOM.entrieListWrap.style.zIndex = '';\n\t\tthis.DOM.entrieListWrap.style.overflow = '';\n\t\tthis.DOM.entrieListWrap.style.clipPath = '';\n\n\t\tnode.append(node.hintPopup);\n\t}\n\n\thideHintPopup(node)\n\t{\n\t\tnode.hintPopup.remove();\n\t}\n\n\tbuildTimeline(clearCache)\n\t{\n\t\tif (\n\t\t\tthis.isBuilt()\n\t\t\t&& (this.lastTimelineKey !== this.getTimelineShownKey()\n\t\t\t|| clearCache === true)\n\t\t)\n\t\t{\n\t\t\tDom.clean(this.DOM.timelineScaleWrap);\n\n\t\t\tthis.scaleData = this.getScaleData();\n\n\t\t\tlet\n\t\t\t\touterDayCont,\n\t\t\t\tdayTitle,\n\t\t\t\tcont = this.DOM.timelineScaleWrap;\n\n\t\t\tthis.futureDayTitles = [];\n\t\t\tthis.todayButtonPivotDay = undefined;\n\t\t\tfor (let i = 0; i < this.scaleData.length; i++)\n\t\t\t{\n\t\t\t\tif (this.showTimelineDayTitle && !this.isOneDayScale())\n\t\t\t\t{\n\t\t\t\t\tif (this.scaleDayTitles[this.scaleData[i].daystamp])\n\t\t\t\t\t{\n\t\t\t\t\t\tcont = this.scaleDayTitles[this.scaleData[i].daystamp];\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tconst date = new Date(this.scaleData[i].timestamp);\n\t\t\t\t\t\tdate.setHours(0, 0, 0, 0);\n\t\t\t\t\t\tconst today = new Date();\n\t\t\t\t\t\ttoday.setHours(0, 0, 0, 0);\n\n\t\t\t\t\t\touterDayCont = this.DOM.timelineScaleWrap.appendChild(Tag.render`\n\t\t\t\t\t\t\t<div class=\"calendar-planner-time-day-outer\"></div>\n\t\t\t\t\t\t`);\n\n\t\t\t\t\t\tlet dayTitleClass = 'calendar-planner-time-day-title';\n\t\t\t\t\t\tif (date.getTime() < today.getTime())\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdayTitleClass += ' calendar-planner-time-day-past';\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//F d, l\n\t\t\t\t\t\tdayTitle = outerDayCont.appendChild(Tag.render`\n\t\t\t\t\t\t\t<div class=\"${dayTitleClass}\">\n\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t${DateTimeFormat.format(\n\t\t\t\t\t\t\t\t\t\tDateTimeFormat.getFormat('DAY_OF_WEEK_MONTH_FORMAT'),\n\t\t\t\t\t\t\t\t\t\tthis.scaleData[i].timestamp / 1000,\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<div class=\"calendar-planner-time-day-border\"></div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`);\n\n\t\t\t\t\t\tif (date.getTime() > today.getTime())\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.futureDayTitles.push(dayTitle.querySelector('span'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (date.getTime() === today.getTime() && this.isTodayButtonEnabled())\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.todayTitleButton = dayTitle.firstElementChild.appendChild(Tag.render`\n\t\t\t\t\t\t\t\t<div class=\"calendar-planner-today-button\"></div>\n\t\t\t\t\t\t\t`);\n\t\t\t\t\t\t\tthis.todayTitleButton.innerHTML = this.todayLocMessage;\n\t\t\t\t\t\t\tthis.todayTitleButton.addEventListener('click', this.todayButtonClickHandler.bind(this));\n\t\t\t\t\t\t\tthis.todayButtonPivotDay = outerDayCont;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcont = outerDayCont.appendChild(Tag.render`\n\t\t\t\t\t\t\t<div class=\"calendar-planner-time-day\"></div>\n\t\t\t\t\t\t`);\n\n\t\t\t\t\t\tthis.scaleDayTitles[this.scaleData[i].daystamp] = cont;\n\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet className = 'calendar-planner-time-hour-item' + (this.scaleData[i].dayStart ? ' calendar-planner-day-start' : '');\n\n\t\t\t\tif (\n\t\t\t\t\t(this.scaleType === '15min' || this.scaleType === '30min')\n\t\t\t\t\t&& this.scaleData[i].title !== ''\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\tclassName += ' calendar-planner-time-hour-bold';\n\t\t\t\t}\n\n\t\t\t\tthis.scaleData[i].cell = cont.appendChild(BX.create('DIV', {\n\t\t\t\t\tprops: {\n\t\t\t\t\t\tclassName: className\n\t\t\t\t\t},\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\twidth: this.timelineCellWidth + 'px',\n\t\t\t\t\t\tminWidth: this.timelineCellWidth + 'px'\n\t\t\t\t\t},\n\t\t\t\t\thtml: this.scaleData[i].title ? '<i>' + this.scaleData[i].title + '</i>' : ''\n\t\t\t\t}));\n\n\t\t\t\tif (!this.isOneDayScale() && this.scaleData[i + 1] && this.scaleData[i + 1].dayStart)\n\t\t\t\t{\n\t\t\t\t\tcont.appendChild(Tag.render`\n\t\t\t\t\t\t<div class=\"calendar-planner-timeline-border\"></div>\n\t\t\t\t\t`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet mapDatePosRes = this.mapDatePos();\n\t\t\tthis.posDateMap = mapDatePosRes.posDateMap;\n\n\t\t\tconst timelineOffset = this.DOM.timelineScaleWrap.offsetWidth;\n\t\t\tthis.DOM.timelineInnerWrap.style.width = timelineOffset + 'px';\n\t\t\tthis.DOM.entrieListWrap.style.top = (parseInt(this.DOM.timelineDataWrap.offsetTop) + 10) + 'px';\n\n\t\t\tthis.lastTimelineKey = this.getTimelineShownKey();\n\t\t\tthis.checkRebuildTimeout(timelineOffset);\n\t\t\tthis.buildTodayButtonWrap();\n\n\t\t\tthis.scrollLeft = this.DOM.timelineVerticalConstraint.scrollLeft;\n\t\t}\n\t}\n\n\tbuildTodayButtonWrap()\n\t{\n\t\tif (!this.isTodayButtonEnabled())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.todayButton)\n\t\t{\n\t\t\tthis.todayButton.remove();\n\t\t}\n\t\tif (this.todayRightButton)\n\t\t{\n\t\t\tthis.todayRightButton.remove();\n\t\t}\n\t\tif (this.DOM.todayButtonContainer)\n\t\t{\n\t\t\tthis.DOM.todayButtonContainer.remove();\n\t\t}\n\t\tif (this.isOneDayScale())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tconst todayButton = this.DOM.entriesOuterWrap.appendChild(Tag.render`\n\t\t\t<div class=\"calendar-planner-today-button\">${this.todayLocMessage}</div>\n\t\t`);\n\t\tthis.todayButtonWidth = todayButton.offsetWidth;\n\t\ttodayButton.innerHTML = this.todayLocMessage + ' →';\n\t\tthis.todayButtonRightWidth = todayButton.offsetWidth;\n\t\ttodayButton.innerHTML = this.todayLocMessage + ' ←';\n\t\tthis.todayButtonLeftWidth = todayButton.offsetWidth;\n\t\tconst top = BX.pos(todayButton).top - BX.pos(this.DOM.timelineScaleWrap).top;\n\t\ttodayButton.remove();\n\n\t\tlet left = 0;\n\t\tif (this.todayButtonPivotDay)\n\t\t{\n\t\t\tleft = this.todayButtonPivotDay.offsetLeft + this.todayButtonPivotDay.offsetWidth - 10 - this.todayButtonWidth + 1;\n\t\t}\n\t\tconst width = this.DOM.timelineScaleWrap.offsetWidth - left;\n\t\tthis.DOM.todayButtonContainer = this.DOM.timelineScaleWrap.appendChild(Tag.render`\n\t\t\t<div class=\"calendar-planner-today-button-container\" style=\"width: ${width}px; left: ${left}px; top: ${top}px;\"></div>\n\t\t`);\n\t\tthis.todayButton = this.DOM.todayButtonContainer.appendChild(Tag.render`\n\t\t\t<div class=\"calendar-planner-today-button\" style=\"width: ${this.todayButtonWidth}px; direction: rtl;\">${this.todayLocMessage}</div>\n\t\t`);\n\t\tthis.todayRightButton = this.DOM.timelineVerticalConstraint.appendChild(Tag.render`\n\t\t\t<div class=\"calendar-planner-today-button\" style=\"right: 0; top: 5px; position: absolute;\">${this.todayLocMessage}</div>\n\t\t`);\n\n\t\tthis.todayButton.addEventListener('click', this.todayButtonClickHandler.bind(this));\n\t\tthis.todayRightButton.addEventListener('click', this.todayButtonClickHandler.bind(this));\n\t\tthis.updateTodayButtonVisibility(false);\n\n\t\tif (this.isLocked() && this.DOM.todayButtonContainer)\n\t\t{\n\t\t\tDom.addClass(this.DOM.todayButtonContainer, '--lock');\n\t\t}\n\t}\n\n\tgetTimelineShownKey()\n\t{\n\t\treturn 'tm_' + this.scaleDateFrom.getTime() + '_' + this.scaleDateTo.getTime();\n\t}\n\n\tcheckRebuildTimeout(timelineOffset, timeout = 300)\n\t{\n\t\tif (!this._checkRebuildTimeoutCount)\n\t\t{\n\t\t\tthis._checkRebuildTimeoutCount = 0;\n\t\t}\n\n\t\tif (this.rebuildTimeout)\n\t\t{\n\t\t\tthis.rebuildTimeout = !!clearTimeout(this.rebuildTimeout);\n\t\t}\n\n\t\tif (\n\t\t\tthis._checkRebuildTimeoutCount <= 10\n\t\t\t&& Type.isElementNode(this.DOM.timelineScaleWrap)\n\t\t\t&& Dom.isShown(this.DOM.timelineScaleWrap)\n\t\t)\n\t\t{\n\t\t\tthis._checkRebuildTimeoutCount++;\n\t\t\tthis.rebuildTimeout = setTimeout(() => {\n\t\t\t\tif (timelineOffset !== this.DOM.timelineScaleWrap.offsetWidth)\n\t\t\t\t{\n\t\t\t\t\tif (this.rebuildTimeout)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.rebuildTimeout = !!clearTimeout(this.rebuildTimeout);\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.rebuild();\n\t\t\t\t\tif (this.selector)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.selector.focus(true, 300);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.checkRebuildTimeout(timelineOffset, timeout);\n\t\t\t\t}\n\t\t\t}, timeout);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tdelete this._checkRebuildTimeoutCount;\n\t\t}\n\t}\n\n\trebuildDebounce(params)\n\t{\n\t\tRuntime.debounce(this.rebuild, this.REBUILD_DELAY, this)(params);\n\t}\n\n\textendTimelineToLeft(extendedTimeFrom, extendedTimeTo)\n\t{\n\t\tthis.extendTimeline(extendedTimeFrom, extendedTimeTo);\n\t}\n\n\textendTimelineToRight(extendedTimeFrom, extendedTimeTo)\n\t{\n\t\tthis.extendTimeline(extendedTimeFrom, extendedTimeTo, true)\n\t}\n\n\textendTimeline(extendedTimeFrom, extendedTimeTo, isToRight = false)\n\t{\n\t\tif (!this.DOM.timelineScaleWrap)\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\tconst isToLeft = !isToRight;\n\t\tconst dayNodeList = this.DOM.timelineScaleWrap.querySelectorAll('.calendar-planner-time-day');\n\t\tconst dayCount = dayNodeList.length;\n\t\tconst nodeCountInDay = this.scaleData.length / dayCount;\n\t\tconst extendCount = extendedTimeTo - extendedTimeFrom;\n\n\t\tlet cellsInsertedOnLeftCount = 0;\n\t\tconst insertedNodes = [];\n\t\tlet pivotScaleDatumOfDayIndex = isToRight ? nodeCountInDay - 1 : 0;\n\n\t\tfor (const dayNode of dayNodeList)\n\t\t{\n\t\t\tconst pivotNodeOfDay = isToLeft\n\t\t\t\t? dayNode.children[0]\n\t\t\t\t: dayNode.querySelector('.calendar-planner-timeline-border');\n\t\t\tif (isToLeft)\n\t\t\t{\n\t\t\t\tthis.scaleData[pivotScaleDatumOfDayIndex].dayStart = false;\n\t\t\t}\n\n\t\t\tconst daystamp = this.scaleData[pivotScaleDatumOfDayIndex].daystamp;\n\t\t\tlet toTimestamp, fromTimestamp;\n\t\t\tif (isToLeft)\n\t\t\t{\n\t\t\t\ttoTimestamp = this.scaleData[pivotScaleDatumOfDayIndex].timestamp / 1000;\n\t\t\t\tfromTimestamp = toTimestamp - 3600 * extendCount;\n\t\t\t\tif (new Date(fromTimestamp * 1000).getHours() !== extendedTimeFrom)\n\t\t\t\t{\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tfromTimestamp = this.scaleData[pivotScaleDatumOfDayIndex].timestamp / 1000 + this.scaleSize;\n\t\t\t\ttoTimestamp = fromTimestamp + 3600 * extendCount;\n\t\t\t\tif (new Date(fromTimestamp * 1000).getHours() !== extendedTimeFrom)\n\t\t\t\t{\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (let insertedTimestamp = fromTimestamp, i = 0; insertedTimestamp < toTimestamp; insertedTimestamp += this.scaleSize, i++)\n\t\t\t{\n\t\t\t\tconst title = BX.date.format('i', insertedTimestamp) === '00'\n\t\t\t\t\t? BX.date.format(this.SCALE_TIME_FORMAT, insertedTimestamp)\n\t\t\t\t\t: '';\n\t\t\t\tif (insertedTimestamp < this.currentFromDate.getTime() / 1000 - (isToLeft ? 3600 * 12 : 0))\n\t\t\t\t{\n\t\t\t\t\tcellsInsertedOnLeftCount++;\n\t\t\t\t}\n\t\t\t\tlet animationClass = 'expand-width-no-animation';\n\t\t\t\tif (\n\t\t\t\t\t(\n\t\t\t\t\t\tisToLeft\n\t\t\t\t\t\t&& insertedTimestamp > this.currentFromDate.getTime() / 1000 - 3600 * 12\n\t\t\t\t\t\t&& insertedTimestamp < this.currentFromDate.getTime() / 1000 + 3600 * 12\n\t\t\t\t\t)\n\t\t\t\t\t||\n\t\t\t\t\t(\n\t\t\t\t\t\tisToRight\n\t\t\t\t\t\t&& insertedTimestamp > this.currentFromDate.getTime() / 1000\n\t\t\t\t\t\t&& insertedTimestamp < this.currentFromDate.getTime() / 1000 + 3600 * 24\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\tanimationClass = 'expand-width-0-40';\n\t\t\t\t}\n\n\t\t\t\tconst insertedCell = BX.create('DIV', {\n\t\t\t\t\tprops: {\n\t\t\t\t\t\tclassName: 'calendar-planner-time-hour-item' + ' ' + animationClass,\n\t\t\t\t\t},\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\twidth: this.timelineCellWidth + 'px',\n\t\t\t\t\t\tminWidth: this.timelineCellWidth + 'px'\n\t\t\t\t\t},\n\t\t\t\t\thtml: '<i>' + title + '</i>'\n\t\t\t\t});\n\t\t\t\tinsertedNodes.push(insertedCell);\n\t\t\t\tdayNode.insertBefore(insertedCell, pivotNodeOfDay);\n\n\t\t\t\tconst insertedScaleDatum = {\n\t\t\t\t\tdaystamp: daystamp,\n\t\t\t\t\ttimestamp: insertedTimestamp * 1000,\n\t\t\t\t\tvalue: insertedTimestamp * 1000,\n\t\t\t\t\ttitle: title,\n\t\t\t\t\tdayStart: isToLeft && i === 0,\n\t\t\t\t\tcell: insertedCell\n\t\t\t\t};\n\t\t\t\tthis.scaleData.splice(i + pivotScaleDatumOfDayIndex + (isToRight ? 1 : 0), 0, insertedScaleDatum);\n\t\t\t}\n\t\t\tif (isToLeft)\n\t\t\t{\n\t\t\t\tpivotNodeOfDay.classList.remove('calendar-planner-day-start');\n\t\t\t\tdayNode.children[0].classList.add('calendar-planner-day-start');\n\t\t\t}\n\t\t\tpivotScaleDatumOfDayIndex += nodeCountInDay + extendCount * 3600 / this.scaleSize;\n\t\t}\n\n\t\t// set scroll for timeline to compensate width of static inserted cells\n\t\tconst scroll = this.DOM.timelineVerticalConstraint.scrollLeft;\n\t\tthis.DOM.timelineVerticalConstraint.scrollLeft = scroll + cellsInsertedOnLeftCount * this.timelineCellWidth;\n\n\t\t// get accessibility events for animation\n\t\tconst midnight = new Date(this.currentFromDate.getTime());\n\t\tmidnight.setHours(0,0,0,0);\n\t\tif (isToRight)\n\t\t{\n\t\t\tmidnight.setDate(midnight.getDate() + 1);\n\t\t}\n\t\tconst visibleEvents = this.getVisibleEvents();\n\t\tconst animatedEvents = this.getEventsAfter(visibleEvents, midnight);\n\t\tthis.update(this.entries, this.accessibility);\n\n\t\t// update selector and visible events position during the css animation\n\t\tnew BX.easing({\n\t\t\tduration: 200,\n\t\t\tstart: {},\n\t\t\tfinish: {},\n\t\t\ttransition: BX.easing.makeEaseOut(BX.easing.transitions.linear),\n\t\t\tstep: () => {\n\t\t\t\tthis.buildTodayButtonWrap();\n\t\t\t\tthis.selector.update();\n\t\t\t\tfor (const event of animatedEvents)\n\t\t\t\t{\n\t\t\t\t\tevent.node.style.left = this.getPosByDate(new Date(event.fromTimestamp)) + 'px';\n\t\t\t\t}\n\t\t\t},\n\t\t\tcomplete: () => {\n\t\t\t\tfor (const node of insertedNodes)\n\t\t\t\t{\n\t\t\t\t\tnode.classList.remove('expand-width-no-animation');\n\t\t\t\t\tnode.classList.remove('expand-width-0-40');\n\t\t\t\t}\n\t\t\t\tthis.updateTimelineAfterExtend();\n\t\t\t}\n\t\t}).animate();\n\t}\n\n\tupdateTimelineAfterExtend()\n\t{\n\t\tlet mapDatePosRes = this.mapDatePos();\n\t\tthis.posDateMap = mapDatePosRes.posDateMap;\n\t\tconst timelineOffset = this.DOM.timelineScaleWrap.offsetWidth;\n\t\tthis.DOM.timelineInnerWrap.style.width = timelineOffset + 'px';\n\t\tthis.DOM.entrieListWrap.style.top = (parseInt(this.DOM.timelineDataWrap.offsetTop) + 10) + 'px';\n\t\tthis.lastTimelineKey = this.getTimelineShownKey();\n\t\tthis.update(this.entries, this.accessibility);\n\t\tthis.adjustHeight();\n\t\tthis.resizePlannerWidth(this.width);\n\t\tthis.selector.update();\n\t\tthis.clearCacheTime();\n\t\tthis.buildTodayButtonWrap();\n\t}\n\n\trebuild(params = {})\n\t{\n\t\tif (this.isBuilt())\n\t\t{\n\t\t\tthis.buildTimeline(true);\n\t\t\tthis.update(this.entries, this.accessibility);\n\t\t\tthis.resizePlannerWidth(this.width);\n\n\t\t\tif (params.updateSelector !== false)\n\t\t\t{\n\t\t\t\tthis.selector.update(params.selectorParams);\n\t\t\t\tif (params.dontFocus !== true)\n\t\t\t\t{\n\t\t\t\t\tthis.selector.focus(false, 0, true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.clearCacheTime();\n\t\t}\n\t}\n\n\tgetScaleData()\n\t{\n\t\tthis.scaleData = [];\n\t\tthis.scaleDayTitles = {};\n\n\t\tlet\n\t\t\tts, scaleFrom, scaleTo,\n\t\t\ttime, dayStamp, title,\n\t\t\tcurDayStamp = false,\n\t\t\ttimeFrom = this.isOneDayScale() ? 0 : this.shownScaleTimeFrom,\n\t\t\ttimeTo = this.isOneDayScale() ? 0 : this.shownScaleTimeTo;\n\n\t\tthis.scaleDateFrom.setHours(timeFrom, 0, 0, 0);\n\t\tthis.scaleDateTo.setHours(timeTo, 0, 0, 0);\n\t\tscaleFrom = this.scaleDateFrom.getTime();\n\t\tscaleTo = this.scaleDateTo.getTime();\n\n\t\tfor (ts = scaleFrom; ts < scaleTo; ts += this.scaleSize * 1000)\n\t\t{\n\t\t\ttime = parseFloat(BX.date.format('H.i', ts / 1000));\n\n\t\t\tif (this.isOneDayScale())\n\t\t\t\ttitle = BX.date.format('d F, D', ts / 1000);\n\t\t\telse\n\t\t\t\ttitle = BX.date.format('i', ts / 1000) === '00'\n\t\t\t\t\t? BX.date.format(this.SCALE_TIME_FORMAT, ts / 1000)\n\t\t\t\t\t: '';\n\n\t\t\tif (this.isOneDayScale() || (time >= timeFrom && time < timeTo))\n\t\t\t{\n\t\t\t\tdayStamp = BX.date.format('d.m.Y', ts / 1000);\n\t\t\t\tthis.scaleData.push({\n\t\t\t\t\tdaystamp: dayStamp,\n\t\t\t\t\ttimestamp: ts,\n\t\t\t\t\tvalue: ts,\n\t\t\t\t\ttitle: title,\n\t\t\t\t\tdayStart: curDayStamp !== dayStamp\n\t\t\t\t});\n\t\t\t\tcurDayStamp = dayStamp;\n\t\t\t}\n\t\t}\n\n\t\treturn this.scaleData;\n\t}\n\n\tisOneDayScale()\n\t{\n\t\treturn this.scaleType === '1day';\n\t}\n\n\tprepareAccessibilityItem(entry)\n\t{\n\t\tconst date = Util.parseDate(entry.dateFrom);\n\t\tconst userOffset = Util.getTimeZoneOffset(this.userTimezone, date);\n\t\tconst timezoneOffset = Util.getTimeZoneOffset(this.currentTimezone, date);\n\t\tconst timeOffset = (userOffset - timezoneOffset) * 60 * 1000;\n\n\t\treturn Planner.prepareAccessibilityItem(entry, timeOffset);\n\t}\n\n\tstatic prepareAccessibilityItem(entry, timeOffset = 0)\n\t{\n\t\tif (!Type.isDate(entry.from))\n\t\t{\n\t\t\tentry.from = Util.parseDate(entry.dateFrom);\n\t\t}\n\n\t\tif (!Type.isDate(entry.to))\n\t\t{\n\t\t\tentry.to = Util.parseDate(entry.dateTo);\n\t\t}\n\n\t\tif (!Type.isDate(entry.from) || !Type.isDate(entry.to))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\n\t\tlet from = new Date(entry.from.getTime());\n\t\tlet to = new Date(entry.to.getTime());\n\t\tfrom.setSeconds(0,0);\n\t\tto.setSeconds(0,0);\n\t\tif (!entry.isFullDay)\n\t\t{\n\t\t\tfrom = new Date(from.getTime() + timeOffset);\n\t\t\tto = new Date(to.getTime() + timeOffset);\n\t\t}\n\n\t\tconst fromTimestamp = from.getTime();\n\t\tconst toTimestamp = to.getTime();\n\t\tconst toReal = new Date(to.getTime());\n\t\tconst toTimestampReal = toTimestamp;\n\t\tconst name = entry.name || entry.title;\n\t\tconst type = entry.isVacation ? 'hr' : 'event';\n\n\t\tentry.fromTimestamp = fromTimestamp;\n\t\tentry.toTimestamp = toTimestamp;\n\t\tentry.toTimestampReal = toTimestamp;\n\n\t\treturn { from, to, fromTimestamp, toTimestamp, toReal, toTimestampReal, name, type };\n\t}\n\n\taddAccessibilityItem(entry, wrap)\n\t{\n\t\tlet\n\t\t\ttimeFrom, timeTo,\n\t\t\thidden = false,\n\t\t\tfromTimestamp = entry.fromTimestamp,\n\t\t\ttoTimestamp = entry.toTimestampReal || entry.toTimestamp,\n\t\t\tshownScaleTimeFrom = this.isOneDayScale() ? 0 : this.shownScaleTimeFrom,\n\t\t\tshownScaleTimeTo = this.isOneDayScale() ? 24 : this.shownScaleTimeTo,\n\t\t\tfrom = new Date(fromTimestamp),\n\t\t\tto = new Date(toTimestamp);\n\n\t\ttimeFrom = parseInt(from.getHours()) + from.getMinutes() / 60;\n\t\ttimeTo = parseInt(to.getHours()) + to.getMinutes() / 60;\n\n\t\tif (timeFrom > shownScaleTimeTo)\n\t\t{\n\t\t\tfrom = new Date(from.getTime() + Util.getDayLength() - 1);\n\t\t\tfrom.setHours(shownScaleTimeFrom, 0, 0, 0);\n\t\t\tif (from.getTime() >= to.getTime())\n\t\t\t{\n\t\t\t\thidden = true;\n\t\t\t}\n\t\t}\n\n\t\tif (!hidden && timeFrom < shownScaleTimeFrom)\n\t\t{\n\t\t\tfrom.setHours(shownScaleTimeFrom, 0, 0, 0);\n\t\t\tif (from.getTime() >= to.getTime())\n\t\t\t{\n\t\t\t\thidden = true;\n\t\t\t}\n\t\t}\n\n\t\tif (!hidden && timeTo > shownScaleTimeTo)\n\t\t{\n\t\t\tto.setHours(shownScaleTimeTo, 0, 0, 0);\n\t\t\tif (from.getTime() >= to.getTime())\n\t\t\t{\n\t\t\t\thidden = true;\n\t\t\t}\n\t\t}\n\n\t\tif (!hidden && timeTo < shownScaleTimeFrom)\n\t\t{\n\t\t\tto = new Date(to.getTime() - Util.getDayLength() + 1);\n\t\t\tto.setHours(shownScaleTimeTo, 0, 0, 0);\n\t\t\tif (from.getTime() >= to.getTime())\n\t\t\t{\n\t\t\t\thidden = true;\n\t\t\t}\n\t\t}\n\n\t\tif (!hidden && from.getTime() < this.scaleDateTo)\n\t\t{\n\t\t\tlet\n\t\t\t\tfromPos = this.getPosByDate(from),\n\t\t\t\ttoPos = Math.min(this.getPosByDate(to), this.DOM.timelineScaleWrap.offsetWidth);\n\n\t\t\tentry.node = wrap.appendChild(BX.create('DIV', {\n\t\t\t\tprops: {\n\t\t\t\t\tclassName: 'calendar-planner-acc-entry',\n\t\t\t\t},\n\t\t\t\tstyle: {\n\t\t\t\t\tleft: fromPos + 'px',\n\t\t\t\t\twidth: Math.max((toPos - fromPos), 3) + 'px'\n\t\t\t\t}\n\t\t\t}));\n\n\t\t\tif (entry.name)\n\t\t\t{\n\t\t\t\tentry.node.title = entry.name;\n\t\t\t}\n\t\t}\n\t}\n\n\tdisplayEntryRow(entry, accessibility = [])\n\t{\n\t\tlet rowWrap;\n\t\tif (entry.type === 'moreLink')\n\t\t{\n\t\t\trowWrap = this.DOM.entrieListWrap.appendChild(Tag.render`\n\t\t\t\t<div class=\"calendar-planner-user\"></div>\n\t\t\t`);\n\n\t\t\tthis.DOM.statusNodeAll = this.getStatusNode('tzAll');\n\t\t\tif (!entry.hasDifferentTimezone || this.readonly)\n\t\t\t{\n\t\t\t\tthis.DOM.statusNodeAll.style.display = 'none';\n\t\t\t}\n\n\t\t\tif (this.showEntryName)\n\t\t\t{\n\t\t\t\tthis.DOM.showMoreUsersLink = rowWrap.appendChild(Tag.render`\n\t\t\t\t\t<div class=\"calendar-planner-all-users\" title=\"${entry.title || ''}\">\n\t\t\t\t\t\t${entry.name}\n\t\t\t\t\t\t${this.DOM.statusNodeAll}\n\t\t\t\t\t</div>\n\t\t\t\t`);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.DOM.showMoreUsersLink = rowWrap.appendChild(Tag.render`\n\t\t\t\t\t<div class=\"calendar-planner-users-more\" title=\"${entry.name || ''}\">\n\t\t\t\t\t\t<span class=\"calendar-planner-users-more-btn\">\n\t\t\t\t\t\t\t${this.DOM.statusNodeAll}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t`);\n\t\t\t}\n\t\t\tEvent.bind(this.DOM.showMoreUsersLink, 'click', this.showMoreUsersBind);\n\t\t\tEvent.bind(this.selector.DOM.moreButton, 'click', this.showMoreUsersBind);\n\t\t\tthis.selector.DOM.moreButton.style.display = '';\n\t\t}\n\t\telse if (entry.type === 'lastUsers')\n\t\t{\n\t\t\trowWrap = this.DOM.entrieListWrap.appendChild(Tag.render`\t\n\t\t\t\t<div class=\"calendar-planner-user\"></div>\n\t\t\t`);\n\n\t\t\tif (this.showEntryName)\n\t\t\t{\n\t\t\t\tthis.DOM.showMoreUsersLink = rowWrap.appendChild(Tag.render`\n\t\t\t\t\t<div class=\"calendar-planner-all-users calendar-planner-last-users\" title=\"${entry.title || ''}\">\n\t\t\t\t\t\t${entry.name}\n\t\t\t\t\t</div>\n\t\t\t\t`);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.DOM.showMoreUsersLink = rowWrap.appendChild(Tag.render`\n\t\t\t\t\t<div class=\"calendar-planner-users-more\" title=\"${entry.title || entry.name}\">\n\t\t\t\t\t\t<span class=\"calendar-planner-users-last-btn\"></span>\n\t\t\t\t\t</div>\n\t\t\t\t`);\n\t\t\t}\n\t\t}\n\t\telse if (entry.id && entry.type === 'user')\n\t\t{\n\t\t\trowWrap = this.DOM.entrieListWrap.appendChild(BX.create('DIV', {\n\t\t\t\tattrs: {\n\t\t\t\t\t'data-bx-planner-entry' : entry.uid,\n\t\t\t\t\tclassName: 'calendar-planner-user'\n\t\t\t\t\t\t+ (entry.emailUser ? ' calendar-planner-email-user' : '')\n\t\t\t\t}\n\t\t\t}));\n\n\t\t\tentry.vacationNode = this.renderVacationNode(entry.id);\n\n\t\t\tif (entry.timezoneName)\n\t\t\t{\n\t\t\t\tentry.statusNode = this.getStatusNode(entry.status, entry.timezoneName);\n\t\t\t\trowWrap.append(entry.statusNode);\n\t\t\t}\n\n\t\t\tif (!this.showEntryName)\n\t\t\t{\n\t\t\t\trowWrap.append(entry.vacationNode);\n\t\t\t}\n\n\t\t\tif (!this.hasCorrectStatus(entry) && entry.statusNode)\n\t\t\t{\n\t\t\t\tentry.statusNode.style.display = 'none';\n\t\t\t}\n\n\t\t\trowWrap.appendChild(Planner.getEntryAvatarNode(entry));\n\n\t\t\tif (this.showEntryName)\n\t\t\t{\n\t\t\t\trowWrap.append(Tag.render`\n\t\t\t\t\t<span class=\"calendar-planner-user-name\">\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclass=\"calendar-planner-entry-name${entry.isCollabUser ? ' calendar-collab-user' : ''}\"\n\t\t\t\t\t\t\tbx-tooltip-user-id=\"${entry.id}\"\n\t\t\t\t\t\t\tbx-tooltip-classname=\"calendar-planner-user-tooltip\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t${Text.encode(entry.name)}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t${entry.vacationNode}\n\t\t\t\t\t</span>\n\t\t\t\t`);\n\t\t\t}\n\t\t}\n\t\telse if (entry.id && entry.type === 'room')\n\t\t{\n\t\t\trowWrap = this.DOM.entrieListWrap.appendChild(Tag.render`\n\t\t\t\t<div class=\"calendar-planner-user\"></div>\n\t\t\t`);\n\t\t\tif (this.showEntryName)\n\t\t\t{\n\t\t\t\trowWrap.appendChild(Tag.render`\n\t\t\t\t\t<span class=\"calendar-planner-user-name\"></span>\n\t\t\t\t`)\n\t\t\t\t.appendChild(Tag.render`\n\t\t\t\t\t<span class=\"calendar-planner-entry-name\" style=\"width: ${this.entriesListWidth - 20}px;\">\n\t\t\t\t\t\t${Text.encode(entry.name)}\n\t\t\t\t\t</span>\n\t\t\t\t`);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\trowWrap.appendChild(Tag.render`\n\t\t\t\t\t<div class=\"calendar-planner-location-image-icon\" title=\"${Text.encode(entry.name)}\"></div>\n\t\t\t\t`);\n\t\t\t}\n\t\t}\n\t\telse if (entry.type === 'resource')\n\t\t{\n\t\t\tif (!this.entriesResourceListWrap || !BX.isNodeInDom(this.entriesResourceListWrap))\n\t\t\t{\n\t\t\t\tthis.entriesResourceListWrap = this.DOM.entrieListWrap.appendChild(Tag.render`\n\t\t\t\t\t<div class=\"calendar-planner-container-resource\">\n\t\t\t\t\t\t<div class=\"calendar-planner-resource-header\">\n\t\t\t\t\t\t\t<span class=\"calendar-planner-users-item\">${Loc.getMessage('EC_PL_RESOURCE_TITLE')}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t`);\n\t\t\t}\n\n\t\t\trowWrap = this.entriesResourceListWrap.appendChild(Tag.render`\n\t\t\t\t<div class=\"calendar-planner-user\" data-bx-planner-entry=\"${entry.uid}\"></div>\n\t\t\t`);\n\n\t\t\tif (this.showEntryName)\n\t\t\t{\n\t\t\t\trowWrap.appendChild(Tag.render`\n\t\t\t\t\t<span class=\"calendar-planner-user-name\"></span>\n\t\t\t\t`)\n\t\t\t\t.appendChild(Tag.render`\n\t\t\t\t\t<span class=\"calendar-planner-entry-name\" style=\"width: ${this.entriesListWidth - 20}px;\">\n\t\t\t\t\t\t${Text.encode(entry.name)}\n\t\t\t\t\t<span>\n\t\t\t\t`);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\trowWrap.appendChild(Tag.render`\n\t\t\t\t\t<div class=\"calendar-planner-location-image-icon\" title=\"${Text.encode(entry.name)}\"></div>\n\t\t\t\t`);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\trowWrap = this.DOM.entrieListWrap.appendChild(Tag.render`\n\t\t\t\t<div class=\"calendar-planner-user\"></div>\n\t\t\t`);\n\t\t\trowWrap.appendChild(Tag.render`\n\t\t\t\t<div class=\"calendar-planner-all-users\">${Text.encode(entry.name)}</div>\n\t\t\t`);\n\t\t}\n\n\t\tlet top = rowWrap.offsetTop + 13;\n\n\t\tlet dataRowWrap = this.DOM.accessibilityWrap.appendChild(Tag.render`\n\t\t\t<div class=\"calendar-planner-timeline-space\" style=\"top:${top}px\" data-bx-planner-entry=\"${entry.uid||0}\"></div>\n\t\t`);\n\n\t\t//this.entriesRowMap.set(entry, rowWrap);\n\t\tthis.entriesDataRowMap.set(entry.uid, dataRowWrap);\n\t\taccessibility.forEach((item) => this.addAccessibilityItem(item, dataRowWrap));\n\t}\n\n\thasCorrectStatus(entry)\n\t{\n\t\treturn entry.status && this.entryStatusMap[entry.status];\n\t}\n\n\tgetStatusNode(status, timezoneName = '')\n\t{\n\t\tconst statusMessage = 'EC_PL_STATUS_' + status.toUpperCase();\n\t\tconst title = Loc.hasMessage(statusMessage) ? Loc.getMessage(statusMessage) : Util.getFormattedTimezone(timezoneName);\n\n\t\treturn Tag.render`\n\t\t\t<span\n\t\t\t\tclass=\"calendar-planner-user-status-icon ${this.entryStatusMap[status]}\"\n\t\t\t\ttitle=\"${title}\"\n\t\t\t></span>\n\t\t`;\n\t}\n\n\tstatic getEntryAvatarNode(entry)\n\t{\n\t\tlet imageNode;\n\t\tconst img = entry.avatar;\n\n\t\tif (entry.isCollabUser)\n\t\t{\n\t\t\timageNode = new AvatarRoundGuest(\n\t\t\t\t{\n\t\t\t\t\tsize: 22,\n\t\t\t\t\tuserName: entry.name,\n\t\t\t\t\tuserpicPath: entry.avatar && entry.avatar !== '/bitrix/images/1.gif'\n\t\t\t\t\t\t? entry.avatar\n\t\t\t\t\t\t: null,\n\t\t\t\t\tbaseColor: '#19cc45',\n\t\t\t\t},\n\t\t\t).getContainer();\n\t\t}\n\t\telse if (!img || img === \"/bitrix/images/1.gif\")\n\t\t{\n\t\t\tlet defaultAvatarClass = 'ui-icon-common-user';\n\t\t\tif (entry.emailUser)\n\t\t\t{\n\t\t\t\tdefaultAvatarClass = 'ui-icon-common-user-mail';\n\t\t\t}\n\t\t\tif (entry.sharingUser)\n\t\t\t{\n\t\t\t\tdefaultAvatarClass += ' ui-icon-common-user-sharing';\n\t\t\t}\n\t\t\timageNode = Tag.render`<div bx-tooltip-user-id=\"${entry.id}\" bx-tooltip-classname=\"calendar-planner-user-tooltip\" title=\"${Text.encode(entry.name)}\" class=\"ui-icon calendar-planner-user-image-icon ${defaultAvatarClass}\"><i></i></div>`;\n\t\t}\n\t\telse\n\t\t{\n\t\t\timageNode = Tag.render`<div bx-tooltip-user-id=\"${entry.id}\" bx-tooltip-classname=\"calendar-planner-user-tooltip\" title=\"${Text.encode(entry.name)}\" class=\"ui-icon calendar-planner-user-image-icon\"><i style=\"background-image: url('${encodeURI(entry.avatar)}')\"></i></div>`;\n\t\t}\n\n\t\treturn imageNode;\n\t}\n\n\tselectEntryRow(entry)\n\t{\n\t\tif (BX.type.isPlainObject(entry))\n\t\t{\n\t\t\tlet top = parseInt(entry.dataRowWrap.offsetTop);\n\t\t\tif (\n\t\t\t\t!entry.selectWrap\n\t\t\t\t|| !BX.isParentForNode(this.selectedEntriesWrap, entry.selectWrap)\n\t\t\t)\n\t\t\t{\n\t\t\t\tentry.selectWrap = this.selectedEntriesWrap.appendChild(Tag.render`\n\t\t\t\t\t<div class=\"calendar-planner-timeline-selected\"></div>\n\t\t\t\t`);\n\t\t\t}\n\n\t\t\tentry.selectWrap.style.display = '';\n\t\t\tentry.selectWrap.style.top = (top + 36) + 'px';\n\t\t\tentry.selectWrap.style.width = (parseInt(this.DOM.mainWrap.offsetWidth) + 5) + 'px';\n\n\t\t\tDom.addClass(entry.selectorControlWrap, 'active');\n\t\t\tentry.selected = true;\n\n\t\t\tthis.clearCacheTime();\n\t\t}\n\t}\n\n\tisEntrySelected(entry)\n\t{\n\t\treturn entry && entry.selected;\n\t}\n\n\tdeSelectEntryRow(entry)\n\t{\n\t\tif (BX.type.isPlainObject(entry))\n\t\t{\n\t\t\tif (entry.selectWrap)\n\t\t\t{\n\t\t\t\tentry.selectWrap.style.display = 'none';\n\t\t\t}\n\t\t\tif (entry.selectorControlWrap)\n\t\t\t{\n\t\t\t\tDom.removeClass(entry.selectorControlWrap, 'active');\n\t\t\t}\n\t\t\tentry.selected = false;\n\t\t\tthis.clearCacheTime();\n\t\t}\n\t}\n\n\tstatic getEntryUniqueId(entry)\n\t{\n\t\treturn ['user', 'room'].includes(entry.type) ? entry.id : entry.type + '-' + entry.id;\n\t}\n\n\tgetEntryByUniqueId(entryUniqueId)\n\t{\n\t\tif (BX.type.isArray(this.entries))\n\t\t{\n\t\t\treturn this.entries.find(function(entry){return entry.uid == entryUniqueId;})\n\t\t}\n\t\treturn null;\n\t}\n\n\tbindEventHandlers()\n\t{\n\t\tEvent.bind(this.DOM.wrap, 'click', this.handleClick.bind(this));\n\t\tEvent.bind(this.DOM.wrap, 'contextmenu', this.handleClick.bind(this));\n\t\tEvent.bind(this.DOM.wrap, 'mousedown', this.handleMousedown.bind(this));\n\t\tEvent.bind(document, 'mousemove', this.handleMousemove.bind(this));\n\t\tEvent.bind(document, 'mouseup', this.handleMouseup.bind(this));\n\n\t\tEvent.bind(\n\t\t\tthis.DOM.timelineFixedWrap,\n\t\t\t'onwheel' in document ? 'wheel' : 'mousewheel',\n\t\t\tthis.mouseWheelTimelineHandler.bind(this)\n\t\t);\n\n\t}\n\n\thandleClick(e)\n\t{\n\t\tif (!e)\n\t\t{\n\t\t\te = window.event;\n\t\t}\n\t\te.preventDefault();\n\t\tconst isRightClick = e.which === 3;\n\t\tif (isRightClick || e.target.className === 'calendar-planner-today-button')\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.clickMousePos = this.getMousePos(e);\n\t\tlet\n\t\t\tnodeTarget = e.target || e.srcElement,\n\t\t\taccuracyMouse = 5;\n\n\t\tif (!this.readonly)\n\t\t{\n\t\t\tlet\n\t\t\t\ttimeline = this.findTarget(nodeTarget, 'timeline'),\n\t\t\t\tselector = this.findTarget(nodeTarget, 'selector');\n\n\t\t\tif (timeline && !selector && Math.abs(this.clickMousePos.x - this.mouseDownMousePos.x) < accuracyMouse && Math.abs(this.clickMousePos.y - this.mouseDownMousePos.y) < accuracyMouse)\n\t\t\t{\n\t\t\t\tconst left = this.clickMousePos.x - BX.pos(this.DOM.timelineFixedWrap).left + this.DOM.timelineVerticalConstraint.scrollLeft;\n\t\t\t\tconst mapDatePosRes = this.mapDatePos(this.clickSelectorScaleAccuracy);\n\t\t\t\tlet selectedDateFrom = this.getDateByPos(left, false, mapDatePosRes.posDateMap);\n\t\t\t\tif (!selectedDateFrom)\n\t\t\t\t{\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst selectorTimeLength = this.currentToDate - this.currentFromDate;\n\t\t\t\tlet selectedDateTo = new Date(selectedDateFrom.getTime() + selectorTimeLength);\n\t\t\t\tthis.currentFromDate = selectedDateFrom;\n\t\t\t\tthis.currentToDate = selectedDateTo;\n\n\t\t\t\tthis.selector.transit({\n\t\t\t\t\ttoX: this.getPosByDate(selectedDateFrom),\n\t\t\t\t\tleftDate: this.currentFromDate,\n\t\t\t\t\trightDate: this.currentToDate\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\thandleMousedown(e)\n\t{\n\t\tif (!e)\n\t\t{\n\t\t\te = window.event;\n\t\t}\n\n\t\tlet nodeTarget = e.target || e.srcElement;\n\n\t\tif (this.selector.DOM.timeWrap.contains(nodeTarget))\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.mouseDownMousePos = this.getMousePos(e);\n\t\tthis.mouseDown = true;\n\n\t\tif (!this.readonly)\n\t\t{\n\t\t\tlet selector = this.findTarget(nodeTarget, 'selector');\n\t\t\tthis.startMousePos = this.mouseDownMousePos;\n\n\t\t\tif (selector)\n\t\t\t{\n\t\t\t\tif (this.findTarget(nodeTarget, 'selector-resize-right'))\n\t\t\t\t{\n\t\t\t\t\tthis.selector.startResize();\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.selector.startMove();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (this.findTarget(nodeTarget, 'timeline'))\n\t\t\t{\n\t\t\t\tthis.startScrollTimeline();\n\t\t\t}\n\t\t}\n\n\t\tif (this.shouldShakeSelector(nodeTarget))\n\t\t{\n\t\t\tthis.showSelectorPopup(Loc.getMessage('EC_PLANNER_CANT_DRAG_SHARED_EVENT'));\n\t\t\tthis.selector.shake();\n\t\t}\n\t}\n\n\tshouldShakeSelector(nodeTarget)\n\t{\n\t\tconst isSelector = this.findTarget(nodeTarget, 'selector');\n\t\tconst isNotMoreButton = nodeTarget !== this.selector.DOM.moreButton;\n\n\t\treturn this.readonly && !this.solidStatus && isSelector && isNotMoreButton;\n\t}\n\n\thandleMouseup()\n\t{\n\t\tif (this.selector.isDragged())\n\t\t{\n\t\t\tthis.selector.endMove();\n\t\t\tthis.selector.endResize();\n\t\t}\n\n\t\tif(this.timelineIsDraged)\n\t\t{\n\t\t\tthis.endScrollTimeline();\n\t\t}\n\n\t\tif (this.shown && !this.readonly && this.mouseDown)\n\t\t{\n\t\t\tthis.checkTimelineScroll();\n\t\t}\n\n\t\tthis.mouseDown = false;\n\t\tDom.removeClass(document.body, 'calendar-planner-unselectable');\n\t}\n\n\thandleMousemove(e)\n\t{\n\t\tlet mousePos;\n\n\t\tif (this.selector.isDragged())\n\t\t{\n\t\t\tmousePos = this.getMousePos(e);\n\t\t\tthis.selector.move(mousePos.x - this.startMousePos.x);\n\t\t\tthis.selector.resize(mousePos.x - this.startMousePos.x);\n\t\t}\n\n\t\tif (this.timelineIsDraged)\n\t\t{\n\t\t\tmousePos = this.getMousePos(e);\n\t\t\tthis.scrollTimeline(mousePos.x - this.startMousePos.x);\n\t\t}\n\t}\n\n\tmouseWheelTimelineHandler(e)\n\t{\n\t\te = e || window.event;\n\t\tif (this.shown && !this.readonly)\n\t\t{\n\t\t\tif (Browser.isMac())\n\t\t\t{\n\t\t\t\tthis.checkTimelineScroll();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tconst delta = e.deltaY || e.detail || e.wheelDelta;\n\t\t\t\tif (Math.abs(delta) > 0)\n\t\t\t\t{\n\t\t\t\t\tthis.DOM.timelineVerticalConstraint.scrollLeft = Math.max(\n\t\t\t\t\t\tthis.DOM.timelineVerticalConstraint.scrollLeft + Math.round(delta / 3),\n\t\t\t\t\t\t0\n\t\t\t\t\t);\n\t\t\t\t\tthis.checkTimelineScroll();\n\t\t\t\t\treturn BX.PreventDefault(e);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tonScrollHandler()\n\t{\n\t\tthis.scrollLeft = this.DOM.timelineVerticalConstraint.scrollLeft;\n\t\tthis.updateTodayButtonVisibility();\n\t\tthis.updateWorkTimeNotice();\n\t}\n\n\tupdateTodayButtonVisibility(animation = true)\n\t{\n\t\tif (!this.isTodayButtonEnabled() || this.isOneDayScale())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.todayButton.style.transition = animation ? '' : 'none';\n\n\t\tconst today = new Date();\n\t\ttoday.setHours(this.shownScaleTimeFrom, 0, 0, 0);\n\n\t\tlet parent = this.DOM.entriesOuterWrap;\n\t\tif (this.todayTitleButton)\n\t\t{\n\t\t\tparent = this.todayTitleButton.parentElement;\n\t\t}\n\n\t\tconst doDisplayTodayButton = today.getTime() < this.scaleDateTo.getTime()\n\t\t\t&& BX.pos(parent).left + 30 < BX.pos(this.DOM.entriesOuterWrap).right;\n\t\tif (doDisplayTodayButton && this.todayButton.style.display !== '')\n\t\t{\n\t\t\tthis.todayButton.style.display = '';\n\t\t\tthis.setFutureDayTitlesOffset(false);\n\t\t}\n\t\tif (!doDisplayTodayButton && this.todayButton.style.display !== 'none')\n\t\t{\n\t\t\tthis.todayButton.style.display = 'none';\n\t\t\tthis.setFutureDayTitlesOffset(false);\n\t\t}\n\n\t\tconst doAddLeftArrow = BX.pos(this.todayTitleButton).right + (this.todayButtonLeftWidth - this.todayButtonWidth) < BX.pos(this.DOM.entriesOuterWrap).right;\n\t\tif (doAddLeftArrow && this.todayButton.innerHTML === this.todayLocMessage)\n\t\t{\n\t\t\tthis.todayButton.innerHTML = this.todayLocMessage + ' ←';\n\t\t\tthis.todayButton.style.width = this.todayButtonLeftWidth + 'px';\n\t\t\tthis.setFutureDayTitlesOffset(animation);\n\t\t}\n\t\tif (!doAddLeftArrow && this.todayButton.innerHTML !== this.todayLocMessage)\n\t\t{\n\t\t\tthis.todayButton.innerHTML = this.todayLocMessage;\n\t\t\tthis.todayButton.style.width = this.todayButtonWidth + 'px';\n\t\t\tthis.setFutureDayTitlesOffset(animation);\n\t\t}\n\n\t\tconst isTodayInFuture = today.getTime() > this.scaleDateTo.getTime();\n\t\tconst doDisplayTodayRightButton = isTodayInFuture || BX.pos(parent).right > BX.pos(this.DOM.timelineVerticalConstraint).right;\n\t\tif (doDisplayTodayRightButton && this.todayRightButton.style.display !== '')\n\t\t{\n\t\t\tthis.todayRightButton.style.display = '';\n\t\t}\n\t\tif (!doDisplayTodayRightButton && this.todayRightButton.style.display !== 'none')\n\t\t{\n\t\t\tthis.todayRightButton.style.display = 'none';\n\t\t}\n\n\t\tif (this.todayTitleButton)\n\t\t{\n\t\t\tif (BX.pos(this.todayTitleButton).right < BX.pos(this.DOM.timelineVerticalConstraint).right)\n\t\t\t{\n\t\t\t\tthis.todayTitleButton.style.position = 'sticky';\n\t\t\t}\n\t\t\tif (BX.pos(this.todayTitleButton).right > BX.pos(this.DOM.timelineVerticalConstraint).right)\n\t\t\t{\n\t\t\t\tthis.todayTitleButton.style.position = '';\n\t\t\t}\n\t\t}\n\n\t\tconst doAddRightArrow = BX.pos(parent).left > BX.pos(this.DOM.timelineVerticalConstraint).right || isTodayInFuture;\n\t\tif (doAddRightArrow && this.todayRightButton.innerHTML === this.todayLocMessage)\n\t\t{\n\t\t\tthis.todayRightButton.innerHTML = this.todayLocMessage + ' →';\n\t\t\tthis.todayRightButton.style.width = this.todayButtonRightWidth + 'px';\n\t\t}\n\t\tif (!doAddRightArrow && this.todayRightButton.innerHTML !== this.todayLocMessage)\n\t\t{\n\t\t\tthis.todayRightButton.innerHTML = this.todayLocMessage;\n\t\t\tthis.todayRightButton.style.width = this.todayButtonWidth + 'px';\n\t\t}\n\t}\n\n\tsetFutureDayTitlesOffset(animation = true)\n\t{\n\t\tconst left = this.todayButton.style.display === 'none' ? '' : (parseInt(this.todayButton.style.width) + 4) + 'px';\n\t\tfor (const title of this.futureDayTitles)\n\t\t{\n\t\t\ttitle.style.transition = animation ? '' : 'none';\n\t\t\ttitle.style.left = left;\n\t\t}\n\t}\n\n\ttodayButtonClickHandler()\n\t{\n\t\tif (!this.isTodayButtonEnabled())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.todayButtonPivotDay)\n\t\t{\n\t\t\tconst today = new Date();\n\t\t\ttoday.setHours(this.shownScaleTimeFrom, 0, 0, 0);\n\t\t\tnew BX.easing({\n\t\t\t\tduration: 300,\n\t\t\t\tstart: {scrollLeft: this.DOM.timelineVerticalConstraint.scrollLeft},\n\t\t\t\tfinish: {scrollLeft: this.getPosByDate(today)},\n\t\t\t\ttransition: BX.easing.makeEaseOut(BX.easing.transitions.quad),\n\t\t\t\tstep: (state)=>{this.DOM.timelineVerticalConstraint.scrollLeft = state.scrollLeft;},\n\t\t\t\tcomplete: ()=>{}\n\t\t\t}).animate();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.scaleDateFrom = new Date();\n\t\t\tthis.scaleDateFrom.setHours(this.shownScaleTimeFrom, 0, 0, 0);\n\n\t\t\tthis.scaleDateTo = new Date(new Date().getTime() + Util.getDayLength() * this.SCALE_OFFSET_AFTER);\n\t\t\tthis.scaleDateTo.setHours(this.shownScaleTimeTo, 0, 0, 0);\n\n\t\t\tthis.rebuild();\n\t\t\tthis.DOM.timelineVerticalConstraint.scrollLeft = 0;\n\n\t\t\tthis.emit('onExpandTimeline', new BaseEvent({\n\t\t\t\tdata: {\n\t\t\t\t\treload: true,\n\t\t\t\t\tdateFrom: this.scaleDateFrom,\n\t\t\t\t\tdateTo: this.scaleDateTo\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\t}\n\n\tisTodayButtonEnabled()\n\t{\n\t\treturn !this.readonly && !this.compactMode;\n\t}\n\n\tcheckTimelineScroll()\n\t{\n\t\tconst minScroll = this.scrollStep;\n\t\tconst maxScroll = this.DOM.timelineVerticalConstraint.scrollWidth\n\t\t\t\t\t\t\t- this.DOM.timelineFixedWrap.offsetWidth\n\t\t\t\t\t\t\t- this.scrollStep;\n\n\t\t// Check and expand only if it is visible\n\t\tif (this.DOM.timelineFixedWrap.offsetWidth > 0)\n\t\t{\n\t\t\tconst today = new Date();\n\t\t\ttoday.setHours(this.scaleDateFrom.getHours(), 0, 0, 0);\n\t\t\tif ((this.DOM.timelineVerticalConstraint.scrollLeft <= minScroll) && (this.scaleDateFrom.getTime() > today.getTime()))\n\t\t\t{\n\t\t\t\tthis.expandTimelineDirection = 'past';\n\t\t\t}\n\t\t\tif (this.DOM.timelineVerticalConstraint.scrollLeft >= maxScroll)\n\t\t\t{\n\t\t\t\tthis.expandTimelineDirection = 'future';\n\t\t\t}\n\n\t\t\tif (this.expandTimelineDirection)\n\t\t\t{\n\t\t\t\tif (!this.isLoaderShown())\n\t\t\t\t{\n\t\t\t\t\tthis.showLoader();\n\t\t\t\t}\n\t\t\t\tthis.expandTimelineDebounce();\n\t\t\t}\n\t\t}\n\t}\n\n\tstartScrollTimeline()\n\t{\n\t\tthis.timelineIsDraged = true;\n\t\tthis.timelineStartScrollLeft = this.DOM.timelineVerticalConstraint.scrollLeft;\n\t}\n\tscrollTimeline(x)\n\t{\n\t\tthis.DOM.timelineVerticalConstraint.scrollLeft = Math.max(this.timelineStartScrollLeft - x, 0);\n\t}\n\tendScrollTimeline()\n\t{\n\t\tthis.timelineIsDraged = false;\n\t}\n\n\tfindTarget(node, nodeMetaType, parentCont)\n\t{\n\t\tif (!parentCont)\n\t\t\tparentCont = this.DOM.mainWrap;\n\n\t\tlet type = (node && node.getAttribute) ? node.getAttribute('data-bx-planner-meta') : null;\n\n\t\tif (type !== nodeMetaType)\n\t\t{\n\t\t\tif (node)\n\t\t\t{\n\t\t\t\tnode = BX.findParent(node, function(n)\n\t\t\t\t{\n\t\t\t\t\treturn n.getAttribute && n.getAttribute('data-bx-planner-meta') === nodeMetaType;\n\t\t\t\t}, parentCont);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tnode = null;\n\t\t\t}\n\t\t}\n\n\t\treturn node;\n\t}\n\n\tgetMousePos(e)\n\t{\n\t\tif (!e)\n\t\t\te = window.event;\n\n\t\tlet x = 0, y = 0;\n\t\tif (e.pageX || e.pageY)\n\t\t{\n\t\t\tx = e.pageX;\n\t\t\ty = e.pageY;\n\t\t}\n\t\telse if (e.clientX || e.clientY)\n\t\t{\n\t\t\tx = e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft;\n\t\t\ty = e.clientY + (document.documentElement.scrollTop || document.body.scrollTop) - document.documentElement.clientTop;\n\t\t}\n\n\t\treturn {x: x, y: y};\n\t}\n\n\tsetScaleType(scaleType)\n\t{\n\t\tif (!this.scaleTypes.includes(scaleType))\n\t\t{\n\t\t\tscaleType = '1hour';\n\t\t}\n\n\t\tthis.scaleType = scaleType;\n\t\tthis.scaleSize = Planner.getScaleSize(scaleType);\n\n\t\tif (this.isOneDayScale() && this.timelineCellWidth < 100)\n\t\t{\n\t\t\tthis.timelineCellWidthOrig = this.timelineCellWidth;\n\t\t\tthis.timelineCellWidth = 100;\n\t\t}\n\t\telse if (!this.isOneDayScale() && this.timelineCellWidthOrig)\n\t\t{\n\t\t\tthis.timelineCellWidth = this.timelineCellWidthOrig;\n\t\t\tthis.timelineCellWidthOrig = false;\n\t\t}\n\n\t\tif (this.isOneDayScale())\n\t\t{\n\t\t\tDom.addClass(this.DOM.mainWrap, 'calendar-planner-fulldaymode');\n\t\t\tif (this.DOM.entriesOuterWrap)\n\t\t\t{\n\t\t\t\tDom.addClass(this.DOM.entriesOuterWrap, 'calendar-planner-no-daytitle');\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDom.removeClass(this.DOM.mainWrap, 'calendar-planner-fulldaymode');\n\t\t\tif (this.DOM.entriesOuterWrap)\n\t\t\t{\n\t\t\t\tDom.removeClass(this.DOM.entriesOuterWrap, 'calendar-planner-no-daytitle');\n\t\t\t}\n\t\t}\n\t}\n\n\tstatic getScaleSize(scaleType)\n\t{\n\t\tlet\n\t\t\thour = 3600,\n\t\t\tmap = {\n\t\t\t\t'15min' : Math.round(hour / 4),\n\t\t\t\t'30min' : Math.round(hour / 2),\n\t\t\t\t'1hour' : hour,\n\t\t\t\t'2hour' : hour * 2,\n\t\t\t\t'1day' : hour * 24\n\t\t\t};\n\n\t\treturn map[scaleType] || hour;\n\t}\n\n\tmapDatePos(accuracy)\n\t{\n\t\tif (!accuracy)\n\t\t{\n\t\t\taccuracy = this.accuracy;\n\t\t}\n\n\t\tlet datePosMap = {};\n\t\tlet posDateMap = {};\n\t\tlet i, j, tsi, xi, tsj, xj, cellWidth;\n\n\t\tthis.substeps = Math.round(this.scaleSize / accuracy);\n\t\tthis.posAccuracy = this.timelineCellWidth / this.substeps;\n\n\t\taccuracy = accuracy * 1000;\n\t\tlet scaleSize = this.scaleData[1].timestamp - this.scaleData[0].timestamp;\n\n\t\tfor (i = 0; i < this.scaleData.length; i++)\n\t\t{\n\t\t\ttsi = this.scaleData[i].timestamp;\n\t\t\txi = parseInt(this.scaleData[i].cell.offsetLeft);\n\t\t\tcellWidth = parseInt(this.scaleData[i].cell.offsetWidth);\n\n\t\t\tif (!datePosMap[tsi])\n\t\t\t{\n\t\t\t\tdatePosMap[tsi] = xi;\n\t\t\t}\n\t\t\tposDateMap[xi] = tsi;\n\n\t\t\tfor (j = 1; j <= cellWidth; j++)\n\t\t\t{\n\t\t\t\ttsj = tsi + Math.round((j * scaleSize / cellWidth) / accuracy) * accuracy;\n\t\t\t\txj = xi + j;\n\t\t\t\tif (!datePosMap[tsi])\n\t\t\t\t{\n\t\t\t\t\tdatePosMap[tsj] = xj;\n\t\t\t\t}\n\t\t\t\tposDateMap[xj] = tsj;\n\n\t\t\t\tif (j === cellWidth &&\n\t\t\t\t\t(!this.scaleData[i + 1] || this.scaleData[i + 1].dayStart))\n\t\t\t\t{\n\t\t\t\t\tdatePosMap[xj + '_end'] = tsj;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (i + 1 < this.scaleData.length && this.scaleData[i + 1].dayStart)\n\t\t\t{\n\t\t\t\tconst borderStart = xi + cellWidth;\n\t\t\t\tconst borderEnd = parseInt(this.scaleData[i + 1].cell.offsetLeft);\n\t\t\t\tconst borderTimestamp = tsi + scaleSize;\n\t\t\t\tfor (let borderX = borderStart; borderX < borderEnd; borderX++)\n\t\t\t\t{\n\t\t\t\t\tposDateMap[borderX] = borderTimestamp;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tdatePosMap: datePosMap,\n\t\t\tposDateMap: posDateMap\n\t\t}\n\t}\n\n\tgetPosByDate(date)\n\t{\n\t\tlet x = 0;\n\t\tif (date && typeof date !== 'object')\n\t\t{\n\t\t\tdate = Util.parseDate(date);\n\t\t}\n\n\t\tif (date && typeof date === 'object')\n\t\t{\n\t\t\tlet curInd = 0;\n\t\t\tconst timestamp = date.getTime();\n\n\t\t\tfor (let i = 0; i < this.scaleData.length; i++)\n\t\t\t{\n\t\t\t\tif (timestamp >= this.scaleData[i].timestamp)\n\t\t\t\t{\n\t\t\t\t\tcurInd = i;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.scaleData[curInd] && this.scaleData[curInd].cell)\n\t\t\t{\n\t\t\t\tx = this.scaleData[curInd].cell.offsetLeft;\n\t\t\t\tconst cellWidth = this.scaleData[curInd].cell.offsetWidth;\n\t\t\t\tconst deltaTs = Math.round((timestamp - this.scaleData[curInd].timestamp) / 1000);\n\n\t\t\t\tif (deltaTs > 0)\n\t\t\t\t{\n\t\t\t\t\tx += Math.round(deltaTs * 10 / this.scaleSize * cellWidth) / 10;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn x;\n\t}\n\n\tgetDateByPos(x, end, posDateMap)\n\t{\n\t\tif (!posDateMap)\n\t\t{\n\t\t\tposDateMap = this.posDateMap;\n\t\t}\n\t\tlet\n\t\t\tdate,\n\t\t\ttimestamp = (end && posDateMap[x + '_end']) ? posDateMap[x + '_end'] : posDateMap[x];\n\n\t\tif (!timestamp)\n\t\t{\n\t\t\tx = Math.round(x);\n\t\t\ttimestamp = (end && posDateMap[x + '_end']) ? posDateMap[x + '_end'] : posDateMap[x];\n\t\t}\n\n\t\tif (timestamp)\n\t\t{\n\t\t\tdate = new Date(timestamp);\n\t\t}\n\n\t\treturn date;\n\t}\n\n\tshowMoreUsers()\n\t{\n\t\tthis.MIN_ENTRY_ROWS = this.MAX_ENTRY_ROWS;\n\t\tthis.rebuild({ dontFocus: true });\n\n\t\tDom.addClass(this.selector.DOM.moreButton, '--close');\n\n\t\tEvent.unbind(this.selector.DOM.moreButton, 'click', this.showMoreUsersBind);\n\t\tEvent.bind(this.selector.DOM.moreButton, 'click', this.hideMoreUsersBind);\n\t}\n\n\thideMoreUsers()\n\t{\n\t\tthis.MIN_ENTRY_ROWS = this.initialMinEntryRows;\n\t\tthis.rebuild({ dontFocus: true });\n\n\t\tDom.removeClass(this.selector.DOM.moreButton, '--close');\n\n\t\tEvent.unbind(this.selector.DOM.moreButton, 'click', this.hideMoreUsersBind);\n\t\tEvent.bind(this.selector.DOM.moreButton, 'click', this.showMoreUsersBind);\n\t}\n\n\tadjustHeight()\n\t{\n\t\tlet\n\t\t\tnewHeight = this.DOM.entrieListWrap.offsetHeight + this.DOM.entrieListWrap.offsetTop + 30,\n\t\t\tcurrentHeight = parseInt(this.DOM.wrap.style.height) || this.height;\n\n\t\tif (this.compactMode && currentHeight < newHeight || !this.compactMode)\n\t\t{\n\t\t\tthis.resizePlannerHeight(newHeight, Math.abs(newHeight - currentHeight) > 10);\n\t\t}\n\t}\n\n\tresizePlannerHeight(height, animation = false)\n\t{\n\t\tif (animation)\n\t\t{\n\t\t\tconst animationDuration = 300;\n\t\t\tconst top = parseInt(this.DOM.entrieListWrap.style.top);\n\n\t\t\tthis.updateHeightTransition(animationDuration);\n\t\t\tthis.DOM.entrieListWrap.style.zIndex = '10';\n\t\t\tthis.DOM.entrieListWrap.style.overflow = 'hidden';\n\t\t\tthis.DOM.entrieListWrap.style.clipPath = `inset(0 0 calc(100% - ${this.height - top}px))`;\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.updateHeight(height);\n\t\t\t\tthis.DOM.entrieListWrap.style.clipPath = `inset(0 0 calc(100% - ${height - top}px))`;\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.updateHeightTransition(0);\n\t\t\t\t\tthis.DOM.entrieListWrap.style.zIndex = '';\n\t\t\t\t\tthis.DOM.entrieListWrap.style.overflow = '';\n\t\t\t\t\tthis.DOM.entrieListWrap.style.clipPath = '';\n\t\t\t\t}, animationDuration);\n\t\t\t}, 0);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.updateHeight(height);\n\t\t}\n\n\t\tthis.height = height;\n\t\tlet timelineDataContHeight = this.DOM.entrieListWrap.offsetHeight + 3;\n\t\tthis.DOM.timelineDataWrap.style.height = timelineDataContHeight + 'px';\n\t\tif (this.DOM.proposeTimeButton && this.DOM.proposeTimeButton.style.display !== \"none\")\n\t\t{\n\t\t\tthis.DOM.proposeTimeButton.style.top = (this.DOM.timelineDataWrap.offsetTop + timelineDataContHeight / 2 - 16) + \"px\";\n\t\t}\n\t}\n\n\tupdateHeightTransition(duration)\n\t{\n\t\tthis.DOM.wrap.style.transition = `height ${duration}ms ease`;\n\t\tthis.DOM.mainWrap.style.transition = `height ${duration}ms ease`;\n\t\tthis.DOM.timelineFixedWrap.style.transition = `height ${duration}ms ease`;\n\t\tthis.DOM.entriesOuterWrap.style.transition = `height ${duration}ms ease`;\n\t\tthis.DOM.entrieListWrap.style.transition = `clip-path ${duration}ms ease`;\n\t}\n\n\tupdateHeight(height)\n\t{\n\t\tthis.DOM.wrap.style.height = height + 'px';\n\t\tthis.DOM.mainWrap.style.height = height + 'px';\n\t\tthis.DOM.timelineFixedWrap.style.height = height + 'px';\n\t\tthis.DOM.entriesOuterWrap.style.height = height + 'px';\n\t}\n\n\tresizePlannerWidth(width, animation)\n\t{\n\t\tif (!animation && this.DOM.wrap && this.DOM.mainWrap)\n\t\t{\n\t\t\tthis.DOM.wrap.style.width = width + 'px';\n\t\t\tlet entriesListWidth = this.compactMode ? 0 : this.entriesListWidth;\n\n\t\t\tif (!this.showEntryName)\n\t\t\t{\n\t\t\t\tentriesListWidth = 55;\n\t\t\t}\n\n\t\t\tthis.DOM.mainWrap.style.width = width + 'px';\n\t\t\tthis.DOM.entriesOuterWrap.style.width = entriesListWidth + 'px';\n\t\t}\n\t}\n\n\texpandTimeline(scaleDateFrom, scaleDateTo)\n\t{\n\t\tlet loadedTimelineSize;\n\t\tlet scrollLeft;\n\t\tconst prevScaleDateFrom = this.scaleDateFrom;\n\t\tconst prevScaleDateTo = this.scaleDateTo;\n\n\t\tif (!scaleDateFrom)\n\t\t{\n\t\t\tscaleDateFrom = this.scaleDateFrom;\n\t\t}\n\t\tif (!scaleDateTo)\n\t\t{\n\t\t\tscaleDateTo = this.scaleDateTo;\n\t\t}\n\n\t\tif (this.expandTimelineDirection === 'past')\n\t\t{\n\t\t\tscrollLeft = this.DOM.timelineVerticalConstraint.scrollLeft;\n\t\t\tthis.scaleDateFrom = new Date(scaleDateFrom.getTime() - Util.getDayLength() * this.EXPAND_OFFSET);\n\t\t\tconst today = new Date();\n\t\t\ttoday.setHours(this.scaleDateFrom.getHours(), 0, 0, 0);\n\t\t\tif (this.scaleDateFrom.getTime() < today)\n\t\t\t{\n\t\t\t\tthis.scaleDateFrom = today;\n\t\t\t}\n\n\t\t\tloadedTimelineSize = (this.scaleDateTo.getTime() - this.scaleDateFrom.getTime()) / Util.getDayLength();\n\t\t\tif (loadedTimelineSize > this.maxTimelineSize)\n\t\t\t{\n\t\t\t\tthis.scaleDateTo = new Date(this.scaleDateFrom.getTime() + Util.getDayLength() * this.maxTimelineSize);\n\t\t\t\tthis.loadedDataFrom = this.scaleDateFrom;\n\t\t\t\tthis.loadedDataTo = this.scaleDateTo;\n\t\t\t\tthis.limitScaleSizeMode = true;\n\t\t\t}\n\t\t}\n\t\telse if (this.expandTimelineDirection === 'future')\n\t\t{\n\t\t\tlet oldDateTo = this.scaleDateTo;\n\t\t\tscrollLeft = this.DOM.timelineVerticalConstraint.scrollLeft;\n\t\t\tthis.scaleDateTo = new Date(scaleDateTo.getTime() + Util.getDayLength() * this.EXPAND_OFFSET);\n\t\t\tloadedTimelineSize = (this.scaleDateTo.getTime() - this.scaleDateFrom.getTime()) / Util.getDayLength();\n\n\t\t\tif (loadedTimelineSize > this.maxTimelineSize)\n\t\t\t{\n\t\t\t\tthis.scaleDateFrom = new Date(this.scaleDateTo.getTime() - Util.getDayLength() * this.maxTimelineSize);\n\t\t\t\tthis.loadedDataFrom = this.scaleDateFrom;\n\t\t\t\tthis.loadedDataTo = this.scaleDateTo;\n\n\t\t\t\tscrollLeft = this.getPosByDate(oldDateTo) - this.DOM.timelineFixedWrap.offsetWidth;\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.DOM.timelineVerticalConstraint.scrollLeft = this.getPosByDate(oldDateTo) - this.DOM.timelineFixedWrap.offsetWidth;\n\t\t\t\t}, 10);\n\n\t\t\t\tthis.limitScaleSizeMode = true;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.scaleDateFrom = new Date(scaleDateFrom.getTime() - Util.getDayLength() * this.SCALE_OFFSET_BEFORE);\n\t\t\tthis.scaleDateTo = new Date(scaleDateTo.getTime() + Util.getDayLength() * this.SCALE_OFFSET_AFTER);\n\t\t}\n\n\t\tconst reloadData = this.scaleDateFrom.getTime() < prevScaleDateFrom.getTime()\n\t\t|| this.scaleDateTo.getTime() > prevScaleDateTo.getTime();\n\n\t\tthis.hideLoader();\n\t\tthis.emit('onExpandTimeline', new BaseEvent({\n\t\t\tdata: {\n\t\t\t\treload: reloadData,\n\t\t\t\tdateFrom: this.scaleDateFrom,\n\t\t\t\tdateTo: this.scaleDateTo\n\t\t\t} }));\n\n\t\tconst currentPlannerWidth = this.DOM.timelineInnerWrap.offsetWidth;\n\t\tthis.rebuild({\n\t\t\tupdateSelector: true\n\t\t});\n\n\t\tif (this.expandTimelineDirection === 'past')\n\t\t{\n\t\t\tconst widthDiff = this.DOM.timelineInnerWrap.offsetWidth - currentPlannerWidth;\n\t\t\tthis.DOM.timelineVerticalConstraint.scrollLeft = scrollLeft + widthDiff;\n\t\t}\n\t\telse if (scrollLeft !== undefined)\n\t\t{\n\t\t\tthis.DOM.timelineVerticalConstraint.scrollLeft = scrollLeft;\n\t\t}\n\n\t\tthis.expandTimelineDirection = null;\n\t}\n\n\tgetVisibleEvents()\n\t{\n\t\tconst visibleEvents = [];\n\n\t\tconst timelineFromPosition = this.DOM.timelineVerticalConstraint.scrollLeft;\n\t\tconst timelineToPosition = timelineFromPosition + this.DOM.timelineFixedWrap.offsetWidth;\n\n\t\tfor (const index in this.accessibility)\n\t\t{\n\t\t\tfor (const event of this.accessibility[index])\n\t\t\t{\n\t\t\t\tconst eventFromPosition = this.getPosByDate(new Date(event.fromTimestamp));\n\t\t\t\tconst eventToPosition = this.getPosByDate(new Date(event.toTimestamp));\n\t\t\t\tif (\n\t\t\t\t\tthis.doSegmentsIntersect(eventFromPosition, eventToPosition, timelineFromPosition, timelineToPosition)\n\t\t\t\t\t&& event.node\n\t\t\t\t)\n\t\t\t\t{\n\t\t\t\t\tvisibleEvents.push(event);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn visibleEvents;\n\t}\n\n\tgetEventsAfter(events, timestamp)\n\t{\n\t\tconst eventsAfter = [];\n\t\tfor (const event of events)\n\t\t{\n\t\t\tif (event.fromTimestamp >= timestamp)\n\t\t\t{\n\t\t\t\teventsAfter.push(event);\n\t\t\t}\n\t\t}\n\t\treturn eventsAfter;\n\t}\n\n\tupdateTimezone(timezone)\n\t{\n\t\tconst currentOffset = Util.getTimeZoneOffset(this.currentTimezone, this.currentFromDate);\n\t\tconst timezoneOffset = Util.getTimeZoneOffset(timezone, this.currentFromDate);\n\t\tthis.currentTimezone = timezone;\n\n\t\tif (currentOffset === timezoneOffset)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.isBuilt())\n\t\t{\n\t\t\tthis.update(this.entries, this.accessibility);\n\t\t}\n\t}\n\n\tupdate(entries = [], accessibility = {})\n\t{\n\t\tDom.clean(this.DOM.entrieListWrap);\n\n\t\tDom.clean(this.DOM.accessibilityWrap);\n\t\tthis.entriesDataRowMap = new Map();\n\n\t\tif (!Type.isArray(entries))\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.setEntriesCount(entries.length);\n\n\t\tif (this.entries?.length !== entries.length)\n\t\t{\n\t\t\tthis.doShowTimezoneNoticePopup = true;\n\t\t}\n\n\t\tthis.entries = entries;\n\t\tthis.accessibility = [];\n\t\tthis.preparedAccessibility = [];\n\t\tthis.allEvents = [];\n\n\t\tconst currentOffset = Util.getTimeZoneOffset(this.currentTimezone, this.currentFromDate);\n\t\tthis.entries.forEach((entry) => {\n\t\t\tthis.accessibility[entry.id] = accessibility[entry.id] ?? [];\n\t\t\tthis.preparedAccessibility[entry.id] = this.accessibility[entry.id].map((it) => this.prepareAccessibilityItem(it));\n\t\t\tthis.allEvents.push(...this.preparedAccessibility[entry.id]);\n\t\t\tentry.timezoneOffset = Util.getTimeZoneOffset(entry.timezoneName, this.currentFromDate);\n\t\t\tentry.timezoneNameFormatted = Util.getFormattedTimezone(entry.timezoneName);\n\t\t\tentry.offset = currentOffset - entry.timezoneOffset;\n\t\t});\n\n\t\tconst userId = parseInt(this.userId);\n\n\t\t// sort entries list by amount of accessibility data\n\t\t// Entries without accessibility data should be in the end of the array\n\t\t// But first in the list will be meeting room\n\t\t// And second (or first) will be owner-host of the event\n\t\tentries.sort((a, b) => {\n\t\t\tif (b.status === 'h' || parseInt(b.id) === userId && a.status !== 'h')\n\t\t\t{\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tif (a.status === 'h' || parseInt(a.id) === userId && b.status !== 'h')\n\t\t\t{\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif (parseInt(a.id) < parseInt(b.id))\n\t\t\t{\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\treturn 1;\n\t\t});\n\n\t\tif (this.selectedEntriesWrap)\n\t\t{\n\t\t\tDom.clean(this.selectedEntriesWrap);\n\t\t\tif (this.selector && this.selector.controlWrap)\n\t\t\t{\n\t\t\t\tDom.clean(this.selector.controlWrap);\n\t\t\t}\n\t\t}\n\n\t\tconst cutData = [];\n\t\tconst cutDataTitle = [];\n\t\tlet usersCount = 0;\n\t\tlet cutEntries = [];\n\t\tlet dispDataCount = 0;\n\n\t\tif (entries.length <= this.initialMinEntryRows + 1)\n\t\t{\n\t\t\tthis.selector.DOM.moreButton.style.display = 'none';\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.selector.DOM.moreButton.style.display = '';\n\t\t}\n\n\t\tentries.forEach((entry, ind) => {\n\t\t\tentry.uid = Planner.getEntryUniqueId(entry);\n\n\t\t\tconst accData = this.preparedAccessibility[entry.uid];\n\t\t\tthis.entriesIndex.set(entry.uid, entry);\n\n\t\t\tif (entry.type === 'user')\n\t\t\t{\n\t\t\t\tusersCount++;\n\t\t\t}\n\n\t\t\tif (ind < this.MIN_ENTRY_ROWS || entries.length === this.MIN_ENTRY_ROWS + 1)\n\t\t\t{\n\t\t\t\tdispDataCount++;\n\t\t\t\tthis.displayEntryRow(entry, accData);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tcutEntries.push(entry);\n\t\t\t\tcutDataTitle.push(entry.name);\n\t\t\t\tcutData.push(...accData);\n\t\t\t}\n\t\t});\n\n\t\t// Update entries title count\n\t\tif (this.entriesListTitleCounter)\n\t\t{\n\t\t\tthis.entriesListTitleCounter.innerHTML = usersCount > this.MAX_ENTRY_ROWS ? '(' + usersCount + ')' : '';\n\t\t}\n\n\t\tthis.emit('onDisplayAttendees', new BaseEvent({\n\t\t\tdata: {\n\t\t\t\tusersCount: usersCount\n\t\t\t}\n\t\t}));\n\n\t\tif (cutEntries.length > 0)\n\t\t{\n\t\t\tif (dispDataCount === this.MAX_ENTRY_ROWS)\n\t\t\t{\n\t\t\t\tthis.displayEntryRow({\n\t\t\t\t\tname: Loc.getMessage('EC_PL_ATTENDEES_LAST') + ' (' + cutEntries.length + ')',\n\t\t\t\t\ttype: 'lastUsers',\n\t\t\t\t\ttitle: cutDataTitle.join(', ')\n\t\t\t\t}, cutData);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tthis.displayEntryRow({\n\t\t\t\t\tname: Loc.getMessage('EC_PL_ATTENDEES_SHOW_MORE') + ' (' + cutEntries.length + ')',\n\t\t\t\t\ttype: 'moreLink',\n\t\t\t\t\thasDifferentTimezone: cutEntries.filter(entry => entry.offset !== 0).length > 0,\n\t\t\t\t}, cutData);\n\t\t\t}\n\t\t}\n\n\t\tthis.clearCacheTime();\n\t\tconst status = this.checkTimePeriod(this.currentFromDate, this.currentToDate) === true;\n\t\tthis.updateSelectorFromStatus(status);\n\n\t\tUtil.extendPlannerWatches({entries: entries, userId: this.userId});\n\n\t\tthis.adjustHeight();\n\t\tthis.updateWorkTimeNotice();\n\t}\n\n\tupdateSelector(from, to, fullDay, options = {})\n\t{\n\t\tif (this.shown && this.selector)\n\t\t{\n\t\t\tthis.setFullDayMode(fullDay);\n\n\t\t\t// Update limits of scale\n\t\t\tif (!this.isOneDayScale())\n\t\t\t{\n\t\t\t\tif (Util.formatDate(from) !== Util.formatDate(to))\n\t\t\t\t{\n\t\t\t\t\tthis.extendScaleTime(0, 24);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tlet timeFrom = parseInt(from.getHours()) + Math.floor(from.getMinutes() / 60);\n\t\t\t\t\tlet timeTo = parseInt(to.getHours()) + Math.ceil(to.getMinutes() / 60);\n\t\t\t\t\tlet scale = 2;\n\n\t\t\t\t\tif (timeFrom <= this.shownScaleTimeFrom)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.extendScaleTime(timeFrom - scale, false);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (timeTo >= this.shownScaleTimeTo)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.extendScaleTime(false, timeTo + scale);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.isNeedToExpandTimeline(from, to))\n\t\t\t{\n\t\t\t\tthis.expandTimelineDirection = false;\n\t\t\t\tthis.expandTimeline(from, to);\n\t\t\t}\n\n\t\t\tthis.currentFromDate = from;\n\t\t\tthis.currentToDate = to;\n\t\t\tif (!this.selector)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (from.getTime() < this.scaleDateFrom.getTime())\n\t\t\t{\n\t\t\t\tthis.selector.update({\n\t\t\t\t\tfrom: from,\n\t\t\t\t\tto: to,\n\t\t\t\t\tfullDay: fullDay,\n\t\t\t\t\tfocus: options.focus !== false\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.selector.update({\n\t\t\t\tfrom: from,\n\t\t\t\tto: to,\n\t\t\t\tfullDay: fullDay\n\t\t\t});\n\n\t\t\tif (options.focus !== false)\n\t\t\t{\n\t\t\t\tthis.selector.focus(true, 300);\n\t\t\t}\n\n\t\t\tthis.updateWorkTimeNotice();\n\t\t}\n\t}\n\n\tisNeedToExpandTimeline(from, to)\n\t{\n\t\treturn to.getTime() > this.scaleDateTo.getTime()\n\t\t\t|| from.getTime() < this.scaleDateFrom.getTime();\n\t}\n\n\thandleSelectorChanges(event)\n\t{\n\t\tif (event instanceof BaseEvent)\n\t\t{\n\t\t\tlet data = event.getData();\n\t\t\tthis.emit('onDateChange', new BaseEvent({data: data}));\n\t\t\tthis.currentFromDate = data.dateFrom;\n\t\t\tthis.currentToDate = data.dateTo;\n\t\t\tthis.update(this.entries, this.accessibility);\n\n\t\t\tif (this.currentToDate.getHours() < this.shownScaleTimeFrom\n\t\t\t\t&& !(this.currentToDate.getHours() === 0 && this.currentToDate.getMinutes() === 0))\n\t\t\t{\n\t\t\t\tthis.extendScaleTime(this.currentToDate.getHours(), false);\n\t\t\t}\n\n\t\t\tthis.updateWorkTimeNotice();\n\t\t}\n\t}\n\n\tonStopAutoScrollHandler()\n\t{\n\t\tthis.hideWorkTimeNotice();\n\t}\n\n\tonBeginChangeHandler()\n\t{\n\t\tthis.hideWorkTimeNotice();\n\t}\n\n\tupdateWorkTimeNotice()\n\t{\n\t\tif (!this.isWorkTimeNoticeEnabled())\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tconst selectorTime = this.selector.boundaryFrom ?? this.currentFromDate;\n\t\tthis.updateVacationNotice(selectorTime);\n\t\tthis.updateTimezoneNotice(selectorTime);\n\t}\n\n\thideWorkTimeNotice()\n\t{\n\t\tthis.hideVacationNotice();\n\t\tthis.hideTimezoneNotice();\n\t}\n\n\tupdateVacationNotice(selectorTime)\n\t{\n\t\tthis.selector.setVacationOffset(0);\n\n\t\tfor (const entry of this.entries.filter(entry => Type.isDomNode(entry.vacationNode)))\n\t\t{\n\t\t\tconst currentVacations = this.accessibility[entry.id].filter((acc) => {\n\t\t\t\tconst from = acc.from.getTime();\n\t\t\t\tconst to = acc.to.getTime();\n\t\t\t\treturn acc.isVacation && from < selectorTime.getTime() && selectorTime.getTime() < to;\n\t\t\t});\n\n\t\t\tif (currentVacations.length > 0)\n\t\t\t{\n\t\t\t\tconst to = Math.max(...currentVacations.map(vacation => vacation.to));\n\t\t\t\tentry.vacationNode.dataHint = Loc.getMessage('EC_PLANNER_IN_VACATION_UNTIL', {\n\t\t\t\t\t'#UNTIL#': Util.formatDate(to),\n\t\t\t\t});\n\t\t\t\tentry.vacationNode.style.display = '';\n\n\t\t\t\tthis.selector.setVacationOffset(entry.vacationNode.offsetWidth - 13);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tentry.vacationNode.style.display = 'none';\n\t\t\t}\n\t\t}\n\t}\n\n\thideVacationNotice()\n\t{\n\t\tfor (const entry of this.entries.filter(entry => Type.isDomNode(entry.vacationNode)))\n\t\t{\n\t\t\tentry.vacationNode.style.display = 'none';\n\t\t}\n\t}\n\n\tupdateTimezoneNotice(selectorTime)\n\t{\n\t\tif (this.readonly || this.fullDayMode)\n\t\t{\n\t\t\tthis.hideTimezoneNotice();\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst otherTimezoneEntries = this.entries.filter((entry) => this.isInternalUser(entry) && entry.offset !== 0);\n\t\tconst warningTimezoneEntries = otherTimezoneEntries.filter((entry) => {\n\t\t\tconst entryTime = new Date(selectorTime.getTime() + entry.offset * 60 * 1000);\n\t\t\tconst entryHours = this.getDateHours(entryTime);\n\n\t\t\treturn entryHours < this.warningHoursFrom || entryHours >= this.warningHoursTo;\n\t\t});\n\n\t\tif (Type.isDomNode(this.DOM.statusNodeAll))\n\t\t{\n\t\t\tDom.removeClass(this.DOM.statusNodeAll, '--warning');\n\t\t}\n\n\t\tthis.selector.clearTimeNodes();\n\t\tfor (const entry of otherTimezoneEntries)\n\t\t{\n\t\t\tconst entryNode = this.entriesDataRowMap.get(entry.uid);\n\t\t\tconst entryTime = new Date(selectorTime.getTime() + entry.offset * 60 * 1000);\n\t\t\tconst entryHours = this.getDateHours(entryTime);\n\t\t\tconst isWarning = entryHours < this.warningHoursFrom || entryHours >= this.warningHoursTo;\n\n\t\t\tif (Type.isDomNode(entryNode))\n\t\t\t{\n\t\t\t\tconst top = parseInt(entryNode.style.top, 10);\n\t\t\t\tthis.selector.showTimeNode(top, Util.formatTime(entryTime), entry.timezoneNameFormatted, entry.id, isWarning);\n\t\t\t}\n\n\t\t\tthis.showEntryStatusTimezone(entry, isWarning);\n\t\t}\n\n\t\tconst isWarning = warningTimezoneEntries.length > 0;\n\t\tif (isWarning)\n\t\t{\n\t\t\tDom.addClass(this.selector.DOM.moreButton, '--warning');\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDom.removeClass(this.selector.DOM.moreButton, '--warning');\n\t\t}\n\n\t\tif (otherTimezoneEntries.length > 0)\n\t\t{\n\t\t\tthis.showTimezoneNotice(otherTimezoneEntries.length, isWarning);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.hideTimezoneNotice();\n\t\t}\n\t}\n\n\tisInternalUser(entry)\n\t{\n\t\treturn entry.type === 'user' && !entry.sharingUser && !entry.emailUser;\n\t}\n\n\tgetDateHours(date)\n\t{\n\t\treturn date.getHours() + date.getMinutes() / 60;\n\t}\n\n\tshowTimezoneNotice(count, isWarning)\n\t{\n\t\tif (this.readonly)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.showTimezoneNoticeCount(count, isWarning);\n\t\tif (isWarning)\n\t\t{\n\t\t\tthis.showTimezoneNoticePopup();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.hideTimezoneNoticePopup();\n\t\t}\n\t}\n\n\thideTimezoneNotice()\n\t{\n\t\tif (this.readonly)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.selector.clearTimeNodes();\n\t\tthis.hideTimezoneNoticeCount();\n\t\tthis.hideTimezoneNoticePopup();\n\t}\n\n\tshowTimezoneNoticeCount(count, isWarning)\n\t{\n\t\tthis.DOM.timezoneNoticeCount.innerHTML = this.renderTimezoneNoticeText(count, isWarning);\n\n\t\tconst left = this.getSelectorOffset();\n\t\tthis.DOM.timezoneNoticeCount.style.left = `${left}px`;\n\t\tthis.DOM.timezoneNoticeCount.style.display = 'block';\n\t\tthis.DOM.wrap.style.marginBottom = `${20}px`;\n\n\t\tif (!this.isElementInsideConstraintWrap(this.DOM.timezoneNoticeCount))\n\t\t{\n\t\t\tthis.hideTimezoneNoticeCount();\n\t\t}\n\t}\n\n\thideTimezoneNoticeCount()\n\t{\n\t\tthis.DOM.timezoneNoticeCount.style.display = 'none';\n\t}\n\n\tshowTimezoneNoticePopup()\n\t{\n\t\tif (!this.doShowTimezoneNoticePopup || this.isTimezoneNoticePopupShown)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tthis.showSelectorPopup(Loc.getMessage('EC_PLANNER_TIMEZONE_NOTICE'));\n\n\t\tif (!this.isElementInsideConstraintWrap(this.DOM.selectorPopup))\n\t\t{\n\t\t\tthis.hideTimezoneNoticePopup();\n\t\t}\n\t}\n\n\tisElementInsideConstraintWrap(element)\n\t{\n\t\tconst containerRect = this.DOM.timelineVerticalConstraint.getBoundingClientRect();\n\t\tconst elementRect = element.getBoundingClientRect();\n\n\t\treturn elementRect.left >= containerRect.left && elementRect.right <= containerRect.right;\n\t}\n\n\thideTimezoneNoticePopup()\n\t{\n\t\tif (this.DOM.selectorPopup.style.display !== 'none')\n\t\t{\n\t\t\tthis.doShowTimezoneNoticePopup = false;\n\t\t\tthis.isTimezoneNoticePopupShown = true;\n\t\t}\n\t\tthis.hideSelectorPopup();\n\t}\n\n\tshowSelectorPopup(text)\n\t{\n\t\tif (this.readonly)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.DOM.selectorPopup.style.display === 'block' && this.DOM.selectorPopup.innerText !== text)\n\t\t{\n\t\t\tthis.DOM.selectorPopup.style.transition = 'color 200ms ease';\n\t\t\tthis.DOM.selectorPopup.style.color = '#ffffff00';\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.DOM.selectorPopup.innerText = text;\n\t\t\t\tthis.DOM.selectorPopup.style.color = '';\n\t\t\t}, 200);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.DOM.selectorPopup.style.transition = 'none';\n\t\t\tthis.DOM.selectorPopup.innerText = text;\n\t\t\tthis.DOM.selectorPopup.style.color = '';\n\t\t}\n\n\t\tconst left = this.getSelectorOffset();\n\t\tthis.DOM.selectorPopup.style.left = `${left}px`;\n\t\tthis.DOM.selectorPopup.style.display = 'block';\n\n\t\tclearTimeout(this.selectorPopupTimeout);\n\t\tthis.selectorPopupTimeout = setTimeout(() => this.hideTimezoneNoticePopup(), 3000);\n\t}\n\n\thideSelectorPopup()\n\t{\n\t\tthis.DOM.selectorPopup.style.display = 'none';\n\t}\n\n\tgetSelectorOffset()\n\t{\n\t\tconst scroll = this.scrollLeft;\n\t\tconst selectorWrap = this.selector.getWrap();\n\t\tconst selectorCenter = parseInt(selectorWrap.style.width) / 2 + parseInt(selectorWrap.style.left);\n\t\tconst userWrapWidth = parseInt(this.DOM.entriesOuterWrap.style.width);\n\n\t\treturn selectorCenter - scroll + userWrapWidth;\n\t}\n\n\tshowEntryStatusTimezone(entry, isWarning)\n\t{\n\t\tif (!Type.isDomNode(entry.statusNode) || !this.DOM.wrap.contains(entry.statusNode))\n\t\t{\n\t\t\tif (Type.isDomNode(this.DOM.statusNodeAll))\n\t\t\t{\n\t\t\t\tthis.DOM.statusNodeAll.style.display = '';\n\t\t\t}\n\n\t\t\tif (isWarning)\n\t\t\t{\n\t\t\t\tDom.addClass(this.DOM.statusNodeAll, '--warning');\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tentry.statusNode.style.display = '';\n\t\tDom.addClass(entry.statusNode, 'user-status-different-timezone');\n\n\t\tif (isWarning)\n\t\t{\n\t\t\tDom.addClass(entry.statusNode, '--warning');\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDom.removeClass(entry.statusNode, '--warning');\n\t\t}\n\t}\n\n\tisWorkTimeNoticeEnabled()\n\t{\n\t\treturn (!this.solidStatus || this.showWorkTimeNotice) && Type.isArrayFilled(this.entries);\n\t}\n\n\tgetAllEvents()\n\t{\n\t\treturn this.allEvents;\n\t}\n\n\tdoCheckSelectorStatus(event)\n\t{\n\t\tif (event instanceof BaseEvent)\n\t\t{\n\t\t\tconst data = event.getData();\n\t\t\tthis.clearCacheTime();\n\t\t\tconst selectorStatus = this.checkTimePeriod(data.dateFrom, data.dateTo) === true;\n\t\t\tthis.updateSelectorFromStatus(selectorStatus)\n\t\t}\n\t}\n\n\tupdateSelectorFromStatus(status)\n\t{\n\t\tthis.selector.setSelectorStatus(status);\n\t\tif (this.selector.isDragged())\n\t\t{\n\t\t\tthis.hideProposeControl();\n\t\t}\n\t\tif (status)\n\t\t{\n\t\t\tDom.removeClass(this.DOM.mainWrap, 'calendar-planner-selector-warning');\n\t\t\tthis.hideProposeControl();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tDom.addClass(this.DOM.mainWrap, 'calendar-planner-selector-warning');\n\t\t\tif (!this.selector.isDragged())\n\t\t\t{\n\t\t\t\tthis.showProposeControl();\n\t\t\t}\n\t\t}\n\t}\n\n\tproposeTime(params = {})\n\t{\n\t\tif (!Type.isPlainObject(params))\n\t\t{\n\t\t\tparams = {};\n\t\t}\n\n\t\tlet\n\t\t\tcurTimestamp = Math.round(this.selector.getDateFrom().getTime() / (this.accuracy * 1000)) * this.accuracy * 1000,\n\t\t\tcurDate = new Date(curTimestamp),\n\t\t\tduration = this.selector.getDuration();\n\n\t\tcurDate.setSeconds(0,0);\n\t\tcurTimestamp = curDate.getTime();\n\n\t\tconst data = [...this.allEvents];\n\t\tdata.sort(function(a, b){return a.fromTimestamp - b.fromTimestamp});\n\n\t\tlet ts = curTimestamp;\n\t\twhile (true)\n\t\t{\n\t\t\tlet dateFrom = new Date(ts);\n\t\t\tlet dateTo = new Date(ts + duration);\n\n\t\t\tif (!this.isOneDayScale())\n\t\t\t{\n\t\t\t\tlet timeFrom = parseInt(dateFrom.getHours() + dateFrom.getMinutes() / 60);\n\t\t\t\tlet timeTo = parseInt(dateTo.getHours() + dateTo.getMinutes() / 60);\n\t\t\t\tif (timeTo === 0)\n\t\t\t\t{\n\t\t\t\t\ttimeTo = 24;\n\t\t\t\t}\n\n\t\t\t\tif (timeFrom < this.shownScaleTimeFrom)\n\t\t\t\t{\n\t\t\t\t\tdateFrom.setHours(this.shownScaleTimeFrom, 0, 0, 0);\n\t\t\t\t\tts = dateFrom.getTime();\n\t\t\t\t\tdateTo = new Date(ts + duration);\n\t\t\t\t}\n\n\t\t\t\tif (timeTo > this.shownScaleTimeTo)\n\t\t\t\t{\n\t\t\t\t\tdateFrom = new Date(ts + Util.getDayLength() - 1000); // next day\n\t\t\t\t\tdateFrom.setHours(this.shownScaleTimeFrom, 0, 0, 0);\n\t\t\t\t\tts = dateFrom.getTime();\n\t\t\t\t\tdateTo = new Date(ts + duration);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.fullDayMode)\n\t\t\t{\n\t\t\t\tdateFrom.setHours(0, 0, 0, 0);\n\t\t\t\tdateTo.setHours(0, 0, 0, 0);\n\t\t\t}\n\n\t\t\tconst checkRes = this.checkTimePeriod(dateFrom, dateTo, data);\n\n\t\t\tif (checkRes === true)\n\t\t\t{\n\t\t\t\tif (dateTo.getTime() > this.scaleDateTo.getTime())\n\t\t\t\t{\n\t\t\t\t\tif ((dateTo.getTime() - this.scaleDateTo.getTime()) > this.proposeTimeLimit * Util.getDayLength()\n\t\t\t\t\t\t||\n\t\t\t\t\t\tparams.checkedFuture === true)\n\t\t\t\t\t{\n\t\t\t\t\t\tPlanner.showNoResultNotification();\n\t\t\t\t\t}\n\t\t\t\t\telse if (params.checkedFuture !== true)\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.scaleDateTo = new Date(this.scaleDateTo.getTime() + Util.getDayLength() * this.proposeTimeLimit);\n\t\t\t\t\t\tthis.expandTimeline(this.scaleDateFrom, this.scaleDateTo);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif (this.fullDayMode)\n\t\t\t\t\t\tdateTo = new Date(dateTo.getTime() - Util.getDayLength());\n\n\t\t\t\t\tthis.currentFromDate = dateFrom;\n\t\t\t\t\tthis.currentToDate = dateTo;\n\n\t\t\t\t\tthis.selector.update({\n\t\t\t\t\t\tfrom: dateFrom,\n\t\t\t\t\t\tto: dateTo,\n\t\t\t\t\t\tupdateScaleType:false,\n\t\t\t\t\t\tupdateScaleLimits:true,\n\t\t\t\t\t\tanimation: true,\n\t\t\t\t\t\tfocus: true\n\t\t\t\t\t});\n\n\t\t\t\t\tthis.emit('onDateChange', new BaseEvent({data: {\n\t\t\t\t\t\tdateFrom: dateFrom,\n\t\t\t\t\t\tdateTo: dateTo,\n\t\t\t\t\t\tfullDay: this.fullDayMode\n\t\t\t\t\t}}));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse if (checkRes && checkRes.toTimestampReal)\n\t\t\t{\n\t\t\t\tts = checkRes.toTimestampReal;\n\t\t\t\tif (this.fullDayMode)\n\t\t\t\t{\n\t\t\t\t\tlet dt = new Date(ts + Util.getDayLength() - 1000); // next day\n\t\t\t\t\tdt.setHours(0, 0, 0, 0);\n\t\t\t\t\tts = dt.getTime();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tcheckTimePeriod(fromDate, toDate, data)\n\t{\n\t\tif (!this.currentFromDate)\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tconst timelineFrom = new Date();\n\t\ttimelineFrom.setHours(this.shownScaleTimeFrom, 0, 0, 0);\n\t\tif (this.fullDayMode)\n\t\t{\n\t\t\ttimelineFrom.setHours(0, 0, 0, 0);\n\t\t}\n\t\tif (fromDate && fromDate.getTime() < timelineFrom.getTime())\n\t\t{\n\t\t\treturn true;\n\t\t}\n\n\t\tlet result = true;\n\t\tlet entry;\n\n\t\tif (!Type.isDate(fromDate) || !Type.isDate(toDate))\n\t\t{\n\t\t\treturn result;\n\t\t}\n\n\t\tlet fromTimestamp = fromDate.getTime();\n\t\tlet toTimestamp = toDate.getTime();\n\t\tconst cacheKey = fromTimestamp + '_' + toTimestamp;\n\t\tconst accuracy = 3 * 60 * 1000; // 3min\n\n\t\tif (Type.isArray(data))\n\t\t{\n\t\t\tfor (let i = 0; i < data.length; i++)\n\t\t\t{\n\t\t\t\tlet item = data[i];\n\n\t\t\t\tif ((item.fromTimestamp + accuracy) <= toTimestamp && ((item.toTimestampReal || item.toTimestamp) - accuracy) >= fromTimestamp)\n\t\t\t\t{\n\t\t\t\t\tresult = item;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (Type.isArray(this.entries))\n\t\t{\n\t\t\tlet\n\t\t\t\tentriesAccessibleIndex = {},\n\t\t\t\tselectorAccuracy = this.selectorAccuracy * 1000,\n\t\t\t\tentryId;\n\n\t\t\tif (this.checkTimeCache[cacheKey] !== undefined)\n\t\t\t{\n\t\t\t\tresult = this.checkTimeCache[cacheKey];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tfor (entryId in this.accessibility)\n\t\t\t\t{\n\t\t\t\t\tif (this.accessibility.hasOwnProperty(entryId))\n\t\t\t\t\t{\n\t\t\t\t\t\tentry = this.entries.find(function(el){return el.id === entryId.toString();});\n\n\t\t\t\t\t\tif (!entry)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tentriesAccessibleIndex[entryId] = true;\n\t\t\t\t\t\tif (Type.isArray(this.accessibility[entryId]))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfor (let i = 0; i < this.accessibility[entryId].length; i++)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlet item = this.accessibility[entryId][i];\n\n\t\t\t\t\t\t\t\tif ((item.fromTimestamp + selectorAccuracy) <= toTimestamp && ((item.toTimestampReal || item.toTimestamp) - selectorAccuracy) >= fromTimestamp)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tentriesAccessibleIndex[entryId] = false;\n\t\t\t\t\t\t\t\t\tresult = item;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.checkTimeCache[cacheKey] = result;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tclearCacheTime()\n\t{\n\t\tthis.checkTimeCache = {};\n\t}\n\n\tshowSettingsPopup()\n\t{\n\t\tlet\tsettingsDialogCont = Tag.render`<div class=\"calendar-planner-settings-popup\"></div>`;\n\t\tlet scaleRow = settingsDialogCont.appendChild(Tag.render`\n\t\t\t<div class=\"calendar-planner-settings-row\">\n\t\t\t\t<i>${Loc.getMessage('EC_PL_SETTINGS_SCALE')}:</i>\n\t\t\t</div>\n\t\t`);\n\t\tlet scaleWrap = scaleRow.appendChild(Tag.render`\n\t\t\t<span class=\"calendar-planner-option-container\"></span>\n\t\t`);\n\n\n\t\tif (this.fullDayMode)\n\t\t{\n\t\t\tscaleRow.title = Loc.getMessage('EC_PL_SETTINGS_SCALE_READONLY_TITLE');\n\t\t\tDom.addClass(scaleRow, 'calendar-planner-option-container-disabled');\n\t\t}\n\n\t\tthis.scaleTypes.forEach((scale)=>{\n\t\t\tscaleWrap.appendChild(Tag.render`<span class=\"calendar-planner-option-tab ${(scale === this.scaleType ? ' calendar-planner-option-tab-active' : '')}\" data-bx-planner-scale=\"${scale}\">${Loc.getMessage('EC_PL_SETTINGS_SCALE_' + scale.toUpperCase())}</span>`);\n\t\t});\n\n\n\t\t// Create and show settings popup\n\t\tlet popup = PopupWindowManager.create(\n\t\t\tthis.id + \"-settings-popup\",\n\t\t\tthis.DOM.settingsButton,\n\t\t\t{\n\t\t\t\tautoHide: true,\n\t\t\t\tcloseByEsc: true,\n\t\t\t\toffsetTop: -1,\n\t\t\t\toffsetLeft: 7,\n\t\t\t\tlightShadow: true,\n\t\t\t\tcontent: settingsDialogCont,\n\t\t\t\tzIndex: 4000,\n\t\t\t\tangle: {postion: 'top'},\n\t\t\t\tcacheable: false\n\t\t\t});\n\t\tpopup.show(true);\n\n\t\tEvent.bind(scaleWrap, 'click', (e) => {\n\t\t\tif (!this.fullDayMode)\n\t\t\t{\n\t\t\t\tlet\n\t\t\t\t\tnodeTarget = e.target || e.srcElement,\n\t\t\t\t\tscale = nodeTarget && nodeTarget.getAttribute && nodeTarget.getAttribute('data-bx-planner-scale');\n\n\t\t\t\tif (scale)\n\t\t\t\t{\n\t\t\t\t\tthis.changeScaleType(scale);\n\t\t\t\t\tpopup.close();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tchangeScaleType(scaleType)\n\t{\n\t\tif (scaleType !== this.scaleType)\n\t\t{\n\t\t\tthis.setScaleType(scaleType);\n\t\t\tthis.rebuild();\n\t\t}\n\t}\n\n\tsetFullDayMode(fullDayMode)\n\t{\n\t\tif (fullDayMode !== this.fullDayMode)\n\t\t{\n\t\t\tthis.fullDayMode = fullDayMode;\n\t\t\tif (fullDayMode && !this.isOneDayScale())\n\t\t\t{\n\t\t\t\tthis.savedScaleType = this.scaleType;\n\t\t\t\tthis.changeScaleType('1day');\n\t\t\t}\n\t\t\telse if (!fullDayMode && this.isOneDayScale() && this.savedScaleType)\n\t\t\t{\n\t\t\t\tthis.changeScaleType(this.savedScaleType);\n\t\t\t\tthis.savedScaleType = null;\n\t\t\t}\n\t\t}\n\t}\n\n\tstatic showNoResultNotification()\n\t{\n\t\talert(Loc.getMessage('EC_PL_PROPOSE_NO_RESULT'));\n\t}\n\n\tshowProposeControl()\n\t{\n\t\tif (!this.DOM.proposeTimeButton)\n\t\t{\n\t\t\tthis.DOM.proposeTimeButton = this.DOM.mainWrap.appendChild(Tag.render`\n\t\t\t\t<div class=\"calendar-planner-time-arrow-right\">\n\t\t\t\t\t<span class=\"calendar-planner-time-arrow-right-text\">\n\t\t\t\t\t\t${Loc.getMessage('EC_PL_PROPOSE')}\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class=\"calendar-planner-time-arrow-right-item\"></span>\n\t\t\t\t</div>\n\t\t\t`);\n\t\t\tEvent.bind(this.DOM.proposeTimeButton, 'click', this.proposeTime.bind(this));\n\n\t\t\tif (this.isLocked())\n\t\t\t{\n\t\t\t\tDom.addClass(this.DOM.proposeTimeButton, '--lock');\n\t\t\t}\n\t\t}\n\t\tthis.DOM.proposeTimeButton.style.display = \"block\";\n\t\tthis.DOM.proposeTimeButton.style.top = (this.DOM.timelineDataWrap.offsetTop + this.DOM.timelineDataWrap.offsetHeight / 2 - 16) + \"px\";\n\t}\n\n\thideProposeControl()\n\t{\n\t\tif (this.DOM.proposeTimeButton)\n\t\t{\n\t\t\tthis.DOM.proposeTimeButton.style.display = \"none\";\n\t\t}\n\t}\n\n\tmouseMoveHandler(e)\n\t{\n\t\tlet\n\t\t\ti, nodes,\n\t\t\tentryUid, parentTarget,\n\t\t\tprevEntry,\n\t\t\tmainContWrap = this.DOM.mainWrap,\n\t\t\ttarget = e.target || e.srcElement;\n\n\t\tentryUid = target.getAttribute('data-bx-planner-entry');\n\t\tif (!entryUid)\n\t\t{\n\t\t\tparentTarget = BX.findParent(target,\n\t\t\t\tfunction(node)\n\t\t\t\t{\n\t\t\t\t\tif (node == mainContWrap ||\n\t\t\t\t\t\tnode.getAttribute && node.getAttribute('data-bx-planner-entry')\n\t\t\t\t\t)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tmainContWrap\n\t\t\t);\n\n\t\t\tif (parentTarget)\n\t\t\t{\n\t\t\t\tentryUid = target.getAttribute('data-bx-planner-entry')\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tDom.removeClass(this.hoverRow, 'show');\n\t\t\t\tnodes = this.selector.controlWrap.querySelectorAll('.calendar-planner-selector-control-row.hover');\n\t\t\t\tfor (i = 0; i < nodes.length; i++)\n\t\t\t\t{\n\t\t\t\t\tDom.removeClass(nodes[i], 'hover');\n\t\t\t\t}\n\t\t\t\tprevEntry = this.getEntryByUniqueId(this.howerEntryId);\n\t\t\t\tif (prevEntry && prevEntry.selectWrap)\n\t\t\t\t{\n\t\t\t\t\tprevEntry.selectWrap.style.opacity = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (entryUid)\n\t\t{\n\t\t\tif (this.howerEntryId !== entryUid)\n\t\t\t{\n\t\t\t\tthis.howerEntryId = entryUid;\n\t\t\t\tlet entry = this.getEntryByUniqueId(entryUid);\n\t\t\t\tif (entry)\n\t\t\t\t{\n\t\t\t\t\tlet top = parseInt(entry.dataRowWrap.offsetTop);\n\t\t\t\t\tDom.addClass(this.hoverRow, 'show');\n\t\t\t\t\tthis.hoverRow.style.top = (top + 36) + 'px';\n\t\t\t\t\tthis.hoverRow.style.width = (parseInt(this.DOM.mainWrap.offsetWidth) + 5) + 'px';\n\n\t\t\t\t\tif (entry.selectorControlWrap)\n\t\t\t\t\t{\n\t\t\t\t\t\tnodes = this.selector.controlWrap.querySelectorAll('.calendar-planner-selector-control-row.hover');\n\t\t\t\t\t\tfor (i = 0; i < nodes.length; i++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tDom.removeClass(nodes[i], 'hover');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tDom.addClass(entry.selectorControlWrap, 'hover');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tshowLoader()\n\t{\n\t\tthis.hideLoader();\n\t\tthis.DOM.loader = this.DOM.mainWrap.appendChild(Util.getLoader(50));\n\t\tDom.addClass(this.DOM.loader, 'calendar-planner-main-loader');\n\t\tthis.loaderShown = true;\n\t}\n\n\thideLoader()\n\t{\n\t\tif(Type.isDomNode(this.DOM.loader))\n\t\t{\n\t\t\tDom.remove(this.DOM.loader);\n\t\t}\n\t\tthis.loaderShown = false;\n\t}\n\n\tisLoaderShown()\n\t{\n\t\treturn this.loaderShown;\n\t}\n\n\tisShown()\n\t{\n\t\treturn this.shown;\n\t}\n\n\tisBuilt()\n\t{\n\t\treturn this.built;\n\t}\n\n\tisLocked()\n\t{\n\t\treturn this.locked;\n\t}\n\n\tlock()\n\t{\n\t\tif (!this.DOM.lockScreen)\n\t\t{\n\t\t\tthis.DOM.lockScreen = Tag.render`\n\t\t\t\t<div class=\"calendar-planner-timeline-locker\">\n\t\t\t\t\t<div class=\"calendar-planner-timeline-locker-container\">\n\t\t\t\t\t\t<div class=\"calendar-planner-timeline-locker-top\">\n\t\t\t\t\t\t\t<div class=\"calendar-planner-timeline-locker-icon\"></div>\n\t\t\t\t\t\t\t<div class=\"calendar-planner-timeline-text\">${Loc.getMessage('EC_PL_LOCKED_TITLE')}</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t${this.getLockerButton()}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t`;\n\t\t}\n\n\t\tDom.addClass(this.DOM.timelineFixedWrap, '--lock');\n\t\tthis.DOM.timelineFixedWrap.appendChild(this.DOM.lockScreen);\n\t}\n\n\tgetLockerButton()\n\t{\n\t\tif (!this.DOM.lockButton)\n\t\t{\n\t\t\tthis.DOM.lockButton = Tag.render`\n\t\t\t\t<div class=\"calendar-planner-timeline-locker-button\">\n\t\t\t\t\t<div class=\"ui-btn ui-btn-sm ui-btn-light-border ui-btn-round\">${Loc.getMessage('EC_PL_UNLOCK_FEATURE')}</div>\n\t\t\t\t</div>\n\t\t\t`;\n\n\t\t\tEvent.bind(this.DOM.lockButton, 'click', () => {\n\t\t\t\tFeaturePromotersRegistry.getPromoter({ featureId: 'calendar_events_with_planner' }).show();\n\t\t\t});\n\t\t}\n\n\t\treturn this.DOM.lockButton;\n\t}\n\n\tdoSegmentsIntersect(x1, x2, y1, y2)\n\t{\n\t\treturn (x1 >= y1 && x1 <= y2)\n\t\t\t|| (x2 >= y1 && x2 <= y2)\n\t\t\t|| (x1 <= y1 && x2 >= y2);\n\t}\n\n\tsetReadonly()\n\t{\n\t\tthis.readonly = true;\n\t\tDom.addClass(this.DOM.mainWrap, 'calendar-planner-readonly');\n\t}\n\n\tsetSolid()\n\t{\n\t\tthis.solidStatus = true;\n\t\tthis.selector.setSolid();\n\t}\n\n\tsetShowWorkTimeNotice()\n\t{\n\t\tthis.showWorkTimeNotice = true;\n\t}\n}\n"],"names":["Selector","EventEmitter","constructor","params","DOM","selectMode","currentDateFrom","Date","currentDateTo","currentFullDay","useAnimation","beforeBeginChange","setEventNamespace","getPosByDate","getDateByPos","getPosDateMap","getTimelineWidth","getScaleInfo","solidStatus","alwaysBlue","vacationOffset","eventDragAndDrop","EventDragAndDrop","getEvents","render","timeNodes","timeWrap","Tag","wrap","renderMoreButton","ondrag","BX","False","ondragstart","titleNode","moreButton","shake","shakeClass","Dom","addClass","clearTimeout","shakeTimeout","setTimeout","removeClass","clearTimeNodes","offset","destroyTimeNode","setVacationOffset","showTimeNode","offsetTop","time","timezone","entryId","isWarning","warningClass","append","updateTimeWrapWidth","width","Object","values","reduce","acc","el","Math","max","offsetWidth","style","marginLeft","left","Type","isElementNode","remove","getWrap","getTitleNode","update","isPlainObject","updateScaleType","updateScaleLimits","animation","from","isDate","parseDate","to","fullDayMode","fullDay","undefined","setHours","dayCount","ceil","getTime","boundaryFrom","show","focus","isSelectorInThePast","scaleDateFrom","isSelectorInTheFuture","scaleDateTo","display","alignCenter","fromPos","toPos","transit","toX","checkStatus","hide","startMove","document","addEventListener","preventDefault","passive","selectorIsDraged","selectorStartLeft","parseInt","selectorStartScrollLeft","timelineWrap","scrollLeft","onDragStart","body","move","x","pos","checkPosition","boundary","getDragBoundary","valueChanged","emit","getAutoScrollBoundary","getConstrainedBoundary","setBoundary","boundaryLeft","position","containerLeft","boundaryRight","size","containerRight","timelineFixedWrap","scrollSpeed","getSpeed","setAutoScrollInterval","stopAutoScroll","x1","x2","floor","sqrt","abs","direction","scrollInterval","setInterval","setFinalTimeInterval","clearInterval","wasMagnetized","transition","showTitle","duration","getHours","shownTimeFrom","shownTimeTo","getMinutes","endMove","removeEventListener","getFinalFrom","right","getFinalTo","finalBoundary","hideTitle","setValue","startResize","selectorIsResized","selectorStartWidth","resize","toDate","timeTo","rightPos","min","Util","getDayLength","round","fromDate","getDate","selectorRoundedRightPos","roundedPos","roundPos","endResize","e","isDragged","selectorPos","mainContWrap","selectorWidth","lastFromDate","lastToDate","BaseEvent","data","dateFrom","dateTo","setSolid","setSelectorStatus","status","selectorIsFree","scaleInfo","timeFrom","scaleTimeFrom","scaleTimeTo","getDay","leftDate","rightDate","fromX","triggerChangeEvents","stop","easing","start","finish","makeEaseOut","transitions","quart","step","state","complete","checkedPos","animate","selectorTitle","selector","innerHTML","date","format","removeAttribute","formatTime","appendChild","selectorHideTimeout","opacity","quad","timeoutName","selectorIndex","timeout","parseFloat","focusTimeout","screenDelta","selectorLeft","viewWidth","viewLeft","viewRight","newScrollLeft","getDuration","getDateFrom","getDateTo","Planner","config","entryStatusMap","h","y","q","n","tzAll","scaleTypes","savedScaleType","SCALE_OFFSET_BEFORE","SCALE_OFFSET_AFTER","EXPAND_OFFSET","EXPAND_DELAY","REBUILD_DELAY","maxTimelineSize","initialMinEntryRows","MIN_ENTRY_ROWS","MAX_ENTRY_ROWS","height","minWidth","minHeight","workTime","warningHoursFrom","warningHoursTo","scrollStep","shown","built","locked","shownScaleTimeFrom","shownScaleTimeTo","timelineCellWidthOrig","proposeTimeLimit","expandTimelineDelay","limitScaleSizeMode","checkTimeCache","entriesIndex","Map","setEntriesCount","entriesCount","id","userId","Loc","getMessage","SCALE_TIME_FORMAT","isAmPmMode","userTimezone","getUserSettings","timezoneName","currentTimezone","isStringFilled","entryTimezone","expandTimelineDebounce","Runtime","debounce","expandTimeline","showMoreUsersBind","showMoreUsers","bind","hideMoreUsersBind","hideMoreUsers","setConfig","getMaxPlannerUsers","settings","Extension","getSettings","maxPlannerUsers","currentFromDate","currentToDate","hourFrom","hourTo","extendScaleTimeLimits","updateScaleLimitsFromEntry","hideAnimation","isBuilt","resizePlannerWidth","build","bindEventHandlers","buildTimeline","adjustWidth","timelineInnerWrap","readonly","mainWrap","compactMode","entriesOuterWrap","adjustHeight","setVisible","isVisible","parentElement","setProperty","rebuildDebounce","dontFocus","todayLocMessage","setScaleType","scaleType","showTimelineDayTitle","Boolean","compactHeight","isOneDayScale","isInteger","minEntryRows","maxEntryRows","isArray","extendScaleTime","weekHolidays","yearHolidays","accuracy","clickSelectorScaleAccuracy","selectorAccuracy","entriesListWidth","timelineCellWidth","showWorkTimeNotice","showEntiesHeader","showEntryName","allowAdjustCellWidth","isLocked","adjustCellWidth","setScaleLimits","warningTimeFrom","work_time_start","warningTimeTo","work_time_end","toDateString","warningDateFrom","replace","warningDateTo","getDateHours","type","isString","fromTime","toTime","isNaN","SetLoadedDataLimits","loadedDataFrom","loadedDataTo","savedTimeFrom","savedTimeTo","extendTimelineToRight","extendTimelineToLeft","scaleSize","lock","window","plannerr","createSelector","renderEntriesOuterWrap","renderTimelineFixedWrap","renderSelectorPopup","renderTimezoneNoticeCount","renderSettingsButton","timelineVerticalConstraint","getAllEvents","posDateMap","scale","subscribe","handleSelectorChanges","doCheckSelectorStatus","onBeginChangeHandler","onStopAutoScrollHandler","hideTimezoneNotice","renderEntriesListHeader","renderEntriesListWrap","preventSelection","renderEntriesListTitleCounter","entriesListTitleCounter","entrieListWrap","renderTimelineVerticalConstraint","renderTimelineInnerWrap","isTodayButtonEnabled","onScrollHandler","renderTimelineScaleWrap","renderTimelineDataWrap","timelineScaleWrap","timelineDataWrap","renderTimelineAccessibilityWrap","accessibilityWrap","settingsButton","Event","showSettingsPopup","selectorPopup","hideSelectorPopup","doShowTimezoneNoticePopup","timezoneNoticeCount","renderTimezoneNoticeText","count","renderVacationNode","vacationNode","showHintPopup","hideHintPopup","node","hintPopup","dataHint","zIndex","overflow","clipPath","clearCache","lastTimelineKey","getTimelineShownKey","clean","scaleData","getScaleData","outerDayCont","dayTitle","cont","futureDayTitles","todayButtonPivotDay","i","length","scaleDayTitles","daystamp","timestamp","today","dayTitleClass","DateTimeFormat","getFormat","push","querySelector","todayTitleButton","firstElementChild","todayButtonClickHandler","className","dayStart","title","cell","create","props","html","mapDatePosRes","mapDatePos","timelineOffset","top","checkRebuildTimeout","buildTodayButtonWrap","todayButton","todayRightButton","todayButtonContainer","todayButtonWidth","todayButtonRightWidth","todayButtonLeftWidth","offsetLeft","updateTodayButtonVisibility","_checkRebuildTimeoutCount","rebuildTimeout","isShown","rebuild","extendedTimeFrom","extendedTimeTo","extendTimeline","isToRight","isToLeft","dayNodeList","querySelectorAll","nodeCountInDay","extendCount","cellsInsertedOnLeftCount","insertedNodes","pivotScaleDatumOfDayIndex","dayNode","pivotNodeOfDay","children","toTimestamp","fromTimestamp","insertedTimestamp","animationClass","insertedCell","insertBefore","insertedScaleDatum","value","splice","classList","add","scroll","midnight","setDate","visibleEvents","getVisibleEvents","animatedEvents","getEventsAfter","entries","accessibility","linear","event","updateTimelineAfterExtend","clearCacheTime","updateSelector","selectorParams","ts","scaleFrom","scaleTo","dayStamp","curDayStamp","prepareAccessibilityItem","entry","userOffset","getTimeZoneOffset","timezoneOffset","timeOffset","setSeconds","isFullDay","toReal","toTimestampReal","name","isVacation","addAccessibilityItem","hidden","displayEntryRow","rowWrap","statusNodeAll","getStatusNode","hasDifferentTimezone","showMoreUsersLink","attrs","uid","emailUser","statusNode","hasCorrectStatus","getEntryAvatarNode","isCollabUser","Text","encode","entriesResourceListWrap","isNodeInDom","dataRowWrap","entriesDataRowMap","set","forEach","item","statusMessage","toUpperCase","hasMessage","getFormattedTimezone","imageNode","img","avatar","AvatarRoundGuest","userName","userpicPath","baseColor","getContainer","defaultAvatarClass","sharingUser","encodeURI","selectEntryRow","selectWrap","isParentForNode","selectedEntriesWrap","selectorControlWrap","selected","isEntrySelected","deSelectEntryRow","getEntryUniqueId","includes","getEntryByUniqueId","entryUniqueId","find","handleClick","handleMousedown","handleMousemove","handleMouseup","mouseWheelTimelineHandler","isRightClick","which","target","clickMousePos","getMousePos","nodeTarget","srcElement","accuracyMouse","timeline","findTarget","mouseDownMousePos","selectedDateFrom","selectorTimeLength","selectedDateTo","contains","mouseDown","startMousePos","startScrollTimeline","shouldShakeSelector","showSelectorPopup","isSelector","isNotMoreButton","timelineIsDraged","endScrollTimeline","checkTimelineScroll","mousePos","scrollTimeline","Browser","isMac","delta","deltaY","detail","wheelDelta","PreventDefault","updateWorkTimeNotice","parent","doDisplayTodayButton","setFutureDayTitlesOffset","doAddLeftArrow","isTodayInFuture","doDisplayTodayRightButton","doAddRightArrow","reload","minScroll","maxScroll","scrollWidth","expandTimelineDirection","isLoaderShown","showLoader","timelineStartScrollLeft","nodeMetaType","parentCont","getAttribute","findParent","pageX","pageY","clientX","clientY","documentElement","clientLeft","scrollTop","clientTop","getScaleSize","hour","map","datePosMap","j","tsi","xi","tsj","xj","cellWidth","substeps","posAccuracy","borderStart","borderEnd","borderTimestamp","borderX","curInd","deltaTs","end","unbind","newHeight","offsetHeight","currentHeight","resizePlannerHeight","animationDuration","updateHeightTransition","updateHeight","timelineDataContHeight","proposeTimeButton","loadedTimelineSize","prevScaleDateFrom","prevScaleDateTo","oldDateTo","reloadData","hideLoader","currentPlannerWidth","widthDiff","timelineFromPosition","timelineToPosition","index","eventFromPosition","eventToPosition","doSegmentsIntersect","events","eventsAfter","updateTimezone","currentOffset","preparedAccessibility","allEvents","it","timezoneNameFormatted","sort","a","b","controlWrap","cutData","cutDataTitle","usersCount","cutEntries","dispDataCount","ind","accData","join","filter","checkTimePeriod","updateSelectorFromStatus","extendPlannerWatches","options","setFullDayMode","formatDate","isNeedToExpandTimeline","getData","hideWorkTimeNotice","isWorkTimeNoticeEnabled","selectorTime","updateVacationNotice","updateTimezoneNotice","hideVacationNotice","isDomNode","currentVacations","vacation","otherTimezoneEntries","isInternalUser","warningTimezoneEntries","entryTime","entryHours","entryNode","get","showEntryStatusTimezone","showTimezoneNotice","showTimezoneNoticeCount","showTimezoneNoticePopup","hideTimezoneNoticePopup","hideTimezoneNoticeCount","getSelectorOffset","marginBottom","isElementInsideConstraintWrap","isTimezoneNoticePopupShown","element","containerRect","getBoundingClientRect","elementRect","text","innerText","color","selectorPopupTimeout","selectorWrap","selectorCenter","userWrapWidth","isArrayFilled","selectorStatus","hideProposeControl","showProposeControl","proposeTime","curTimestamp","curDate","checkRes","checkedFuture","showNoResultNotification","dt","timelineFrom","result","cacheKey","hasOwnProperty","toString","settingsDialogCont","scaleRow","scaleWrap","popup","PopupWindowManager","autoHide","closeByEsc","lightShadow","content","angle","postion","cacheable","changeScaleType","close","alert","mouseMoveHandler","nodes","entryUid","parentTarget","prevEntry","hoverRow","howerEntryId","loader","getLoader","loaderShown","lockScreen","getLockerButton","lockButton","FeaturePromotersRegistry","getPromoter","featureId","y1","y2","setReadonly","setShowWorkTimeNotice"],"mappings":"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"}