From dd456159b4796b8d0b8db76ac988d56737e4bc2c Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 3 Aug 2011 16:09:14 +0200 Subject: [ADD] Updated dhtmlxSheduler to version 3.0. (Fixed dhtmlx core initialization) bzr revid: fme@openerp.com-20110803140914-5qjtozi94i4ruica --- .../dhtmlxScheduler/codebase/dhtmlxscheduler.js | 3883 +------------------- 1 file changed, 192 insertions(+), 3691 deletions(-) (limited to 'addons/base_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.js') diff --git a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.js b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.js index ec0b61b638d..2c78468e81e 100644 --- a/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.js +++ b/addons/base_calendar/static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.js @@ -1,3694 +1,195 @@ /* -dhtmlxScheduler v.2.3 - -This software is allowed to use under GPL or you need to obtain Commercial or Enterise License +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License to use it in not GPL project. Please contact sales@dhtmlx.com for details - -(c) DHTMLX Ltd. -*/ -dhtmlxAjax = { - get: function (A, C) { - var B = new dtmlXMLLoaderObject(true); - B.async = (arguments.length < 3); - B.waitCall = C; - B.loadXML(A); - return B - }, - post: function (A, C, D) { - var B = new dtmlXMLLoaderObject(true); - B.async = (arguments.length < 4); - B.waitCall = D; - B.loadXML(A, true, C); - return B - }, - getSync: function (A) { - return this.get(A, null, true) - }, - postSync: function (A, B) { - return this.post(A, B, null, true) - } -}; - -function dtmlXMLLoaderObject(B, D, C, A) { - this.xmlDoc = ""; - if (typeof(C) != "undefined") { - this.async = C - } else { - this.async = true - } - this.onloadAction = B || null; - this.mainObject = D || null; - this.waitCall = null; - this.rSeed = A || false; - return this -} -dtmlXMLLoaderObject.prototype.waitLoadFunction = function (B) { - var A = true; - this.check = function () { - if ((B) && (B.onloadAction != null)) { - if ((!B.xmlDoc.readyState) || (B.xmlDoc.readyState == 4)) { - if (!A) { - return - } - A = false; - if (typeof B.onloadAction == "function") { - B.onloadAction(B.mainObject, null, null, null, B) - } - if (B.waitCall) { - B.waitCall.call(this, B); - B.waitCall = null - } - } - } - }; - return this.check -}; -dtmlXMLLoaderObject.prototype.getXMLTopNode = function (C, A) { - if (this.xmlDoc.responseXML) { - var B = this.xmlDoc.responseXML.getElementsByTagName(C); - if (B.length == 0 && C.indexOf(":") != -1) { - var B = this.xmlDoc.responseXML.getElementsByTagName((C.split(":"))[1]) - } - var E = B[0] - } else { - var E = this.xmlDoc.documentElement - } - if (E) { - this._retry = false; - return E - } - if ((_isIE) && (!this._retry)) { - var D = this.xmlDoc.responseText; - var A = this.xmlDoc; - this._retry = true; - this.xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); - this.xmlDoc.async = false; - this.xmlDoc.loadXML(D); - return this.getXMLTopNode(C, A) - } - dhtmlxError.throwError("LoadXML", "Incorrect XML", [(A || this.xmlDoc), this.mainObject]); - return document.createElement("DIV") -}; -dtmlXMLLoaderObject.prototype.loadXMLString = function (B) { - try { - var C = new DOMParser(); - this.xmlDoc = C.parseFromString(B, "text/xml") - } catch (A) { - this.xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); - this.xmlDoc.async = this.async; - this.xmlDoc.loadXML(B) - } - this.onloadAction(this.mainObject, null, null, null, this); - if (this.waitCall) { - this.waitCall(); - this.waitCall = null - } -}; -dtmlXMLLoaderObject.prototype.loadXML = function (C, B, A, D) { - if (this.rSeed) { - C += ((C.indexOf("?") != -1) ? "&" : "?") + "a_dhx_rSeed=" + (new Date()).valueOf() - } - this.filePath = C; - if ((!_isIE) && (window.XMLHttpRequest)) { - this.xmlDoc = new XMLHttpRequest() - } else { - this.xmlDoc = new ActiveXObject("Microsoft.XMLHTTP") - } - if (this.async) { - this.xmlDoc.onreadystatechange = new this.waitLoadFunction(this) - } - this.xmlDoc.open(B ? "POST" : "GET", C, this.async); - if (D) { - this.xmlDoc.setRequestHeader("User-Agent", "dhtmlxRPC v0.1 (" + navigator.userAgent + ")"); - this.xmlDoc.setRequestHeader("Content-type", "text/xml") - } else { - if (B) { - this.xmlDoc.setRequestHeader("Content-type", "application/x-www-form-urlencoded") - } - } - this.xmlDoc.setRequestHeader("X-Requested-With", "XMLHttpRequest"); - this.xmlDoc.send(null || A); - if (!this.async) { - (new this.waitLoadFunction(this))() - } -}; -dtmlXMLLoaderObject.prototype.destructor = function () { - this.onloadAction = null; - this.mainObject = null; - this.xmlDoc = null; - return null -}; -dtmlXMLLoaderObject.prototype.xmlNodeToJSON = function (D) { - var C = {}; - for (var B = 0; B < D.attributes.length; B++) { - C[D.attributes[B].name] = D.attributes[B].value - } - C._tagvalue = D.firstChild ? D.firstChild.nodeValue : ""; - for (var B = 0; B < D.childNodes.length; B++) { - var A = D.childNodes[B].tagName; - if (A) { - if (!C[A]) { - C[A] = [] - } - C[A].push(this.xmlNodeToJSON(D.childNodes[B])) - } - } - return C -}; - -function callerFunction(A, B) { - this.handler = function (C) { - if (!C) { - C = window.event - } - A(C, B); - return true - }; - return this.handler -} -function getAbsoluteLeft(A) { - return getOffset(A).left -} -function getAbsoluteTop(A) { - return getOffset(A).top -} -function getOffsetSum(A) { - var C = 0, - B = 0; - while (A) { - C = C + parseInt(A.offsetTop); - B = B + parseInt(A.offsetLeft); - A = A.offsetParent - } - return { - top: C, - left: B - } -} -function getOffsetRect(D) { - var G = D.getBoundingClientRect(); - var H = document.body; - var B = document.documentElement; - var A = window.pageYOffset || B.scrollTop || H.scrollTop; - var E = window.pageXOffset || B.scrollLeft || H.scrollLeft; - var F = B.clientTop || H.clientTop || 0; - var I = B.clientLeft || H.clientLeft || 0; - var J = G.top + A - F; - var C = G.left + E - I; - return { - top: Math.round(J), - left: Math.round(C) - } -} -function getOffset(A) { - if (A.getBoundingClientRect && !_isChrome) { - return getOffsetRect(A) - } else { - return getOffsetSum(A) - } -} -function convertStringToBoolean(A) { - if (typeof(A) == "string") { - A = A.toLowerCase() - } - switch (A) { - case "1": - case "true": - case "yes": - case "y": - case 1: - case true: - return true; - break; - default: - return false - } -} -function getUrlSymbol(A) { - if (A.indexOf("?") != -1) { - return "&" - } else { - return "?" - } -} -function dhtmlDragAndDropObject() { - if (window.dhtmlDragAndDrop) { - return window.dhtmlDragAndDrop - } - this.lastLanding = 0; - this.dragNode = 0; - this.dragStartNode = 0; - this.dragStartObject = 0; - this.tempDOMU = null; - this.tempDOMM = null; - this.waitDrag = 0; - window.dhtmlDragAndDrop = this; - return this -} -dhtmlDragAndDropObject.prototype.removeDraggableItem = function (A) { - A.onmousedown = null; - A.dragStarter = null; - A.dragLanding = null -}; -dhtmlDragAndDropObject.prototype.addDraggableItem = function (A, B) { - A.onmousedown = this.preCreateDragCopy; - A.dragStarter = B; - this.addDragLanding(A, B) -}; -dhtmlDragAndDropObject.prototype.addDragLanding = function (A, B) { - A.dragLanding = B -}; -dhtmlDragAndDropObject.prototype.preCreateDragCopy = function (A) { - if ((A || event) && (A || event).button == 2) { - return - } - if (window.dhtmlDragAndDrop.waitDrag) { - window.dhtmlDragAndDrop.waitDrag = 0; - document.body.onmouseup = window.dhtmlDragAndDrop.tempDOMU; - document.body.onmousemove = window.dhtmlDragAndDrop.tempDOMM; - return false - } - window.dhtmlDragAndDrop.waitDrag = 1; - window.dhtmlDragAndDrop.tempDOMU = document.body.onmouseup; - window.dhtmlDragAndDrop.tempDOMM = document.body.onmousemove; - window.dhtmlDragAndDrop.dragStartNode = this; - window.dhtmlDragAndDrop.dragStartObject = this.dragStarter; - document.body.onmouseup = window.dhtmlDragAndDrop.preCreateDragCopy; - document.body.onmousemove = window.dhtmlDragAndDrop.callDrag; - window.dhtmlDragAndDrop.downtime = new Date().valueOf(); - if ((A) && (A.preventDefault)) { - A.preventDefault(); - return false - } - return false -}; -dhtmlDragAndDropObject.prototype.callDrag = function (C) { - if (!C) { - C = window.event - } - dragger = window.dhtmlDragAndDrop; - if ((new Date()).valueOf() - dragger.downtime < 100) { - return - } - if ((C.button == 0) && (_isIE)) { - return dragger.stopDrag() - } - if (!dragger.dragNode && dragger.waitDrag) { - dragger.dragNode = dragger.dragStartObject._createDragNode(dragger.dragStartNode, C); - if (!dragger.dragNode) { - return dragger.stopDrag() - } - dragger.dragNode.onselectstart = function () { - return false - }; - dragger.gldragNode = dragger.dragNode; - document.body.appendChild(dragger.dragNode); - document.body.onmouseup = dragger.stopDrag; - dragger.waitDrag = 0; - dragger.dragNode.pWindow = window; - dragger.initFrameRoute() - } - if (dragger.dragNode.parentNode != window.document.body) { - var A = dragger.gldragNode; - if (dragger.gldragNode.old) { - A = dragger.gldragNode.old - } - A.parentNode.removeChild(A); - var B = dragger.dragNode.pWindow; - if (_isIE) { - var E = document.createElement("Div"); - E.innerHTML = dragger.dragNode.outerHTML; - dragger.dragNode = E.childNodes[0] - } else { - dragger.dragNode = dragger.dragNode.cloneNode(true) - } - dragger.dragNode.pWindow = window; - dragger.gldragNode.old = dragger.dragNode; - document.body.appendChild(dragger.dragNode); - B.dhtmlDragAndDrop.dragNode = dragger.dragNode - } - dragger.dragNode.style.left = C.clientX + 15 + (dragger.fx ? dragger.fx * (-1) : 0) + (document.body.scrollLeft || document.documentElement.scrollLeft) + "px"; - dragger.dragNode.style.top = C.clientY + 3 + (dragger.fy ? dragger.fy * (-1) : 0) + (document.body.scrollTop || document.documentElement.scrollTop) + "px"; - if (!C.srcElement) { - var D = C.target - } else { - D = C.srcElement - } - dragger.checkLanding(D, C) -}; -dhtmlDragAndDropObject.prototype.calculateFramePosition = function (E) { - if (window.name) { - var C = parent.frames[window.name].frameElement.offsetParent; - var D = 0; - var B = 0; - while (C) { - D += C.offsetLeft; - B += C.offsetTop; - C = C.offsetParent - } - if ((parent.dhtmlDragAndDrop)) { - var A = parent.dhtmlDragAndDrop.calculateFramePosition(1); - D += A.split("_")[0] * 1; - B += A.split("_")[1] * 1 - } - if (E) { - return D + "_" + B - } else { - this.fx = D - } - this.fy = B - } - return "0_0" -}; -dhtmlDragAndDropObject.prototype.checkLanding = function (B, A) { - if ((B) && (B.dragLanding)) { - if (this.lastLanding) { - this.lastLanding.dragLanding._dragOut(this.lastLanding) - } - this.lastLanding = B; - this.lastLanding = this.lastLanding.dragLanding._dragIn(this.lastLanding, this.dragStartNode, A.clientX, A.clientY, A); - this.lastLanding_scr = (_isIE ? A.srcElement : A.target) - } else { - if ((B) && (B.tagName != "BODY")) { - this.checkLanding(B.parentNode, A) - } else { - if (this.lastLanding) { - this.lastLanding.dragLanding._dragOut(this.lastLanding, A.clientX, A.clientY, A) - } - this.lastLanding = 0; - if (this._onNotFound) { - this._onNotFound() - } - } - } -}; -dhtmlDragAndDropObject.prototype.stopDrag = function (B, C) { - dragger = window.dhtmlDragAndDrop; - if (!C) { - dragger.stopFrameRoute(); - var A = dragger.lastLanding; - dragger.lastLanding = null; - if (A) { - A.dragLanding._drag(dragger.dragStartNode, dragger.dragStartObject, A, (_isIE ? event.srcElement : B.target)) - } - } - dragger.lastLanding = null; - if ((dragger.dragNode) && (dragger.dragNode.parentNode == document.body)) { - dragger.dragNode.parentNode.removeChild(dragger.dragNode) - } - dragger.dragNode = 0; - dragger.gldragNode = 0; - dragger.fx = 0; - dragger.fy = 0; - dragger.dragStartNode = 0; - dragger.dragStartObject = 0; - document.body.onmouseup = dragger.tempDOMU; - document.body.onmousemove = dragger.tempDOMM; - dragger.tempDOMU = null; - dragger.tempDOMM = null; - dragger.waitDrag = 0 -}; -dhtmlDragAndDropObject.prototype.stopFrameRoute = function (C) { - if (C) { - window.dhtmlDragAndDrop.stopDrag(1, 1) - } - for (var A = 0; A < window.frames.length; A++) { - try { - if ((window.frames[A] != C) && (window.frames[A].dhtmlDragAndDrop)) { - window.frames[A].dhtmlDragAndDrop.stopFrameRoute(window) - } - } catch (B) {} - } - try { - if ((parent.dhtmlDragAndDrop) && (parent != window) && (parent != C)) { - parent.dhtmlDragAndDrop.stopFrameRoute(window) - } - } catch (B) {} -}; -dhtmlDragAndDropObject.prototype.initFrameRoute = function (C, D) { - if (C) { - window.dhtmlDragAndDrop.preCreateDragCopy({}); - window.dhtmlDragAndDrop.dragStartNode = C.dhtmlDragAndDrop.dragStartNode; - window.dhtmlDragAndDrop.dragStartObject = C.dhtmlDragAndDrop.dragStartObject; - window.dhtmlDragAndDrop.dragNode = C.dhtmlDragAndDrop.dragNode; - window.dhtmlDragAndDrop.gldragNode = C.dhtmlDragAndDrop.dragNode; - window.document.body.onmouseup = window.dhtmlDragAndDrop.stopDrag; - window.waitDrag = 0; - if (((!_isIE) && (D)) && ((!_isFF) || (_FFrv < 1.8))) { - window.dhtmlDragAndDrop.calculateFramePosition() - } - } - try { - if ((parent.dhtmlDragAndDrop) && (parent != window) && (parent != C)) { - parent.dhtmlDragAndDrop.initFrameRoute(window) - } - } catch (B) {} - for (var A = 0; A < window.frames.length; A++) { - try { - if ((window.frames[A] != C) && (window.frames[A].dhtmlDragAndDrop)) { - window.frames[A].dhtmlDragAndDrop.initFrameRoute(window, ((!C || D) ? 1 : 0)) - } - } catch (B) {} - } -}; -var _isFF = false; -var _isIE = false; -var _isOpera = false; -var _isKHTML = false; -var _isMacOS = false; -var _isChrome = false; -if (navigator.userAgent.indexOf("Macintosh") != -1) { - _isMacOS = true -} -if (navigator.userAgent.toLowerCase().indexOf("chrome") > -1) { - _isChrome = true -} -if ((navigator.userAgent.indexOf("Safari") != -1) || (navigator.userAgent.indexOf("Konqueror") != -1)) { - var _KHTMLrv = parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf("Safari") + 7, 5)); - if (_KHTMLrv > 525) { - _isFF = true; - var _FFrv = 1.9 - } else { - _isKHTML = true - } -} else { - if (navigator.userAgent.indexOf("Opera") != -1) { - _isOpera = true; - _OperaRv = parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf("Opera") + 6, 3)) - } else { - if (navigator.appName.indexOf("Microsoft") != -1) { - _isIE = true; - if (navigator.appVersion.indexOf("MSIE 8.0") != -1 && document.compatMode != "BackCompat") { - _isIE = 8 - } - } else { - _isFF = true; - var _FFrv = parseFloat(navigator.userAgent.split("rv:")[1]) - } - } -} -dtmlXMLLoaderObject.prototype.doXPath = function (C, E, D, I) { - if (_isKHTML || (!_isIE && !window.XPathResult)) { - return this.doXPathOpera(C, E) - } - if (_isIE) { - if (!E) { - if (!this.xmlDoc.nodeName) { - E = this.xmlDoc.responseXML - } else { - E = this.xmlDoc - } - } - if (!E) { - dhtmlxError.throwError("LoadXML", "Incorrect XML", [(E || this.xmlDoc), this.mainObject]) - } - if (D != null) { - E.setProperty("SelectionNamespaces", "xmlns:xsl='" + D + "'") - } - if (I == "single") { - return E.selectSingleNode(C) - } else { - return E.selectNodes(C) || new Array(0) - } - } else { - var A = E; - if (!E) { - if (!this.xmlDoc.nodeName) { - E = this.xmlDoc.responseXML - } else { - E = this.xmlDoc - } - } - if (!E) { - dhtmlxError.throwError("LoadXML", "Incorrect XML", [(E || this.xmlDoc), this.mainObject]) - } - if (E.nodeName.indexOf("document") != -1) { - A = E - } else { - A = E; - E = E.ownerDocument - } - var G = XPathResult.ANY_TYPE; - if (I == "single") { - G = XPathResult.FIRST_ORDERED_NODE_TYPE - } - var F = new Array(); - var B = E.evaluate(C, A, function (J) { - return D - }, G, null); - if (G == XPathResult.FIRST_ORDERED_NODE_TYPE) { - return B.singleNodeValue - } - var H = B.iterateNext(); - while (H) { - F[F.length] = H; - H = B.iterateNext() - } - return F - } -}; - -function _dhtmlxError(B, A, C) { - if (!this.catches) { - this.catches = new Array() - } - return this -} -_dhtmlxError.prototype.catchError = function (B, A) { - this.catches[B] = A -}; -_dhtmlxError.prototype.throwError = function (B, A, C) { - if (this.catches[B]) { - return this.catches[B](B, A, C) - } - if (this.catches.ALL) { - return this.catches.ALL(B, A, C) - } - alert("Error type: " + arguments[0] + "\nDescription: " + arguments[1]); - return null -}; -window.dhtmlxError = new _dhtmlxError(); -dtmlXMLLoaderObject.prototype.doXPathOpera = function (C, A) { - var E = C.replace(/[\/]+/gi, "/").split("/"); - var D = null; - var B = 1; - if (!E.length) { - return [] - } - if (E[0] == ".") { - D = [A] - } else { - if (E[0] == "") { - D = (this.xmlDoc.responseXML || this.xmlDoc).getElementsByTagName(E[B].replace(/\[[^\]]*\]/g, "")); - B++ - } else { - return [] - } - } - for (B; B < E.length; B++) { - D = this._getAllNamedChilds(D, E[B]) - } - if (E[B - 1].indexOf("[") != -1) { - D = this._filterXPath(D, E[B - 1]) - } - return D -}; -dtmlXMLLoaderObject.prototype._filterXPath = function (B, A) { - var D = new Array(); - var A = A.replace(/[^\[]*\[\@/g, "").replace(/[\[\]\@]*/g, ""); - for (var C = 0; C < B.length; C++) { - if (B[C].getAttribute(A)) { - D[D.length] = B[C] - } - } - return D -}; -dtmlXMLLoaderObject.prototype._getAllNamedChilds = function (B, A) { - var E = new Array(); - if (_isKHTML) { - A = A.toUpperCase() - } - for (var D = 0; D < B.length; D++) { - for (var C = 0; C < B[D].childNodes.length; C++) { - if (_isKHTML) { - if (B[D].childNodes[C].tagName && B[D].childNodes[C].tagName.toUpperCase() == A) { - E[E.length] = B[D].childNodes[C] - } - } else { - if (B[D].childNodes[C].tagName == A) { - E[E.length] = B[D].childNodes[C] - } - } - } - } - return E -}; - -function dhtmlXHeir(B, A) { - for (var C in A) { - if (typeof(A[C]) == "function") { - B[C] = A[C] - } - } - return B -} -function dhtmlxEvent(B, C, A) { - if (B.addEventListener) { - B.addEventListener(C, A, false) - } else { - if (B.attachEvent) { - B.attachEvent("on" + C, A) - } - } -} -dtmlXMLLoaderObject.prototype.xslDoc = null; -dtmlXMLLoaderObject.prototype.setXSLParamValue = function (B, C, D) { - if (!D) { - D = this.xslDoc - } - if (D.responseXML) { - D = D.responseXML - } - var A = this.doXPath("/xsl:stylesheet/xsl:variable[@name='" + B + "']", D, "http://www.w3.org/1999/XSL/Transform", "single"); - if (A != null) { - A.firstChild.nodeValue = C - } -}; -dtmlXMLLoaderObject.prototype.doXSLTransToObject = function (D, B) { - if (!D) { - D = this.xslDoc - } - if (D.responseXML) { - D = D.responseXML - } - if (!B) { - B = this.xmlDoc - } - if (B.responseXML) { - B = B.responseXML - } - if (!_isIE) { - if (!this.XSLProcessor) { - this.XSLProcessor = new XSLTProcessor(); - this.XSLProcessor.importStylesheet(D) - } - var A = this.XSLProcessor.transformToDocument(B) - } else { - var A = new ActiveXObject("Msxml2.DOMDocument.3.0"); - try { - B.transformNodeToObject(D, A) - } catch (C) { - A = B.transformNode(D) - } - } - return A -}; -dtmlXMLLoaderObject.prototype.doXSLTransToString = function (C, B) { - var A = this.doXSLTransToObject(C, B); - if (typeof(A) == "string") { - return A - } - return this.doSerialization(A) -}; -dtmlXMLLoaderObject.prototype.doSerialization = function (B) { - if (!B) { - B = this.xmlDoc - } - if (B.responseXML) { - B = B.responseXML - } - if (!_isIE) { - var A = new XMLSerializer(); - return A.serializeToString(B) - } else { - return B.xml - } -}; -dhtmlxEventable = function (obj) { - obj.dhx_SeverCatcherPath = ""; - obj.attachEvent = function (name, catcher, callObj) { - name = "ev_" + name.toLowerCase(); - if (!this[name]) { - this[name] = new this.eventCatcher(callObj || this) - } - return (name + ":" + this[name].addEvent(catcher)) - }; - obj.callEvent = function (name, arg0) { - name = "ev_" + name.toLowerCase(); - if (this[name]) { - return this[name].apply(this, arg0) - } - return true - }; - obj.checkEvent = function (name) { - return ( !! this["ev_" + name.toLowerCase()]) - }; - obj.eventCatcher = function (obj) { - var dhx_catch = []; - var z = function () { - var res = true; - for (var i = 0; i < dhx_catch.length; i++) { - if (dhx_catch[i] != null) { - var zr = dhx_catch[i].apply(obj, arguments); - res = res && zr - } - } - return res - }; - z.addEvent = function (ev) { - if (typeof(ev) != "function") { - ev = eval(ev) - } - if (ev) { - return dhx_catch.push(ev) - 1 - } - return false - }; - z.removeEvent = function (id) { - dhx_catch[id] = null - }; - return z - }; - obj.detachEvent = function (id) { - if (id != false) { - var list = id.split(":"); - this[list[0]].removeEvent(list[1]) - } - } -}; - -function dataProcessor(A) { - this.serverProcessor = A; - this.action_param = "!nativeeditor_status"; - this.object = null; - this.updatedRows = []; - this.autoUpdate = true; - this.updateMode = "cell"; - this._tMode = "GET"; - this.post_delim = "_"; - this._waitMode = 0; - this._in_progress = {}; - this._invalid = {}; - this.mandatoryFields = []; - this.messages = []; - this.styles = { - updated: "font-weight:bold;", - inserted: "font-weight:bold;", - deleted: "text-decoration : line-through;", - invalid: "background-color:FFE0E0;", - invalid_cell: "border-bottom:2px solid red;", - error: "color:red;", - clear: "font-weight:normal;text-decoration:none;" - }; - this.enableUTFencoding(true); - dhtmlxEventable(this); - return this -} -dataProcessor.prototype = { - setTransactionMode: function (B, A) { - this._tMode = B; - this._tSend = A - }, - escape: function (A) { - if (this._utf) { - return encodeURIComponent(A) - } else { - return escape(A) - } - }, - enableUTFencoding: function (A) { - this._utf = convertStringToBoolean(A) - }, - setDataColumns: function (A) { - this._columns = (typeof A == "string") ? A.split(",") : A - }, - getSyncState: function () { - return !this.updatedRows.length - }, - enableDataNames: function (A) { - this._endnm = convertStringToBoolean(A) - }, - enablePartialDataSend: function (A) { - this._changed = convertStringToBoolean(A) - }, - setUpdateMode: function (B, A) { - this.autoUpdate = (B == "cell"); - this.updateMode = B; - this.dnd = A - }, - ignore: function (B, A) { - this._silent_mode = true; - B.call(A || window); - this._silent_mode = false - }, - setUpdated: function (D, C, E) { - if (this._silent_mode) { - return - } - var B = this.findRow(D); - E = E || "updated"; - var A = this.obj.getUserData(D, this.action_param); - if (A && E == "updated") { - E = A - } - if (C) { - this.set_invalid(D, false); - this.updatedRows[B] = D; - this.obj.setUserData(D, this.action_param, E); - if (this._in_progress[D]) { - this._in_progress[D] = "wait" - } - } else { - if (!this.is_invalid(D)) { - this.updatedRows.splice(B, 1); - this.obj.setUserData(D, this.action_param, "") - } - } - if (!C) { - this._clearUpdateFlag(D) - } - this.markRow(D, C, E); - if (C && this.autoUpdate) { - this.sendData(D) - } - }, - _clearUpdateFlag: function (A) {}, - markRow: function (F, C, E) { - var D = ""; - var B = this.is_invalid(F); - if (B) { - D = this.styles[B]; - C = true - } - if (this.callEvent("onRowMark", [F, C, E, B])) { - D = this.styles[C ? E : "clear"] + D; - this.obj[this._methods[0]](F, D); - if (B && B.details) { - D += this.styles[B + "_cell"]; - for (var A = 0; A < B.details.length; A++) { - if (B.details[A]) { - this.obj[this._methods[1]](F, A, D) - } - } - } - } - }, - getState: function (A) { - return this.obj.getUserData(A, this.action_param) - }, - is_invalid: function (A) { - return this._invalid[A] - }, - set_invalid: function (C, B, A) { - if (A) { - B = { - value: B, - details: A, - toString: function () { - return this.value.toString() - } - } - } - this._invalid[C] = B - }, - checkBeforeUpdate: function (A) { - return true - }, - sendData: function (A) { - if (this._waitMode && (this.obj.mytype == "tree" || this.obj._h2)) { - return - } - if (this.obj.editStop) { - this.obj.editStop() - } - if (typeof A == "undefined" || this._tSend) { - return this.sendAllData() - } - if (this._in_progress[A]) { - return false - } - this.messages = []; - if (!this.checkBeforeUpdate(A) && this.callEvent("onValidatationError", [A, this.messages])) { - return false - } - this._beforeSendData(this._getRowData(A), A) - }, - _beforeSendData: function (A, B) { - if (!this.callEvent("onBeforeUpdate", [B, this.getState(B), A])) { - return false - } - this._sendData(A, B) - }, - serialize: function (D, E) { - if (typeof D == "string") { - return D - } - if (typeof E != "undefined") { - return this.serialize_one(D, "") - } else { - var A = []; - var C = []; - for (var B in D) { - if (D.hasOwnProperty(B)) { - A.push(this.serialize_one(D[B], B + this.post_delim)); - C.push(B) - } - } - A.push("ids=" + this.escape(C.join(","))); - return A.join("&") - } - }, - serialize_one: function (D, B) { - if (typeof D == "string") { - return D - } - var A = []; - for (var C in D) { - if (D.hasOwnProperty(C)) { - A.push(this.escape((B || "") + C) + "=" + this.escape(D[C])) - } - } - return A.join("&") - }, - _sendData: function (B, C) { - if (!B) { - return - } - if (!this.callEvent("onBeforeDataSending", C ? [C, this.getState(C), B] : [null, null, B])) { - return false - } - if (C) { - this._in_progress[C] = (new Date()).valueOf() - } - var A = new dtmlXMLLoaderObject(this.afterUpdate, this, true); - var D = this.serverProcessor + (this._user ? (getUrlSymbol(this.serverProcessor) + ["dhx_user=" + this._user, "dhx_version=" + this.obj.getUserData(0, "version")].join("&")) : ""); - if (this._tMode != "POST") { - A.loadXML(D + ((D.indexOf("?") != -1) ? "&" : "?") + this.serialize(B, C)) - } else { - A.loadXML(D, true, this.serialize(B, C)) - } - this._waitMode++ - }, - sendAllData: function () { - if (!this.updatedRows.length) { - return - } - this.messages = []; - var B = true; - for (var A = 0; A < this.updatedRows.length; A++) { - B &= this.checkBeforeUpdate(this.updatedRows[A]) - } - if (!B && !this.callEvent("onValidatationError", ["", this.messages])) { - return false - } - if (this._tSend) { - this._sendData(this._getAllData()) - } else { - for (var A = 0; A < this.updatedRows.length; A++) { - if (!this._in_progress[this.updatedRows[A]]) { - if (this.is_invalid(this.updatedRows[A])) { - continue - } - this._beforeSendData(this._getRowData(this.updatedRows[A]), this.updatedRows[A]); - if (this._waitMode && (this.obj.mytype == "tree" || this.obj._h2)) { - return - } - } - } - } - }, - _getAllData: function (D) { - var B = {}; - var A = false; - for (var C = 0; C < this.updatedRows.length; C++) { - var E = this.updatedRows[C]; - if (this._in_progress[E] || this.is_invalid(E)) { - continue - } - if (!this.callEvent("onBeforeUpdate", [E, this.getState(E)])) { - continue - } - B[E] = this._getRowData(E, E + this.post_delim); - A = true; - this._in_progress[E] = (new Date()).valueOf() - } - return A ? B : null - }, - setVerificator: function (B, A) { - this.mandatoryFields[B] = A || (function (C) { - return (C != "") - }) - }, - clearVerificator: function (A) { - this.mandatoryFields[A] = false - }, - findRow: function (B) { - var A = 0; - for (A = 0; A < this.updatedRows.length; A++) { - if (B == this.updatedRows[A]) { - break - } - } - return A - }, - defineAction: function (A, B) { - if (!this._uActions) { - this._uActions = [] - } - this._uActions[A] = B - }, - afterUpdateCallback: function (B, G, F, E) { - var A = B; - var D = (F != "error" && F != "invalid"); - if (!D) { - this.set_invalid(B, F) - } - if ((this._uActions) && (this._uActions[F]) && (!this._uActions[F](E))) { - return (delete this._in_progress[A]) - } - if (this._in_progress[A] != "wait") { - this.setUpdated(B, false) - } - var C = B; - switch (F) { - case "inserted": - case "insert": - if (G != B) { - this.obj[this._methods[2]](B, G); - B = G - } - break; - case "delete": - case "deleted": - this.obj.setUserData(B, this.action_param, "true_deleted"); - this.obj[this._methods[3]](B); - delete this._in_progress[A]; - return this.callEvent("onAfterUpdate", [B, F, G, E]); - break - } - if (this._in_progress[A] != "wait") { - if (D) { - this.obj.setUserData(B, this.action_param, "") - } - delete this._in_progress[A] - } else { - delete this._in_progress[A]; - this.setUpdated(G, true, this.obj.getUserData(B, this.action_param)) - } - this.callEvent("onAfterUpdate", [B, F, G, E]) - }, - afterUpdate: function (G, K, I, H, F) { - F.getXMLTopNode("data"); - if (!F.xmlDoc.responseXML) { - return - } - var J = F.doXPath("//data/action"); - for (var D = 0; D < J.length; D++) { - var E = J[D]; - var C = E.getAttribute("type"); - var A = E.getAttribute("sid"); - var B = E.getAttribute("tid"); - G.afterUpdateCallback(A, B, C, E) - } - G.finalizeUpdate() - }, - finalizeUpdate: function () { - if (this._waitMode) { - this._waitMode-- - } - if ((this.obj.mytype == "tree" || this.obj._h2) && this.updatedRows.length) { - this.sendData() - } - this.callEvent("onAfterUpdateFinish", []); - if (!this.updatedRows.length) { - this.callEvent("onFullSync", []) - } - }, - init: function (A) { - this.obj = A; - if (this.obj._dp_init) { - this.obj._dp_init(this) - } - }, - setOnAfterUpdate: function (A) { - this.attachEvent("onAfterUpdate", A) - }, - enableDebug: function (A) {}, - setOnBeforeUpdateHandler: function (A) { - this.attachEvent("onBeforeDataSending", A) - }, -/* starts autoupdate mode - @param interval - time interval for sending update requests - */ - setAutoUpdate: function (C, B) { - C = C || 2000; - this._user = B || (new Date()).valueOf(); - this._need_update = false; - this._loader = null; - this._update_busy = false; - this.attachEvent("onAfterUpdate", function (D, F, G, E) { - this.afterAutoUpdate(D, F, G, E) - }); - this.attachEvent("onFullSync", function () { - this.fullSync() - }); - var A = this; - window.setInterval(function () { - A.loadUpdate() - }, C) - }, -/* process updating request answer - if status == collision version is depricated - set flag for autoupdating immidiatly - */ - afterAutoUpdate: function (A, C, D, B) { - if (C == "collision") { - this._need_update = true; - return false - } else { - return true - } - }, -/* callback function for onFillSync event - call update function if it's need - */ - fullSync: function () { - if (this._need_update == true) { - this._need_update = false; - this.loadUpdate() - } - return true - }, -/* sends query to the server and call callback function - */ - getUpdates: function (A, B) { - if (this._update_busy) { - return false - } else { - this._update_busy = true - } - this._loader = this._loader || new dtmlXMLLoaderObject(true); - this._loader.async = true; - this._loader.waitCall = B; - this._loader.loadXML(A) - }, -/* returns xml node value - @param node - xml node - */ - _v: function (A) { - if (A.firstChild) { - return A.firstChild.nodeValue - } - return "" - }, -/* returns values array of xml nodes array - @param arr - array of xml nodes - */ - _a: function (A) { - var C = []; - for (var B = 0; B < A.length; B++) { - C[B] = this._v(A[B]) - } - return C - }, -/* loads updates and processes them - */ - loadUpdate: function () { - var B = this; - var A = this.obj.getUserData(0, "version"); - var C = this.serverProcessor + getUrlSymbol(this.serverProcessor) + ["dhx_user=" + this._user, "dhx_version=" + A].join("&"); - C = C.replace("editing=true&", ""); - this.getUpdates(C, function () { - var F = B._loader.doXPath("//userdata"); - B.obj.setUserData(0, "version", B._v(F[0])); - var D = B._loader.doXPath("//update"); - if (D.length) { - B._silent_mode = true; - for (var G = 0; G < D.length; G++) { - var E = D[G].getAttribute("status"); - var I = D[G].getAttribute("id"); - var H = D[G].getAttribute("parent"); - switch (E) { - case "inserted": - B.callEvent("insertCallback", [D[G], I, H]); - break; - case "updated": - B.callEvent("updateCallback", [D[G], I, H]); - break; - case "deleted": - B.callEvent("deleteCallback", [D[G], I, H]); - break - } - } - B._silent_mode = false - } - B._update_busy = false; - B = null - }) - } -}; -if (window.dhtmlXGridObject) { - dhtmlXGridObject.prototype._init_point_connector = dhtmlXGridObject.prototype._init_point; - dhtmlXGridObject.prototype._init_point = function () { - var A = function (E) { - E = E.replace(/(\?|\&)connector[^\f]*/g, ""); - return E + (E.indexOf("?") != -1 ? "&" : "?") + "connector=true" + (mygrid.hdr.rows.length > 0 ? "&dhx_no_header=1" : "") - }; - var D = function (E) { - return A(E) + (this._connector_sorting || "") + (this._connector_filter || "") - }; - var C = function (F, G, E) { - this._connector_sorting = "&dhx_sort[" + G + "]=" + E; - return D.call(this, F) - }; - var B = function (F, E, H) { - for (var G = 0; G < E.length; G++) { - E[G] = "dhx_filter[" + E[G] + "]=" + encodeURIComponent(H[G]) - } - this._connector_filter = "&" + E.join("&"); - return D.call(this, F) - }; - this.attachEvent("onCollectValues", function (E) { - if (this._con_f_used[E]) { - if (typeof(this._con_f_used[E]) == "object") { - return this._con_f_used[E] - } else { - return false - } - } - return true - }); - this.attachEvent("onDynXLS", function () { - this.xmlFileUrl = D.call(this, this.xmlFileUrl); - return true - }); - this.attachEvent("onBeforeSorting", function (H, G, F) { - if (G == "connector") { - var E = this; - this.clearAndLoad(C.call(this, this.xmlFileUrl, H, F), function () { - E.setSortImgState(true, H, F) - }); - return false - } - return true - }); - this.attachEvent("onFilterStart", function (F, E) { - if (this._con_f_used.length) { - this.clearAndLoad(B.call(this, this.xmlFileUrl, F, E)); - return false - } - return true - }); - this.attachEvent("onXLE", function (F, E, H, G) { - if (!G) { - return - } - }); - if (this._init_point_connector) { - this._init_point_connector() - } - }; - dhtmlXGridObject.prototype._con_f_used = []; - dhtmlXGridObject.prototype._in_header_connector_text_filter = function (B, A) { - if (!this._con_f_used[A]) { - this._con_f_used[A] = 1 - } - return this._in_header_text_filter(B, A) - }; - dhtmlXGridObject.prototype._in_header_connector_select_filter = function (B, A) { - if (!this._con_f_used[A]) { - this._con_f_used[A] = 2 - } - return this._in_header_select_filter(B, A) - }; - dhtmlXGridObject.prototype.load_connector = dhtmlXGridObject.prototype.load; - dhtmlXGridObject.prototype.load = function (B, E, D) { - if (!this._colls_loaded && this.cellType) { - var A = []; - for (var C = 0; C < this.cellType.length; C++) { - if (this.cellType[C].indexOf("co") == 0 || this._con_f_used[C] == 2) { - A.push(C) - } - } - if (A.length) { - arguments[0] += (arguments[0].indexOf("?") != -1 ? "&" : "?") + "connector=true&dhx_colls=" + A.join(",") - } - } - return this.load_connector.apply(this, arguments) - }; - dhtmlXGridObject.prototype._parseHead_connector = dhtmlXGridObject.prototype._parseHead; - dhtmlXGridObject.prototype._parseHead = function (A, L, I) { - this._parseHead_connector.apply(this, arguments); - if (!this._colls_loaded) { - var J = this.xmlLoader.doXPath("./coll_options", arguments[0]); - for (var F = 0; F < J.length; F++) { - var H = J[F].getAttribute("for"); - var K = []; - var C = null; - if (this.cellType[H] == "combo") { - C = this.getColumnCombo(H) - } - if (this.cellType[H].indexOf("co") == 0) { - C = this.getCombo(H) - } - var E = this.xmlLoader.doXPath("./item", J[F]); - for (var D = 0; D < E.length; D++) { - var B = E[D].getAttribute("value"); - if (C) { - var G = E[D].getAttribute("label") || B; - if (C.addOption) { - C.addOption([ - [B, G] - ]) - } else { - C.put(B, G) - } - K[K.length] = G - } else { - K[K.length] = B - } - } - if (this._con_f_used[H * 1]) { - this._con_f_used[H * 1] = K - } - } - this._colls_loaded = true - } - } -} -if (window.dataProcessor) { - dataProcessor.prototype.init_original = dataProcessor.prototype.init; - dataProcessor.prototype.init = function (A) { - this.init_original(A); - A._dataprocessor = this; - this.setTransactionMode("POST", true); - this.serverProcessor += (this.serverProcessor.indexOf("?") != -1 ? "&" : "?") + "editing=true" - } -} -dhtmlxError.catchError("LoadXML", function (B, A, C) { - alert(C[0].responseText) -}); -window.dhtmlXScheduler = window.scheduler = { - version: 2.2 -}; -dhtmlxEventable(scheduler); -scheduler.init = function (C, A, B) { - A = A || (new Date()); - B = B || "week"; - this._obj = (typeof C == "string") ? document.getElementById(C) : C; - this._els = []; - this._scroll = true; - this._quirks = (_isIE && document.compatMode == "BackCompat"); - this._quirks7 = (_isIE && navigator.appVersion.indexOf("MSIE 8") == -1); - this.get_elements(); - this.init_templates(); - this.set_actions(); - dhtmlxEvent(window, "resize", function () { - window.clearTimeout(scheduler._resize_timer); - scheduler._resize_timer = window.setTimeout(function () { - if (scheduler.callEvent("onSchedulerResize", [])) { - scheduler.update_view() - } - }, 100) - }); - this.set_sizes(); - this.setCurrentView(A, B) -}; -scheduler.xy = { - nav_height: 22, - min_event_height: 40, - scale_width: 50, - bar_height: 20, - scroll_width: 18, - scale_height: 20, - month_scale_height: 20, - menu_width: 25, - margin_top: 0, - margin_left: 0, - editor_width: 140 -}; -scheduler.keys = { - edit_save: 13, - edit_cancel: 27 -}; -scheduler.set_sizes = function () { - var B = this._x = this._obj.clientWidth - this.xy.margin_left; - var D = this._y = this._obj.clientHeight - this.xy.margin_top; - var E = this._table_view ? 0 : (this.xy.scale_width + this.xy.scroll_width); - var A = this._table_view ? -1 : this.xy.scale_width; - this.set_xy(this._els.dhx_cal_navline[0], B, this.xy.nav_height, 0, 0); - this.set_xy(this._els.dhx_cal_header[0], B - E, this.xy.scale_height, A, this.xy.nav_height + (this._quirks ? -1 : 1)); - var F = this._els.dhx_cal_navline[0].offsetHeight; - if (F > 0) { - this.xy.nav_height = F - } - var C = this.xy.scale_height + this.xy.nav_height + (this._quirks ? -2 : 0); - this.set_xy(this._els.dhx_cal_data[0], B, D - (C + 2), 0, C + 2) -}; -scheduler.set_xy = function (D, B, C, A, E) { - D.style.width = Math.max(0, B) + "px"; - D.style.height = Math.max(0, C) + "px"; - if (arguments.length > 3) { - D.style.left = A + "px"; - D.style.top = E + "px" - } -}; -scheduler.get_elements = function () { - var D = this._obj.getElementsByTagName("DIV"); - for (var C = 0; C < D.length; C++) { - var A = D[C].className; - if (!this._els[A]) { - this._els[A] = [] - } - this._els[A].push(D[C]); - var B = scheduler.locale.labels[D[C].getAttribute("name") || A]; - if (B) { - D[C].innerHTML = B - } - } -}; -scheduler.set_actions = function () { - for (var A in this._els) { - if (this._click[A]) { - for (var B = 0; B < this._els[A].length; B++) { - this._els[A][B].onclick = scheduler._click[A] - } - } - } - this._obj.onselectstart = function (C) { - return false - }; - this._obj.onmousemove = function (C) { - scheduler._on_mouse_move(C || event) - }; - this._obj.onmousedown = function (C) { - scheduler._on_mouse_down(C || event) - }; - this._obj.onmouseup = function (C) { - scheduler._on_mouse_up(C || event) - }; - this._obj.ondblclick = function (C) { - scheduler._on_dbl_click(C || event) - } -}; -scheduler.select = function (A) { - if (this._table_view || !this.getEvent(A)._timed) { - return - } - if (this._select_id == A) { - return - } - this.editStop(false); - this.unselect(); - this._select_id = A; - this.updateEvent(A) -}; -scheduler.unselect = function (B) { - if (B && B != this._select_id) { - return - } - var A = this._select_id; - this._select_id = null; - if (A) { - this.updateEvent(A) - } -}; -scheduler.getState = function () { - return { - mode: this._mode, - date: this._date, - min_date: this._min_date, - max_date: this._max_date, - editor_id: this._edit_id, - lightbox_id: this._lightbox_id - } -}; -scheduler._click = { - dhx_cal_data: function (C) { - var B = C ? C.target : event.srcElement; - var D = scheduler._locate_event(B); - C = C || event; - if ((D && !scheduler.callEvent("onClick", [D, C])) || scheduler.config.readonly) { - return - } - if (D) { - scheduler.select(D); - var A = B.className; - if (A.indexOf("_icon") != -1) { - scheduler._click.buttons[A.split(" ")[1].replace("icon_", "")](D) - } - } else { - scheduler._close_not_saved() - } - }, - dhx_cal_prev_button: function () { - scheduler._click.dhx_cal_next_button(0, -1) - }, - dhx_cal_next_button: function (B, A) { - scheduler.setCurrentView(scheduler.date.add(scheduler.date[scheduler._mode + "_start"](scheduler._date), (A || 1), scheduler._mode)) - }, - dhx_cal_today_button: function () { - scheduler.setCurrentView(new Date()) - }, - dhx_cal_tab: function () { - var A = this.getAttribute("name").split("_")[0]; - scheduler.setCurrentView(scheduler._date, A) - }, - buttons: { - "delete": function (B) { - var A = scheduler.locale.labels.confirm_deleting; - if (!A || confirm(A)) { - scheduler.deleteEvent(B) - } - }, - edit: function (A) { - scheduler.edit(A) - }, - save: function (A) { - scheduler.editStop(true) - }, - details: function (A) { - scheduler.showLightbox(A) - }, - cancel: function (A) { - scheduler.editStop(false) - } - } -}; -scheduler.addEventNow = function (G, B, D) { - var C = {}; - if (typeof G == "object") { - C = G; - G = null - } - var E = (this.config.event_duration || this.config.time_step) * 60000; - if (!G) { - G = Math.round((new Date()).valueOf() / E) * E - } - var A = new Date(G); - if (!B) { - var F = this.config.first_hour; - if (F > A.getHours()) { - A.setHours(F); - G = A.valueOf() - } - B = G + E - } - C.start_date = C.start_date || A; - C.end_date = C.end_date || new Date(B); - C.text = C.text || this.locale.labels.new_event; - C.id = this._drag_id = this.uid(); - this._drag_mode = "new-size"; - this._loading = true; - this.addEvent(C); - this.callEvent("onEventCreated", [this._drag_id, D]); - this._loading = false; - this._drag_event = {}; - this._on_mouse_up(D) -}; -scheduler._on_dbl_click = function (C, D) { - D = D || (C.target || C.srcElement); - if (this.config.readonly) { - return - } - var A = D.className.split(" ")[0]; - switch (A) { - case "dhx_scale_holder": - case "dhx_scale_holder_now": - case "dhx_month_body": - if (!scheduler.config.dblclick_create) { - break - } - var G = this._mouse_coords(C); - var F = this._min_date.valueOf() + (G.y * this.config.time_step + (this._table_view ? 0 : G.x) * 24 * 60) * 60000; - F = this._correct_shift(F); - this.addEventNow(F, null, C); - break; - case "dhx_body": - case "dhx_cal_event_line": - case "dhx_cal_event_clear": - var E = this._locate_event(D); - if (!this.callEvent("onDblClick", [E, C])) { - return - } - if (this.config.details_on_dblclick || this._table_view || !this.getEvent(E)._timed) { - this.showLightbox(E) - } else { - this.edit(E) - } - break; - case "": - if (D.parentNode) { - return scheduler._on_dbl_click(C, D.parentNode) - } - default: - var B = this["dblclick_" + A]; - if (B) { - B.call(this, C) - } - break - } -}; -scheduler._mouse_coords = function (D) { - var F; - var A = document.body; - var E = document.documentElement; - if (D.pageX || D.pageY) { - F = { - x: D.pageX, - y: D.pageY - } - } else { - F = { - x: D.clientX + (A.scrollLeft || E.scrollLeft || 0) - A.clientLeft, - y: D.clientY + (A.scrollTop || E.scrollTop || 0) - A.clientTop - } - } - F.x -= getAbsoluteLeft(this._obj) + (this._table_view ? 0 : this.xy.scale_width); - F.y -= getAbsoluteTop(this._obj) + this.xy.nav_height + (this._dy_shift || 0) + this.xy.scale_height - this._els.dhx_cal_data[0].scrollTop; - F.ev = D; - var C = this["mouse_" + this._mode]; - if (C) { - return C.call(this, F) - } - if (!this._table_view) { - F.x = Math.max(0, Math.ceil(F.x / this._cols[0]) - 1); - F.y = Math.max(0, Math.ceil(F.y * 60 / (this.config.time_step * this.config.hour_size_px)) - 1) + this.config.first_hour * (60 / this.config.time_step) - } else { - var B = 0; - for (B = 1; B < this._colsS.heights.length; B++) { - if (this._colsS.heights[B] > F.y) { - break - } - } - F.y = (Math.max(0, Math.ceil(F.x / this._cols[0]) - 1) + Math.max(0, B - 1) * 7) * 24 * 60 / this.config.time_step; - F.x = 0 - } - return F -}; -scheduler._close_not_saved = function () { - if (new Date().valueOf() - (scheduler._new_event || 0) > 500 && scheduler._edit_id) { - var A = scheduler.locale.labels.confirm_closing; - if (!A || confirm(A)) { - scheduler.editStop(scheduler.config.positive_closing) - } - } -}; -scheduler._correct_shift = function (B, A) { - return B -= ((new Date(scheduler._min_date)).getTimezoneOffset() - (new Date(B)).getTimezoneOffset()) * 60000 * (A ? -1 : 1) -}; -scheduler._on_mouse_move = function (F) { - if (this._drag_mode) { - var G = this._mouse_coords(F); - if (!this._drag_pos || this._drag_pos.x != G.x || this._drag_pos.y != G.y) { - if (this._edit_id != this._drag_id) { - this._close_not_saved() - } - this._drag_pos = G; - if (this._drag_mode == "create") { - this._close_not_saved(); - this._loading = true; - var B = this._min_date.valueOf() + (G.y * this.config.time_step + (this._table_view ? 0 : G.x) * 24 * 60) * 60000; - B = this._correct_shift(B); - if (!this._drag_start) { - this._drag_start = B; - return - } - var E = B; - if (E == this._drag_start) { - return - } - this._drag_id = this.uid(); - this.addEvent(new Date(this._drag_start), new Date(E), this.locale.labels.new_event, this._drag_id, G.fields); - this.callEvent("onEventCreated", [this._drag_id, F]); - this._loading = false; - this._drag_mode = "new-size" - } - var H = this.getEvent(this._drag_id); - var B, E; - if (this._drag_mode == "move") { - B = this._min_date.valueOf() + (G.y * this.config.time_step + G.x * 24 * 60) * 60000; - if (!G.custom && this._table_view) { - B += this.date.time_part(H.start_date) * 1000 - } - B = this._correct_shift(B); - E = H.end_date.valueOf() - (H.start_date.valueOf() - B) - } else { - B = H.start_date.valueOf(); - if (this._table_view) { - E = this._min_date.valueOf() + G.y * this.config.time_step * 60000 + (G.custom ? 0 : 24 * 60 * 60000) - } else { - E = this.date.date_part(new Date(H.end_date)).valueOf() + G.y * this.config.time_step * 60000; - this._els.dhx_cal_data[0].style.cursor = "s-resize"; - if (this._mode == "week" || this._mode == "day") { - E = this._correct_shift(E) - } - } - if (this._drag_mode == "new-size") { - if (E <= this._drag_start) { - var D = G.shift || ((this._table_view && !G.custom) ? 24 * 60 * 60000 : 0); - B = E - D; - E = this._drag_start + (D || (this.config.time_step * 60000)) - } else { - B = this._drag_start - } - } else { - if (E <= B) { - E = B + this.config.time_step * 60000 - } - } - } - var I = new Date(E - 1); - var C = new Date(B); - if (this._table_view || (I.getDate() == C.getDate() && I.getHours() < this.config.last_hour)) { - H.start_date = C; - H.end_date = new Date(E); - if (this.config.update_render) { - this.update_view() - } else { - this.updateEvent(this._drag_id) - } - } - if (this._table_view) { - this.for_rendered(this._drag_id, function (J) { - J.className += " dhx_in_move" - }) - } - } - } else { - if (scheduler.checkEvent("onMouseMove")) { - var A = this._locate_event(F.target || F.srcElement); - this.callEvent("onMouseMove", [A, F]) - } - } -}; -scheduler._on_mouse_context = function (A, B) { - return this.callEvent("onContextMenu", [this._locate_event(B), A]) -}; -scheduler._on_mouse_down = function (A, B) { - if (this.config.readonly || this._drag_mode) { - return - } - B = B || (A.target || A.srcElement); - if (A.button == 2 || A.ctrlKey) { - return this._on_mouse_context(A, B) - } - switch (B.className.split(" ")[0]) { - case "dhx_cal_event_line": - case "dhx_cal_event_clear": - if (this._table_view) { - this._drag_mode = "move" - } - break; - case "dhx_header": - case "dhx_title": - this._drag_mode = "move"; - break; - case "dhx_footer": - this._drag_mode = "resize"; - break; - case "dhx_scale_holder": - case "dhx_scale_holder_now": - case "dhx_month_body": - case "dhx_matrix_cell": - this._drag_mode = "create"; - break; - case "": - if (B.parentNode) { - return scheduler._on_mouse_down(A, B.parentNode) - } - default: - this._drag_mode = null; - this._drag_id = null - } - if (this._drag_mode) { - var C = this._locate_event(B); - if (!this.config["drag_" + this._drag_mode] || !this.callEvent("onBeforeDrag", [C, this._drag_mode, A])) { - this._drag_mode = this._drag_id = 0 - } else { - this._drag_id = C; - this._drag_event = this._copy_event(this.getEvent(this._drag_id) || {}) - } - } - this._drag_start = null -}; -scheduler._on_mouse_up = function (B) { - if (this._drag_mode && this._drag_id) { - this._els.dhx_cal_data[0].style.cursor = "default"; - var A = this.getEvent(this._drag_id); - if (this._drag_event._dhx_changed || !this._drag_event.start_date || A.start_date.valueOf() != this._drag_event.start_date.valueOf() || A.end_date.valueOf() != this._drag_event.end_date.valueOf()) { - var C = (this._drag_mode == "new-size"); - if (!this.callEvent("onBeforeEventChanged", [A, B, C])) { - if (C) { - this.deleteEvent(A.id, true) - } else { - A.start_date = this._drag_event.start_date; - A.end_date = this._drag_event.end_date; - this.updateEvent(A.id) - } - } else { - if (C && this.config.edit_on_create) { - this.unselect(); - this._new_event = new Date(); - if (this._table_view || this.config.details_on_create) { - this._drag_mode = null; - return this.showLightbox(this._drag_id) - } - this._drag_pos = true; - this._select_id = this._edit_id = this._drag_id - } else { - if (!this._new_event) { - this.callEvent(C ? "onEventAdded" : "onEventChanged", [this._drag_id, this.getEvent(this._drag_id)]) - } - } - } - } - if (this._drag_pos) { - this.render_view_data() - } - } - this._drag_mode = null; - this._drag_pos = null -}; -scheduler.update_view = function () { - this._reset_scale(); - if (this._load_mode && this._load()) { - return this._render_wait = true - } - this.render_view_data() -}; -scheduler.setCurrentView = function (B, E) { - if (!this.callEvent("onBeforeViewChange", [this._mode, this._date, E, B])) { - return - } - if (this[this._mode + "_view"] && E && this._mode != E) { - this[this._mode + "_view"](false) - } - this._close_not_saved(); - this._mode = E || this._mode; - this._date = B; - this._table_view = (this._mode == "month"); - var D = this._els.dhx_cal_tab; - for (var C = 0; C < D.length; C++) { - D[C].className = "dhx_cal_tab" + ((D[C].getAttribute("name") == this._mode + "_tab") ? " active" : "") - } - var A = this[this._mode + "_view"]; - A ? A(true) : this.update_view(); - this.callEvent("onViewChange", [this._mode, this._date]) -}; -scheduler._render_x_header = function (B, D, E, C) { - var A = document.createElement("DIV"); - A.className = "dhx_scale_bar"; - this.set_xy(A, this._cols[B] - 1, this.xy.scale_height - 2, D, 0); - A.innerHTML = this.templates[this._mode + "_scale_date"](E, this._mode); - C.appendChild(A) -}; -scheduler._reset_scale = function () { - if (!this.templates[this._mode + "_date"]) { - return - } - var M = this._els.dhx_cal_header[0]; - var R = this._els.dhx_cal_data[0]; - var P = this.config; - M.innerHTML = ""; - R.scrollTop = 0; - R.innerHTML = ""; - var K = ((P.readonly || (!P.drag_resize)) ? " dhx_resize_denied" : "") + ((P.readonly || (!P.drag_move)) ? " dhx_move_denied" : ""); - if (K) { - R.className = "dhx_cal_data" + K - } - this._cols = []; - this._colsS = { - height: 0 - }; - this._dy_shift = 0; - this.set_sizes(); - var I = parseInt(M.style.width); - var C = 0; - var O, Q, A, N; - Q = this.date[this._mode + "_start"](new Date(this._date.valueOf())); - O = A = this._table_view ? scheduler.date.week_start(Q) : Q; - N = this.date.date_part(new Date()); - var D = scheduler.date.add(Q, 1, this._mode); - var E = 7; - if (!this._table_view) { - var G = this.date["get_" + this._mode + "_end"]; - if (G) { - D = G(Q) - } - E = Math.round((D.valueOf() - Q.valueOf()) / (1000 * 60 * 60 * 24)) - } - this._min_date = O; - this._els.dhx_cal_date[0].innerHTML = this.templates[this._mode + "_date"](Q, D, this._mode); - for (var L = 0; L < E; L++) { - this._cols[L] = Math.floor(I / (E - L)); - this._render_x_header(L, C, O, M); - if (!this._table_view) { - var F = document.createElement("DIV"); - var B = "dhx_scale_holder"; - if (O.valueOf() == N.valueOf()) { - B = "dhx_scale_holder_now" - } - F.className = B + " " + this.templates.week_date_class(O, N); - this.set_xy(F, this._cols[L] - 1, P.hour_size_px * (P.last_hour - P.first_hour), C + this.xy.scale_width + 1, 0); - R.appendChild(F) - } - O = this.date.add(O, 1, "day"); - I -= this._cols[L]; - C += this._cols[L]; - this._colsS[L] = (this._cols[L - 1] || 0) + (this._colsS[L - 1] || (this._table_view ? 0 : this.xy.scale_width + 2)) - } - this._max_date = O; - this._colsS[E] = this._cols[E - 1] + this._colsS[E - 1]; - if (this._table_view) { - this._reset_month_scale(R, Q, A) - } else { - this._reset_hours_scale(R, Q, A); - if (P.multi_day) { - var J = document.createElement("DIV"); - J.className = "dhx_multi_day"; - J.style.visibility = "hidden"; - this.set_xy(J, parseInt(M.style.width), 0, this.xy.scale_width, 0); - R.appendChild(J); - var H = J.cloneNode(true); - H.className = "dhx_multi_day_icon"; - H.style.visibility = "hidden"; - this.set_xy(H, this.xy.scale_width - 1, 0, 0, 0); - R.appendChild(H); - this._els.dhx_multi_day = [J, H] - } - } -}; -scheduler._reset_hours_scale = function (B, A, E) { - var G = document.createElement("DIV"); - G.className = "dhx_scale_holder"; - var C = new Date(1980, 1, 1, this.config.first_hour, 0, 0); - for (var D = this.config.first_hour * 1; D < this.config.last_hour; D++) { - var F = document.createElement("DIV"); - F.className = "dhx_scale_hour"; - F.style.height = this.config.hour_size_px - (this._quirks ? 0 : 1) + "px"; - F.style.width = this.xy.scale_width + "px"; - F.innerHTML = scheduler.templates.hour_scale(C); - G.appendChild(F); - C = this.date.add(C, 1, "hour") - } - B.appendChild(G); - if (this.config.scroll_hour) { - B.scrollTop = this.config.hour_size_px * (this.config.scroll_hour - this.config.first_hour) - } -}; -scheduler._reset_month_scale = function (J, K, I) { - var H = scheduler.date.add(K, 1, "month"); - var A = new Date(); - this.date.date_part(A); - this.date.date_part(I); - var N = Math.ceil((H.valueOf() - I.valueOf()) / (60 * 60 * 24 * 1000 * 7)); - var B = []; - var L = (Math.floor(J.clientHeight / N) - 22); - this._colsS.height = L + 22; - var G = this._colsS.heights = []; - for (var E = 0; E <= 7; E++) { - B[E] = " style='height:" + L + "px; width:" + ((this._cols[E] || 0) - 1) + "px;' " - } - var D = 0; - this._min_date = I; - var F = ""; - for (var E = 0; E < N; E++) { - F += ""; - for (var C = 0; C < 7; C++) { - F += "= H) { - M = "dhx_after" - } else { - if (I.valueOf() == A.valueOf()) { - M = "dhx_now" - } - } - } - F += " class='" + M + " " + this.templates.month_date_class(I, A) + "' "; - F += ">
" + this.templates.month_day(I) + "
"; - I = this.date.add(I, 1, "day") - } - F += "
"; - G[E] = D; - D += this._colsS.height - } - F += "
"; - this._max_date = I; - J.innerHTML = F; - return I -}; -scheduler.getLabel = function (E, D) { - var F = this.config.lightbox.sections; - for (var C = 0; C < F.length; C++) { - if (F[C].map_to == E) { - var B = F[C].options; - for (var A = 0; A < B.length; A++) { - if (B[A].key == D) { - return B[A].label - } - } - } - } - return "" -}; -scheduler.date = { - date_part: function (A) { - A.setHours(0); - A.setMinutes(0); - A.setSeconds(0); - A.setMilliseconds(0); - return A - }, - time_part: function (A) { - return (A.valueOf() / 1000 - A.getTimezoneOffset() * 60) % 86400 - }, - week_start: function (B) { - var A = B.getDay(); - if (scheduler.config.start_on_monday) { - if (A == 0) { - A = 6 - } else { - A-- - } - } - return this.date_part(this.add(B, -1 * A, "day")) - }, - month_start: function (A) { - A.setDate(1); - return this.date_part(A) - }, - year_start: function (A) { - A.setMonth(0); - return this.month_start(A) - }, - day_start: function (A) { - return this.date_part(A) - }, - add: function (B, C, D) { - var A = new Date(B.valueOf()); - switch (D) { - case "day": - A.setDate(A.getDate() + C); - break; - case "week": - A.setDate(A.getDate() + 7 * C); - break; - case "month": - A.setMonth(A.getMonth() + C); - break; - case "year": - A.setYear(A.getFullYear() + C); - break; - case "hour": - A.setHours(A.getHours() + C); - break; - case "minute": - A.setMinutes(A.getMinutes() + C); - break; - default: - return scheduler.date["add_" + D](B, C, D) - } - return A - }, - to_fixed: function (A) { - if (A < 10) { - return "0" + A - } - return A - }, - copy: function (A) { - return new Date(A.valueOf()) - }, - date_to_str: function (B, A) { - B = B.replace(/%[a-zA-Z]/g, function (C) { - switch (C) { - case "%d": - return '"+scheduler.date.to_fixed(date.getDate())+"'; - case "%m": - return '"+scheduler.date.to_fixed((date.getMonth()+1))+"'; - case "%j": - return '"+date.getDate()+"'; - case "%n": - return '"+(date.getMonth()+1)+"'; - case "%y": - return '"+scheduler.date.to_fixed(date.getFullYear()%100)+"'; - case "%Y": - return '"+date.getFullYear()+"'; - case "%D": - return '"+scheduler.locale.date.day_short[date.getDay()]+"'; - case "%l": - return '"+scheduler.locale.date.day_full[date.getDay()]+"'; - case "%M": - return '"+scheduler.locale.date.month_short[date.getMonth()]+"'; - case "%F": - return '"+scheduler.locale.date.month_full[date.getMonth()]+"'; - case "%h": - return '"+scheduler.date.to_fixed((date.getHours()+11)%12+1)+"'; - case "%g": - return '"+((date.getHours()+11)%12+1)+"'; - case "%G": - return '"+date.getHours()+"'; - case "%H": - return '"+scheduler.date.to_fixed(date.getHours())+"'; - case "%i": - return '"+scheduler.date.to_fixed(date.getMinutes())+"'; - case "%a": - return '"+(date.getHours()>11?"pm":"am")+"'; - case "%A": - return '"+(date.getHours()>11?"PM":"AM")+"'; - case "%s": - return '"+scheduler.date.to_fixed(date.getSeconds())+"'; - case "%W": - return '"+scheduler.date.to_fixed(scheduler.date.getISOWeek(date))+"'; - default: - return C - } - }); - if (A) { - B = B.replace(/date\.get/g, "date.getUTC") - } - return new Function("date", 'return "' + B + '";') - }, - str_to_date: function (E, C) { - var F = "var temp=date.split(/[^0-9a-zA-Z]+/g);"; - var A = E.match(/%[a-zA-Z]/g); - for (var B = 0; B < A.length; B++) { - switch (A[B]) { - case "%j": - case "%d": - F += "set[2]=temp[" + B + "]||1;"; - break; - case "%n": - case "%m": - F += "set[1]=(temp[" + B + "]||1)-1;"; - break; - case "%y": - F += "set[0]=temp[" + B + "]*1+(temp[" + B + "]>50?1900:2000);"; - break; - case "%g": - case "%G": - case "%h": - case "%H": - F += "set[3]=temp[" + B + "]||0;"; - break; - case "%i": - F += "set[4]=temp[" + B + "]||0;"; - break; - case "%Y": - F += "set[0]=temp[" + B + "]||0;"; - break; - case "%a": - case "%A": - F += "set[3]=set[3]%12+((temp[" + B + "]||'').toLowerCase()=='am'?0:12);"; - break; - case "%s": - F += "set[5]=temp[" + B + "]||0;"; - break - } - } - var D = "set[0],set[1],set[2],set[3],set[4],set[5]"; - if (C) { - D = " Date.UTC(" + D + ")" - } - return new Function("date", "var set=[0,0,1,0,0,0]; " + F + " return new Date(" + D + ");") - }, - getISOWeek: function (C) { - if (!C) { - return false - } - var B = C.getDay(); - if (B == 0) { - B = 7 - } - var D = new Date(C.valueOf()); - D.setDate(C.getDate() + (4 - B)); - var A = D.getFullYear(); - var F = Math.floor((D.getTime() - new Date(A, 0, 1).getTime()) / 86400000); - var E = 1 + Math.floor(F / 7); - return E - }, - getUTCISOWeek: function (A) { - return this.getISOWeek(A) - } -}; -scheduler.locale = { - date: { - month_full: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], - month_short: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], - day_full: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], - day_short: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"] - }, - labels: { - dhx_cal_today_button: "Today", - day_tab: "Day", - week_tab: "Week", - month_tab: "Month", - new_event: "New event", - icon_save: "Save", - icon_cancel: "Cancel", - icon_details: "Details", - icon_edit: "Edit", - icon_delete: "Delete", - confirm_closing: "", - confirm_deleting: "Event will be deleted permanently, are you sure?", - section_description: "Description", - section_time: "Time period", - full_day: "Full day", - confirm_recurring: "Do you want to edit the whole set of repeated events?", - section_recurring: "Repeat event", - button_recurring: "Disabled", - button_recurring_open: "Enabled", - agenda_tab: "Agenda", - date: "Date", - description: "Description", - year_tab: "Year" - } -}; -scheduler.config = { - default_date: "%j %M %Y", - month_date: "%F %Y", - load_date: "%Y-%m-%d", - week_date: "%l", - day_date: "%D, %F %j", - hour_date: "%H:%i", - month_day: "%d", - xml_date: "%m/%d/%Y %H:%i", - api_date: "%d-%m-%Y %H:%i", - hour_size_px: 42, - time_step: 5, - start_on_monday: 1, - first_hour: 0, - last_hour: 24, - readonly: false, - drag_resize: 1, - drag_move: 1, - drag_create: 1, - dblclick_create: 1, - edit_on_create: 1, - details_on_create: 0, - click_form_details: 0, - server_utc: false, - positive_closing: false, - icons_edit: ["icon_save", "icon_cancel"], - icons_select: ["icon_details", "icon_edit", "icon_delete"], - lightbox: { - sections: [{ - name: "description", - height: 200, - map_to: "text", - type: "textarea", - focus: true - }, { - name: "time", - height: 72, - type: "time", - map_to: "auto" - }] - } -}; -scheduler.templates = {}; -scheduler.init_templates = function () { - var B = scheduler.date.date_to_str; - var C = scheduler.config; - var A = function (E, D) { - for (var F in D) { - if (!E[F]) { - E[F] = D[F] - } - } - }; - A(scheduler.templates, { - day_date: B(C.default_date), - month_date: B(C.month_date), - week_date: function (E, D) { - return scheduler.templates.day_date(E) + " – " + scheduler.templates.day_date(scheduler.date.add(D, -1, "day")) - }, - day_scale_date: B(C.default_date), - month_scale_date: B(C.week_date), - week_scale_date: B(C.day_date), - hour_scale: B(C.hour_date), - time_picker: B(C.hour_date), - event_date: B(C.hour_date), - month_day: B(C.month_day), - xml_date: scheduler.date.str_to_date(C.xml_date, C.server_utc), - load_format: B(C.load_date, C.server_utc), - xml_format: B(C.xml_date, C.server_utc), - api_date: scheduler.date.str_to_date(C.api_date), - event_header: function (F, D, E) { - return scheduler.templates.event_date(F) + " - " + scheduler.templates.event_date(D) - }, - event_text: function (F, D, E) { - return E.text - }, - event_class: function (F, D, E) { - return "" - }, - month_date_class: function (D) { - return "" - }, - week_date_class: function (D) { - return "" - }, - event_bar_date: function (F, D, E) { - return scheduler.templates.event_date(F) + " " - }, - event_bar_text: function (F, D, E) { - return E.text - } - }); - this.callEvent("onTemplatesReady", []) -}; -scheduler.uid = function () { - if (!this._seed) { - this._seed = (new Date).valueOf() - } - return this._seed++ -}; -scheduler._events = {}; -scheduler.clearAll = function () { - this._events = {}; - this._loaded = {}; - this.clear_view() -}; -scheduler.addEvent = function (A, G, D, F, B) { - var C = A; - if (arguments.length != 1) { - C = B || {}; - C.start_date = A; - C.end_date = G; - C.text = D; - C.id = F - } - C.id = C.id || scheduler.uid(); - C.text = C.text || ""; - if (typeof C.start_date == "string") { - C.start_date = this.templates.api_date(C.start_date) - } - if (typeof C.end_date == "string") { - C.end_date = this.templates.api_date(C.end_date) - } - C._timed = this.is_one_day_event(C); - var E = !this._events[C.id]; - this._events[C.id] = C; - this.event_updated(C); - if (!this._loading) { - this.callEvent(E ? "onEventAdded" : "onEventChanged", [C.id, C]) - } -}; -scheduler.deleteEvent = function (C, A) { - var B = this._events[C]; - if (!A && !this.callEvent("onBeforeEventDelete", [C, B])) { - return - } - if (B) { - delete this._events[C]; - this.unselect(C); - this.event_updated(B) - } -}; -scheduler.getEvent = function (A) { - return this._events[A] -}; -scheduler.setEvent = function (B, A) { - this._events[B] = A -}; -scheduler.for_rendered = function (C, B) { - for (var A = this._rendered.length - 1; A >= 0; A--) { - if (this._rendered[A].getAttribute("event_id") == C) { - B(this._rendered[A], A) - } - } -}; -scheduler.changeEventId = function (C, A) { - if (C == A) { - return - } - var B = this._events[C]; - if (B) { - B.id = A; - this._events[A] = B; - delete this._events[C] - } - this.for_rendered(C, function (D) { - D.setAttribute("event_id", A) - }); - if (this._select_id == C) { - this._select_id = A - } - if (this._edit_id == C) { - this._edit_id = A - } - this.callEvent("onEventIdChange", [C, A]) -}; -(function () { - var A = ["text", "Text", "start_date", "StartDate", "end_date", "EndDate"]; - var C = function (E) { - return function (F) { - return (scheduler.getEvent(F))[E] - } - }; - var D = function (E) { - return function (H, G) { - var F = scheduler.getEvent(H); - F[E] = G; - F._changed = true; - F._timed = this.is_one_day_event(F); - scheduler.event_updated(F, true) - } - }; - for (var B = 0; B < A.length; B += 2) { - scheduler["getEvent" + A[B + 1]] = C(A[B]); - scheduler["setEvent" + A[B + 1]] = D(A[B]) - } -})(); -scheduler.event_updated = function (A, B) { - if (this.is_visible_events(A)) { - this.render_view_data() - } else { - this.clear_event(A.id) - } -}; -scheduler.is_visible_events = function (A) { - if (A.start_date < this._max_date && this._min_date < A.end_date) { - return true - } - return false -}; -scheduler.is_one_day_event = function (A) { - var B = A.end_date.getDate() - A.start_date.getDate(); - if (!B) { - return A.start_date.getMonth() == A.end_date.getMonth() && A.start_date.getFullYear() == A.end_date.getFullYear() - } else { - if (B < 0) { - B = Math.ceil((A.end_date.valueOf() - A.start_date.valueOf()) / (24 * 60 * 60 * 1000)) - } - return (B == 1 && !A.end_date.getHours() && !A.end_date.getMinutes() && (A.start_date.getHours() || A.start_date.getMinutes())) - } -}; -scheduler.get_visible_events = function () { - var A = []; - var B = this["filter_" + this._mode]; - for (var C in this._events) { - if (this.is_visible_events(this._events[C])) { - if (this._table_view || this.config.multi_day || this._events[C]._timed) { - if (!B || B(C, this._events[C])) { - A.push(this._events[C]) - } - } - } - } - return A -}; -scheduler.render_view_data = function () { - if (this._not_render) { - this._render_wait = true; - return - } - this._render_wait = false; - this.clear_view(); - var B = this.get_visible_events(); - if (this.config.multi_day && !this._table_view) { - var D = []; - var A = []; - for (var C = 0; C < B.length; C++) { - if (B[C]._timed) { - D.push(B[C]) - } else { - A.push(B[C]) - } - } - this._table_view = true; - this.render_data(A); - this._table_view = false; - this.render_data(D) - } else { - this.render_data(B) - } -}; -scheduler.render_data = function (A, C) { - A = this._pre_render_events(A, C); - for (var B = 0; B < A.length; B++) { - if (this._table_view) { - this.render_event_bar(A[B]) - } else { - this.render_event(A[B]) - } - } -}; -scheduler._pre_render_events = function (M, A) { - var G = this.xy.bar_height; - var D = this._colsS.heights; - var F = this._colsS.heights = [0, 0, 0, 0, 0, 0, 0]; - if (!this._table_view) { - M = this._pre_render_events_line(M, A) - } else { - M = this._pre_render_events_table(M, A) - } - if (this._table_view) { - if (A) { - this._colsS.heights = D - } else { - var B = this._els.dhx_cal_data[0].firstChild; - if (B.rows) { - for (var E = 0; E < B.rows.length; E++) { - F[E]++; - if ((F[E]) * G > this._colsS.height - 22) { - var N = B.rows[E].cells; - for (var C = 0; C < N.length; C++) { - N[C].childNodes[1].style.height = F[E] * G + "px" - } - F[E] = (F[E - 1] || 0) + N[0].offsetHeight - } - F[E] = (F[E - 1] || 0) + B.rows[E].cells[0].offsetHeight - } - F.unshift(0); - if (B.parentNode.offsetHeight < B.parentNode.scrollHeight && !B._h_fix) { - for (var E = 0; E < B.rows.length; E++) { - var L = B.rows[E].cells[6].childNodes[0]; - var J = L.offsetWidth - scheduler.xy.scroll_width + "px"; - L.style.width = J; - L.nextSibling.style.width = J - } - B._h_fix = true - } - } else { - if (!M.length && this._els.dhx_multi_day[0].style.visibility == "visible") { - F[0] = -1 - } - if (M.length || F[0] == -1) { - var H = B.parentNode.childNodes; - var I = (F[0] + 1) * G + "px"; - for (var E = 0; E < H.length; E++) { - if (this._colsS[E]) { - H[E].style.top = I - } - } - var K = this._els.dhx_multi_day[0]; - K.style.top = "0px"; - K.style.height = I; - K.style.visibility = (F[0] == -1 ? "hidden" : "visible"); - K = this._els.dhx_multi_day[1]; - K.style.height = I; - K.style.visibility = (F[0] == -1 ? "hidden" : "visible"); - K.className = F[0] ? "dhx_multi_day_icon" : "dhx_multi_day_icon_small"; - this._dy_shift = (F[0] + 1) * G; - F[0] = 0 - } - } - } - } - return M -}; -scheduler._get_event_sday = function (A) { - return Math.floor((A.start_date.valueOf() - this._min_date.valueOf()) / (24 * 60 * 60 * 1000)) -}; -scheduler._pre_render_events_line = function (H, A) { - H.sort(function (K, J) { - return K.start_date > J.start_date ? 1 : -1 - }); - var G = []; - var I = []; - for (var C = 0; C < H.length; C++) { - var F = H[C]; - var D = F.start_date.getHours(); - var B = F.end_date.getHours(); - F._sday = this._get_event_sday(F); - if (!G[F._sday]) { - G[F._sday] = [] - } - if (!A) { - F._inner = false; - var E = G[F._sday]; - while (E.length && E[E.length - 1].end_date <= F.start_date) { - E.splice(E.length - 1, 1) - } - if (E.length) { - E[E.length - 1]._inner = true - } - F._sorder = E.length; - E.push(F); - if (E.length > (E.max_count || 0)) { - E.max_count = E.length - } - } - if (D < this.config.first_hour || B >= this.config.last_hour) { - I.push(F); - H[C] = F = this._copy_event(F); - if (D < this.config.first_hour) { - F.start_date.setHours(this.config.first_hour); - F.start_date.setMinutes(0) - } - if (B >= this.config.last_hour) { - F.end_date.setMinutes(0); - F.end_date.setHours(this.config.last_hour) - } - if (F.start_date > F.end_date || D == this.config.last_hour) { - H.splice(C, 1); - C--; - continue - } - } - } - if (!A) { - for (var C = 0; C < H.length; C++) { - H[C]._count = G[H[C]._sday].max_count - } - for (var C = 0; C < I.length; C++) { - I[C]._count = G[I[C]._sday].max_count - } - } - return H -}; -scheduler._time_order = function (A) { - A.sort(function (C, B) { - if (C.start_date.valueOf() == B.start_date.valueOf()) { - if (C._timed && !B._timed) { - return 1 - } - if (!C._timed && B._timed) { - return -1 - } - return 0 - } - return C.start_date > B.start_date ? 1 : -1 - }) -}; -scheduler._pre_render_events_table = function (P, C) { - this._time_order(P); - var F = []; - var A = [ - [], - [], - [], - [], - [], - [], - [] - ]; - var N = this._colsS.heights; - var I; - var M = this._cols.length; - for (var G = 0; G < P.length; G++) { - var L = P[G]; - var J = (I || L.start_date); - var H = L.end_date; - if (J < this._min_date) { - J = this._min_date - } - if (H > this._max_date) { - H = this._max_date - } - var E = this.locate_holder_day(J, false, L); - L._sday = E % M; - var O = this.locate_holder_day(H, true, L) || M; - L._eday = (O % M) || M; - L._length = O - E; - L._sweek = Math.floor((this._correct_shift(J.valueOf(), 1) - this._min_date.valueOf()) / (60 * 60 * 1000 * 24 * M)); - var K = A[L._sweek]; - var D; - for (D = 0; D < K.length; D++) { - if (K[D]._eday <= L._sday) { - break - } - } - L._sorder = D; - if (L._sday + L._length <= M) { - I = null; - F.push(L); - K[D] = L; - N[L._sweek] = K.length - 1 - } else { - var B = this._copy_event(L); - B._length = M - L._sday; - B._eday = M; - B._sday = L._sday; - B._sweek = L._sweek; - B._sorder = L._sorder; - B.end_date = this.date.add(J, B._length, "day"); - F.push(B); - K[D] = B; - I = B.end_date; - N[L._sweek] = K.length - 1; - G--; - continue - } - } - return F -}; -scheduler._copy_dummy = function () { - this.start_date = new Date(this.start_date); - this.end_date = new Date(this.end_date) -}; -scheduler._copy_event = function (A) { - this._copy_dummy.prototype = A; - return new this._copy_dummy() -}; -scheduler._rendered = []; -scheduler.clear_view = function () { - for (var A = 0; A < this._rendered.length; A++) { - var B = this._rendered[A]; - if (B.parentNode) { - B.parentNode.removeChild(B) - } - } - this._rendered = [] -}; -scheduler.updateEvent = function (B) { - var A = this.getEvent(B); - this.clear_event(B); - if (A && this.is_visible_events(A)) { - this.render_data([A], true) - } -}; -scheduler.clear_event = function (A) { - this.for_rendered(A, function (C, B) { - if (C.parentNode) { - C.parentNode.removeChild(C) - } - scheduler._rendered.splice(B, 1) - }) -}; -scheduler.render_event = function (L) { - var D = scheduler.xy.menu_width; - if (L._sday < 0) { - return - } - var M = scheduler.locate_holder(L._sday); - if (!M) { - return - } - var F = L.start_date.getHours() * 60 + L.start_date.getMinutes(); - var C = (L.end_date.getHours() * 60 + L.end_date.getMinutes()) || (scheduler.config.last_hour * 60); - var K = (Math.round((F * 60 * 1000 - this.config.first_hour * 60 * 60 * 1000) * this.config.hour_size_px / (60 * 60 * 1000))) % (this.config.hour_size_px * 24) + 1; - var O = Math.max(scheduler.xy.min_event_height, (C - F) * this.config.hour_size_px / 60) + 1; - var B = Math.floor((M.clientWidth - D) / L._count); - var E = L._sorder * B + 1; - if (!L._inner) { - B = B * (L._count - L._sorder) - } - var J = this._render_v_bar(L.id, D + E, K, B, O, L._text_style, scheduler.templates.event_header(L.start_date, L.end_date, L), scheduler.templates.event_text(L.start_date, L.end_date, L)); - this._rendered.push(J); - M.appendChild(J); - E = E + parseInt(M.style.left, 10) + D; - K += this._dy_shift; - if (this._edit_id == L.id) { - J.style.zIndex = 1; - B = Math.max(B - 4, scheduler.xy.editor_width); - var J = document.createElement("DIV"); - J.setAttribute("event_id", L.id); - this.set_xy(J, B, O - 20, E, K + 14); - J.className = "dhx_cal_editor"; - var A = document.createElement("DIV"); - this.set_xy(A, B - 6, O - 26); - A.style.cssText += ";margin:2px 2px 2px 2px;overflow:hidden;"; - J.appendChild(A); - this._els.dhx_cal_data[0].appendChild(J); - this._rendered.push(J); - A.innerHTML = ""; - if (this._quirks7) { - A.firstChild.style.height = O - 12 + "px" - } - this._editor = A.firstChild; - this._editor.onkeypress = function (Q) { - if ((Q || event).shiftKey) { - return true - } - var P = (Q || event).keyCode; - if (P == scheduler.keys.edit_save) { - scheduler.editStop(true) - } - if (P == scheduler.keys.edit_cancel) { - scheduler.editStop(false) - } - }; - this._editor.onselectstart = function (P) { - return (P || event).cancelBubble = true - }; - A.firstChild.focus(); - this._els.dhx_cal_data[0].scrollLeft = 0; - A.firstChild.select() - } - if (this._select_id == L.id) { - var N = this.config["icons_" + ((this._edit_id == L.id) ? "edit" : "select")]; - var I = ""; - for (var H = 0; H < N.length; H++) { - I += "
" - } - var G = this._render_v_bar(L.id, E - D + 1, K, D, N.length * 20 + 26, "", "
", I, true); - G.style.left = E - D + 1; - this._els.dhx_cal_data[0].appendChild(G); - this._rendered.push(G) - } -}; -scheduler._render_v_bar = function (D, M, L, N, H, B, F, E, A) { - var J = document.createElement("DIV"); - var K = this.getEvent(D); - var I = "dhx_cal_event"; - var C = scheduler.templates.event_class(K.start_date, K.end_date, K); - if (C) { - I = I + " " + C - } - var G = jQuery('
', - { - 'event_id': D, - 'class': I - }).css({ - 'position':'absolute', - 'top': L, - 'left': M, - 'width': (N - 4), - 'height': H - }).append( - jQuery('
', { - 'class': 'dhx_header', - 'width': (N - 6) - }), - jQuery('
', { - 'class': 'dhx_title' - }).html(F), - jQuery('
', { - 'class': 'dhx_body', - 'width': (N - (this._quirks ? 4 : 14)), - 'height': (H - (this._quirks ? 20 : 30)) - - }).html(E), - jQuery('
', { - 'class': 'dhx_footer', - 'width': (N - 8), - 'margin-top': A ? 1 : '' - }) - ) - if(K.color) { - jQuery('div', G).css({'background': K.color, 'color': '#FFFFFF'}) - } - jQuery(J).html(G); - return J.firstChild -}; -scheduler.locate_holder = function (A) { - if (this._mode == "day") { - return this._els.dhx_cal_data[0].firstChild - } - return this._els.dhx_cal_data[0].childNodes[A] -}; -scheduler.locate_holder_day = function (B, C) { - var A = Math.floor((this._correct_shift(B, 1) - this._min_date) / (60 * 60 * 24 * 1000)); - if (C && this.date.time_part(B)) { - A++ - } - return A -}; -scheduler.render_event_bar = function (H) { - var J = this._els.dhx_cal_data[0]; - var I = this._colsS[H._sday]; - var A = this._colsS[H._eday]; - if (A == I) { - A = this._colsS[H._eday + 1] - } - var D = this.xy.bar_height; - var G = this._colsS.heights[H._sweek] + (this._colsS.height ? (this.xy.month_scale_height + 2) : 2) + H._sorder * D; - var F = document.createElement("DIV"); - var E = H._timed ? "dhx_cal_event_clear" : "dhx_cal_event_line"; - var B = scheduler.templates.event_class(H.start_date, H.end_date, H); - if (B) { - E = E + " " + B - } - - var c_innerHTML = " "; - var C = jQuery('
', - { - 'event_id': H.id, - 'class': E - }).css({ - 'position': 'absolute', - 'top': G, - 'left': I, - 'width': (A - I - 15) - }) - if (H._timed) { - c_innerHTML = scheduler.templates.event_bar_date(H.start_date, H.end_date, H) - } - - C.html(c_innerHTML + scheduler.templates.event_bar_text(H.start_date, H.end_date, H)) - jQuery(F).html(C); - - if (H.color) { - if (H._length) { - C.css({'background-color':H.color, 'color': '#FFFFFF'}); - } else { - C.css('color',H.color);; - } - } - - if(H.title) { - C.attr('title',H.title); - } - - this._rendered.push(F.firstChild); - J.appendChild(F.firstChild) -}; - -scheduler._locate_event = function (A) { - var B = null; - while (A && !B && A.getAttribute) { - B = A.getAttribute("event_id"); - A = A.parentNode - } - return B -}; -scheduler.edit = function (A) { - if (this._edit_id == A) { - return - } - this.editStop(false, A); - this._edit_id = A; - this.updateEvent(A) -}; -scheduler.editStop = function (B, C) { - if (C && this._edit_id == C) { - return - } - var A = this.getEvent(this._edit_id); - if (A) { - if (B) { - A.text = this._editor.value - } - this._edit_id = null; - this._editor = null; - this.updateEvent(A.id); - this._edit_stop_event(A, B) - } -}; -scheduler._edit_stop_event = function (A, B) { - if (this._new_event) { - if (!B) { - this.deleteEvent(A.id, true) - } else { - this.callEvent("onEventAdded", [A.id, A]) - } - this._new_event = null - } else { - if (B) { - this.callEvent("onEventChanged", [A.id, A]) - } - } -}; -scheduler.getEvents = function (E, D) { - var A = []; - for (var B in this._events) { - var C = this._events[B]; - if (C && C.start_date < D && C.end_date > E) { - A.push(C) - } - } - return A -}; -scheduler._loaded = {}; -scheduler._load = function (C, F) { - C = C || this._load_url; - C += (C.indexOf("?") == -1 ? "?" : "&") + "timeshift=" + (new Date()).getTimezoneOffset(); - if (this.config.prevent_cache) { - C += "&uid=" + this.uid() - } - var E; - F = F || this._date; - if (this._load_mode) { - var B = this.templates.load_format; - F = this.date[this._load_mode + "_start"](new Date(F.valueOf())); - while (F > this._min_date) { - F = this.date.add(F, -1, this._load_mode) - } - E = F; - var D = true; - while (E < this._max_date) { - E = this.date.add(E, 1, this._load_mode); - if (this._loaded[B(F)] && D) { - F = this.date.add(F, 1, this._load_mode) - } else { - D = false - } - } - var A = E; - do { - E = A; - A = this.date.add(E, -1, this._load_mode) - } while (A > F && this._loaded[B(A)]); - if (E <= F) { - return false - } - dhtmlxAjax.get(C + "&from=" + B(F) + "&to=" + B(E), function (G) { - scheduler.on_load(G) - }); - while (F < E) { - this._loaded[B(F)] = true; - F = this.date.add(F, 1, this._load_mode) - } - } else { - dhtmlxAjax.get(C, function (G) { - scheduler.on_load(G) - }) - } - this.callEvent("onXLS", []); - return true -}; -scheduler.on_load = function (A) { - this._loading = true; - if (this._process) { - var B = this[this._process].parse(A.xmlDoc.responseText) - } else { - var B = this._magic_parser(A) - } - this._not_render = true; - for (var C = 0; C < B.length; C++) { - if (!this.callEvent("onEventLoading", [B[C]])) { - continue - } - this.addEvent(B[C]) - } - this._not_render = false; - if (this._render_wait) { - this.render_view_data() - } - if (this._after_call) { - this._after_call() - } - this._after_call = null; - this._loading = false; - this.callEvent("onXLE", []) -}; -scheduler.json = {}; -scheduler.json.parse = function (data) { - if (typeof data == "string") { - eval("scheduler._temp = " + data + ";"); - data = scheduler._temp - } - var evs = []; - for (var i = 0; i < data.length; i++) { - data[i].start_date = scheduler.templates.xml_date(data[i].start_date); - data[i].end_date = scheduler.templates.xml_date(data[i].end_date); - evs.push(data[i]) - } - return evs -}; -scheduler.parse = function (B, A) { - this._process = A; - this.on_load({ - xmlDoc: { - responseText: B - } - }) -}; -scheduler.load = function (A, B) { - if (typeof B == "string") { - this._process = B; - B = arguments[2] - } - this._load_url = A; - this._after_call = B; - this._load(A, this._date) -}; -scheduler.setLoadMode = function (A) { - if (A == "all") { - A = "" - } - this._load_mode = A -}; -scheduler.refresh = function (A) { - alert("not implemented") -}; -scheduler.serverList = function (A) { - return this.serverList[A] = (this.serverList[A] || []) -}; -scheduler._userdata = {}; -scheduler._magic_parser = function (I) { - if (!I.getXMLTopNode) { - var B = I.xmlDoc.responseText; - I = new dtmlXMLLoaderObject(function () {}); - I.loadXMLString(B) - } - var F = I.getXMLTopNode("data"); - if (F.tagName != "data") { - return [] - } - var A = I.doXPath("//coll_options"); - for (var E = 0; E < A.length; E++) { - var H = A[E].getAttribute("for"); - var G = this.serverList[H]; - if (!G) { - continue - } - G.splice(0, G.length); - var K = I.doXPath(".//item", A[E]); - for (var C = 0; C < K.length; C++) { - G.push({ - key: K[C].getAttribute("value"), - label: K[C].getAttribute("label") - }) - } - } - if (A.length) { - scheduler.callEvent("onOptionsLoad", []) - } - var L = I.doXPath("//userdata"); - for (var E = 0; E < L.length; E++) { - var D = this.xmlNodeToJSON(L[E]); - this._userdata[D.name] = D.text - } - var J = []; - var F = I.doXPath("//event"); - for (var E = 0; E < F.length; E++) { - J[E] = this.xmlNodeToJSON(F[E]); - J[E].text = J[E].text || J[E]._tagvalue; - J[E].start_date = this.templates.xml_date(J[E].start_date); - J[E].end_date = this.templates.xml_date(J[E].end_date) - } - return J -}; -scheduler.xmlNodeToJSON = function (C) { - var B = {}; - for (var A = 0; A < C.attributes.length; A++) { - B[C.attributes[A].name] = C.attributes[A].value - } - for (var A = 0; A < C.childNodes.length; A++) { - var D = C.childNodes[A]; - if (D.nodeType == 1) { - B[D.tagName] = D.firstChild ? D.firstChild.nodeValue : "" - } - } - if (!B.text) { - B.text = C.firstChild ? C.firstChild.nodeValue : "" - } - return B -}; -scheduler.attachEvent("onXLS", function () { - if (this.config.show_loading === true) { - var A; - A = this.config.show_loading = document.createElement("DIV"); - A.className = "dhx_loading"; - A.style.left = Math.round((this._x - 128) / 2) + "px"; - A.style.top = Math.round((this._y - 15) / 2) + "px"; - this._obj.appendChild(A) - } -}); -scheduler.attachEvent("onXLE", function () { - var A; - if (A = this.config.show_loading) { - if (typeof A == "object") { - this._obj.removeChild(A); - this.config.show_loading = true - } - } -}); -scheduler.ical = { - parse: function (H) { - var E = H.match(RegExp(this.c_start + "[^\f]*" + this.c_end, "")); - if (!E.length) { - return - } - E[0] = E[0].replace(/[\r\n]+(?=[a-z \t])/g, " "); - E[0] = E[0].replace(/\;[^:\r\n]*/g, ""); - var B = []; - var D; - var C = RegExp("(?:" + this.e_start + ")([^\f]*?)(?:" + this.e_end + ")", "g"); - while (D = C.exec(E)) { - var F = {}; - var G; - var A = /[^\r\n]+[\r\n]+/g; - while (G = A.exec(D[1])) { - this.parse_param(G.toString(), F) - } - if (F.uid && !F.id) { - F.id = F.uid - } - B.push(F) - } - return B - }, - parse_param: function (E, C) { - var D = E.indexOf(":"); - if (D == -1) { - return - } - var A = E.substr(0, D).toLowerCase(); - var B = E.substr(D + 1).replace(/\\\,/g, ",").replace(/[\r\n]+$/, ""); - if (A == "summary") { - A = "text" - } else { - if (A == "dtstart") { - A = "start_date"; - B = this.parse_date(B, 0, 0) - } else { - if (A == "dtend") { - A = "end_date"; - if (C.start_date && C.start_date.getHours() == 0) { - B = this.parse_date(B, 24, 0) - } else { - B = this.parse_date(B, 23, 59) - } - } - } - } - C[A] = B - }, - parse_date: function (G, F, D) { - var E = G.split("T"); - if (E[1]) { - F = E[1].substr(0, 2); - D = E[1].substr(2, 2) - } - var C = E[0].substr(0, 4); - var B = parseInt(E[0].substr(4, 2), 10) - 1; - var A = E[0].substr(6, 2); - if (scheduler.config.server_utc && !E[1]) { - return new Date(Date.UTC(C, B, A, F, D)) - } - return new Date(C, B, A, F, D) - }, - c_start: "BEGIN:VCALENDAR", - e_start: "BEGIN:VEVENT", - e_end: "END:VEVENT", - c_end: "END:VCALENDAR" -}; -scheduler.form_blocks = { - textarea: { - render: function (B) { - var A = (B.height || "130") + "px"; - return "
" - }, - set_value: function (B, C, A) { - B.firstChild.value = C || "" - }, - get_value: function (B, A) { - return B.firstChild.value - }, - focus: function (B) { - var A = B.firstChild; - A.select(); - A.focus() - } - }, - select: { - render: function (D) { - var A = (D.height || "23") + "px"; - var C = "
"; - return C - }, - set_value: function (B, C, A) { - if (typeof C == "undefined") { - C = (B.firstChild.options[0] || {}).value - } - B.firstChild.value = C || "" - }, - get_value: function (B, A) { - return B.firstChild.value - }, - focus: function (B) { - var A = B.firstChild; - if (A.select) { - A.select() - } - A.focus() - } - }, - time: { - render: function () { - var A = scheduler.config; - var E = this.date.date_part(new Date()); - var D = 24 * 60, - G = 0; - if (scheduler.config.limit_time_select) { - D = 60 * A.last_hour + 1; - G = 60 * A.first_hour; - E.setHours(A.first_hour) - } - var C = " "; - return "
" + C + "  –  " + C + "
" - }, - set_value: function (A, I, G) { - var J = A.getElementsByTagName("select"); - if (scheduler.config.full_day) { - if (!A._full_day) { - A.previousSibling.innerHTML += "
"; - A._full_day = true - } - var H = A.previousSibling.getElementsByTagName("input")[0]; - var F = (scheduler.date.time_part(G.start_date) == 0 && scheduler.date.time_part(G.end_date) == 0 && G.end_date.valueOf() - G.start_date.valueOf() < 2 * 24 * 60 * 60 * 1000); - H.checked = F; - for (var B in J) { - J[B].disabled = H.checked - } - H.onclick = function () { - if (H.checked) { - var K = new Date(G.start_date); - var M = new Date(G.end_date); - scheduler.date.date_part(K); - M = scheduler.date.add(K, 1, "day") - } - for (var L in J) { - J[L].disabled = H.checked - } - C(J, 0, K || G.start_date); - C(J, 4, M || G.end_date) - } - } - if (scheduler.config.auto_end_date && scheduler.config.event_duration) { - function E() { - G.start_date = new Date(J[3].value, J[2].value, J[1].value, 0, J[0].value); - G.end_date.setTime(G.start_date.getTime() + (scheduler.config.event_duration * 60 * 1000)); - C(J, 4, G.end_date) - } - for (var D = 0; D < 4; D++) { - J[D].onchange = E - } - } - function C(L, K, M) { - L[K + 0].value = Math.round((M.getHours() * 60 + M.getMinutes()) / scheduler.config.time_step) * scheduler.config.time_step; - L[K + 1].value = M.getDate(); - L[K + 2].value = M.getMonth(); - L[K + 3].value = M.getFullYear() - } - C(J, 0, G.start_date); - C(J, 4, G.end_date) - }, - get_value: function (B, A) { - s = B.getElementsByTagName("select"); - A.start_date = new Date(s[3].value, s[2].value, s[1].value, 0, s[0].value); - A.end_date = new Date(s[7].value, s[6].value, s[5].value, 0, s[4].value); - if (A.end_date <= A.start_date) { - A.end_date = scheduler.date.add(A.start_date, scheduler.config.time_step, "minute") - } - }, - focus: function (A) { - A.getElementsByTagName("select")[0].focus() - } - } -}; -scheduler.showCover = function (A) { - this.show_cover(); - if (A) { - A.style.display = "block"; - var B = getOffset(this._obj); - A.style.top = Math.round(B.top + (this._obj.offsetHeight - A.offsetHeight) / 2) + "px"; - A.style.left = Math.round(B.left + (this._obj.offsetWidth - A.offsetWidth) / 2) + "px" - } -}; -scheduler.showLightbox = function (B) { - if (!B) { - return - } - if (!this.callEvent("onBeforeLightbox", [B])) { - return - } - var A = this._get_lightbox(); - this.showCover(A); - this._fill_lightbox(B, A); - this.callEvent("onLightbox", [B]) -}; -scheduler._fill_lightbox = function (H, E) { - var D = this.getEvent(H); - var B = E.getElementsByTagName("span"); - if (scheduler.templates.lightbox_header) { - B[1].innerHTML = ""; - B[2].innerHTML = scheduler.templates.lightbox_header(D.start_date, D.end_date, D) - } else { - B[1].innerHTML = this.templates.event_header(D.start_date, D.end_date, D); - B[2].innerHTML = (this.templates.event_bar_text(D.start_date, D.end_date, D) || "").substr(0, 70) - } - var F = this.config.lightbox.sections; - for (var A = 0; A < F.length; A++) { - var C = document.getElementById(F[A].id).nextSibling; - var G = this.form_blocks[F[A].type]; - G.set_value.call(this, C, D[F[A].map_to], D, F[A]); - if (F[A].focus) { - G.focus.call(this, C) - } - } - scheduler._lightbox_id = H -}; -scheduler._lightbox_out = function (D) { - var E = this.config.lightbox.sections; - for (var B = 0; B < E.length; B++) { - var C = document.getElementById(E[B].id).nextSibling; - var F = this.form_blocks[E[B].type]; - var A = F.get_value.call(this, C, D, E[B]); - if (E[B].map_to != "auto") { - D[E[B].map_to] = A - } - } - return D -}; -scheduler._empty_lightbox = function () { - var C = scheduler._lightbox_id; - var B = this.getEvent(C); - var A = this._get_lightbox(); - this._lightbox_out(B); - B._timed = this.is_one_day_event(B); - this.setEvent(B.id, B); - this._edit_stop_event(B, true); - this.render_view_data() -}; -scheduler.hide_lightbox = function (A) { - this.hideCover(this._get_lightbox()); - this._lightbox_id = null; - this.callEvent("onAfterLightbox", []) -}; -scheduler.hideCover = function (A) { - if (A) { - A.style.display = "none" - } - this.hide_cover() -}; -scheduler.hide_cover = function () { - if (this._cover) { - this._cover.parentNode.removeChild(this._cover) - } - this._cover = null -}; -scheduler.show_cover = function () { - this._cover = document.createElement("DIV"); - this._cover.className = "dhx_cal_cover"; - document.body.appendChild(this._cover) -}; -scheduler.save_lightbox = function () { - if (this.checkEvent("onEventSave") && !this.callEvent("onEventSave", [this._lightbox_id, this._lightbox_out({ - id: this._lightbox_id - }), this._new_event])) { - return - } - this._empty_lightbox(); - this.hide_lightbox() -}; -scheduler.startLightbox = function (B, A) { - this._lightbox_id = B; - this.showCover(A) -}; -scheduler.endLightbox = function (B, A) { - this._edit_stop_event(scheduler.getEvent(this._lightbox_id), B); - if (B) { - scheduler.render_view_data() - } - this.hideCover(A) -}; -scheduler.resetLightbox = function () { - scheduler._lightbox = null -}; -scheduler.cancel_lightbox = function () { - this.callEvent("onEventCancel", [this._lightbox_id, this._new_event]); - this.endLightbox(false); - this.hide_lightbox() -}; -scheduler._init_lightbox_events = function () { - this._get_lightbox().onclick = function (C) { - var E = C ? C.target : event.srcElement; - if (!E.className) { - E = E.previousSibling - } - if (E && E.className) { - switch (E.className) { - case "dhx_save_btn": - scheduler.save_lightbox(); - break; - case "dhx_delete_btn": - var F = scheduler.locale.labels.confirm_deleting; - if (!F || confirm(F)) { - scheduler.deleteEvent(scheduler._lightbox_id); - scheduler._new_event = null; - scheduler.hide_lightbox() - } - break; - case "dhx_cancel_btn": - scheduler.cancel_lightbox(); - break; - default: - if (E.className.indexOf("dhx_custom_button_") != -1) { - var A = E.parentNode.getAttribute("index"); - var D = scheduler.form_blocks[scheduler.config.lightbox.sections[A].type]; - var B = E.parentNode.parentNode; - D.button_click(A, E, B, B.nextSibling) - } - } - } - }; - this._get_lightbox().onkeypress = function (A) { - switch ((A || event).keyCode) { - case scheduler.keys.edit_save: - if ((A || event).shiftKey) { - return - } - scheduler.save_lightbox(); - break; - case scheduler.keys.edit_cancel: - scheduler.cancel_lightbox(); - break - } - } -}; -scheduler.setLightboxSize = function () { - var B = this._lightbox; - if (!B) { - return - } - var A = B.childNodes[1]; - A.style.height = "0px"; - A.style.height = A.scrollHeight + "px"; - B.style.height = A.scrollHeight + 50 + "px"; - A.style.height = A.scrollHeight + "px" -}; -scheduler._get_lightbox = function () { - if (!this._lightbox) { - var G = document.createElement("DIV"); - G.className = "dhx_cal_light"; - if (/msie|MSIE 6/.test(navigator.userAgent)) { - G.className += " dhx_ie6" - } - G.style.visibility = "hidden"; - G.innerHTML = this._lightbox_template; - document.body.insertBefore(G, document.body.firstChild); - this._lightbox = G; - var E = this.config.lightbox.sections; - var C = ""; - for (var B = 0; B < E.length; B++) { - var F = this.form_blocks[E[B].type]; - if (!F) { - continue - } - E[B].id = "area_" + this.uid(); - var A = ""; - if (E[B].button) { - A = "
" + this.locale.labels["button_" + E[B].button] + "
" - } - C += "
" + A + this.locale.labels["section_" + E[B].name] + "
" + F.render.call(this, E[B]) - } - var D = G.getElementsByTagName("div"); - D[4].innerHTML = scheduler.locale.labels.icon_save; - D[7].innerHTML = scheduler.locale.labels.icon_cancel; - D[10].innerHTML = scheduler.locale.labels.icon_delete; - D[1].innerHTML = C; - this.setLightboxSize(); - this._init_lightbox_events(this); - G.style.display = "none"; - G.style.visibility = "visible" - } - return this._lightbox -}; -scheduler._lightbox_template = "
 
 
 
 
"; -scheduler._dp_init = function (A) { - A._methods = ["setEventTextStyle", "", "changeEventId", "deleteEvent"]; - this.attachEvent("onEventAdded", function (B) { - if (!this._loading && this.validId(B)) { - A.setUpdated(B, true, "inserted") - } - }); - this.attachEvent("onBeforeEventDelete", function (C) { - if (!this.validId(C)) { - return - } - var B = A.getState(C); - if (B == "inserted" || this._new_event) { - A.setUpdated(C, false); - return true - } - if (B == "deleted") { - return false - } - if (B == "true_deleted") { - return true - } - A.setUpdated(C, true, "deleted"); - return false - }); - this.attachEvent("onEventChanged", function (B) { - if (!this._loading && this.validId(B)) { - A.setUpdated(B, true, "updated") - } - }); - A._getRowData = function (F, B) { - var D = this.obj.getEvent(F); - var E = {}; - for (var C in D) { - if (C.indexOf("_") == 0) { - continue - } - if (D[C] && D[C].getUTCFullYear) { - E[C] = this.obj.templates.xml_format(D[C]) - } else { - E[C] = D[C] - } - } - return E - }; - A._clearUpdateFlag = function () {}; - A.attachEvent("insertCallback", scheduler._update_callback); - A.attachEvent("updateCallback", scheduler._update_callback); - A.attachEvent("deleteCallback", function (B, C) { - this.obj.setUserData(C, this.action_param, "true_deleted"); - this.obj.deleteEvent(C) - }) -}; -scheduler.setUserData = function (C, A, B) { - if (C) { - this.getEvent(C)[A] = B - } else { - this._userdata[A] = B - } -}; -scheduler.getUserData = function (B, A) { - return B ? this.getEvent(B)[A] : this._userdata[A] -}; -scheduler.setEventTextStyle = function (C, A) { - this.for_rendered(C, function (D) { - D.style.cssText += ";" + A - }); - var B = this.getEvent(C); - B._text_style = A; - this.event_updated(B) -}; -scheduler.validId = function (A) { - return true -}; -scheduler._update_callback = function (B, C) { - var A = scheduler.xmlNodeToJSON(B.firstChild); - A.text = A.text || A._tagvalue; - A.start_date = scheduler.templates.xml_date(A.start_date); - A.end_date = scheduler.templates.xml_date(A.end_date); - scheduler.addEvent(A) -}; - -/* -dhtmlxScheduler v.2.3 - -This software is allowed to use under GPL or you need to obtain Commercial or Enterise License -to use it in not GPL project. Please contact sales@dhtmlx.com for details - -(c) DHTMLX Ltd. */ +dhtmlx=function(a){for(var b in a)dhtmlx[b]=a[b];return dhtmlx}; +dhtmlx.extend_api=function(a,b,c){var d=window[a];if(d)window[a]=function(a){if(a&&typeof a=="object"&&!a.tagName&&!(a instanceof Array)){var c=d.apply(this,b._init?b._init(a):arguments),g;for(g in dhtmlx)if(b[g])this[b[g]](dhtmlx[g]);for(g in a)if(b[g])this[b[g]](a[g]);else g.indexOf("on")==0&&this.attachEvent(g,a[g])}else c=d.apply(this,arguments);b._patch&&b._patch(this);return c||this},window[a].prototype=d.prototype,c&&dhtmlXHeir(window[a].prototype,c)}; +dhtmlxAjax={get:function(a,b){var c=new dtmlXMLLoaderObject(!0);c.async=arguments.length<3;c.waitCall=b;c.loadXML(a);return c},post:function(a,b,c){var d=new dtmlXMLLoaderObject(!0);d.async=arguments.length<4;d.waitCall=c;d.loadXML(a,!0,b);return d},getSync:function(a){return this.get(a,null,!0)},postSync:function(a,b){return this.post(a,b,null,!0)}}; +function dtmlXMLLoaderObject(a,b,c,d){this.xmlDoc="";this.async=typeof c!="undefined"?c:!0;this.onloadAction=a||null;this.mainObject=b||null;this.waitCall=null;this.rSeed=d||!1;return this} +dtmlXMLLoaderObject.prototype.waitLoadFunction=function(a){var b=!0;return this.check=function(){if(a&&a.onloadAction!=null&&(!a.xmlDoc.readyState||a.xmlDoc.readyState==4)&&b){b=!1;if(typeof a.onloadAction=="function")a.onloadAction(a.mainObject,null,null,null,a);if(a.waitCall)a.waitCall.call(this,a),a.waitCall=null}}}; +dtmlXMLLoaderObject.prototype.getXMLTopNode=function(a,b){if(this.xmlDoc.responseXML){var c=this.xmlDoc.responseXML.getElementsByTagName(a);c.length==0&&a.indexOf(":")!=-1&&(c=this.xmlDoc.responseXML.getElementsByTagName(a.split(":")[1]));var d=c[0]}else d=this.xmlDoc.documentElement;if(d)return this._retry=!1,d;if(_isIE&&!this._retry){var e=this.xmlDoc.responseText,b=this.xmlDoc;this._retry=!0;this.xmlDoc=new ActiveXObject("Microsoft.XMLDOM");this.xmlDoc.async=!1;this.xmlDoc.loadXML(e);return this.getXMLTopNode(a, +b)}dhtmlxError.throwError("LoadXML","Incorrect XML",[b||this.xmlDoc,this.mainObject]);return document.createElement("DIV")};dtmlXMLLoaderObject.prototype.loadXMLString=function(a){try{var b=new DOMParser;this.xmlDoc=b.parseFromString(a,"text/xml")}catch(c){this.xmlDoc=new ActiveXObject("Microsoft.XMLDOM"),this.xmlDoc.async=this.async,this.xmlDoc.loadXML(a)}this.onloadAction(this.mainObject,null,null,null,this);if(this.waitCall)this.waitCall(),this.waitCall=null}; +dtmlXMLLoaderObject.prototype.loadXML=function(a,b,c,d){this.rSeed&&(a+=(a.indexOf("?")!=-1?"&":"?")+"a_dhx_rSeed="+(new Date).valueOf());this.filePath=a;this.xmlDoc=!_isIE&&window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHTTP");if(this.async)this.xmlDoc.onreadystatechange=new this.waitLoadFunction(this);this.xmlDoc.open(b?"POST":"GET",a,this.async);d?(this.xmlDoc.setRequestHeader("User-Agent","dhtmlxRPC v0.1 ("+navigator.userAgent+")"),this.xmlDoc.setRequestHeader("Content-type", +"text/xml")):b&&this.xmlDoc.setRequestHeader("Content-type","application/x-www-form-urlencoded");this.xmlDoc.setRequestHeader("X-Requested-With","XMLHttpRequest");this.xmlDoc.send(c);this.async||(new this.waitLoadFunction(this))()};dtmlXMLLoaderObject.prototype.destructor=function(){return this.xmlDoc=this.mainObject=this.onloadAction=null}; +dtmlXMLLoaderObject.prototype.xmlNodeToJSON=function(a){for(var b={},c=0;c-1&&(_isChrome=!0); +if(navigator.userAgent.indexOf("Safari")!=-1||navigator.userAgent.indexOf("Konqueror")!=-1){var x=parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf("Safari")+7,5));if(x>525){_isFF=!0;var w=1.9}else _isKHTML=!0}else navigator.userAgent.indexOf("Opera")!=-1?(_isOpera=!0,_OperaRv=parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf("Opera")+6,3))):navigator.appName.indexOf("Microsoft")!=-1?(_isIE=!0,navigator.appVersion.indexOf("MSIE 8.0")!=-1&&document.compatMode!="BackCompat"&& +(_isIE=8)):(_isFF=!0,w=parseFloat(navigator.userAgent.split("rv:")[1])); +dtmlXMLLoaderObject.prototype.doXPath=function(a,b,c,d){if(_isKHTML||!_isIE&&!window.XPathResult)return this.doXPathOpera(a,b);if(_isIE)return b||(b=this.xmlDoc.nodeName?this.xmlDoc:this.xmlDoc.responseXML),b||dhtmlxError.throwError("LoadXML","Incorrect XML",[b||this.xmlDoc,this.mainObject]),c!=null&&b.setProperty("SelectionNamespaces","xmlns:xsl='"+c+"'"),d=="single"?b.selectSingleNode(a):b.selectNodes(a)||[];else{var e=b;b||(b=this.xmlDoc.nodeName?this.xmlDoc:this.xmlDoc.responseXML);b||dhtmlxError.throwError("LoadXML", +"Incorrect XML",[b||this.xmlDoc,this.mainObject]);b.nodeName.indexOf("document")!=-1?e=b:(e=b,b=b.ownerDocument);var f=XPathResult.ANY_TYPE;if(d=="single")f=XPathResult.FIRST_ORDERED_NODE_TYPE;var g=[],h=b.evaluate(a,e,function(){return c},f,null);if(f==XPathResult.FIRST_ORDERED_NODE_TYPE)return h.singleNodeValue;for(var i=h.iterateNext();i;)g[g.length]=i,i=h.iterateNext();return g}};function z(){if(!this.catches)this.catches=[];return this}z.prototype.catchError=function(a,b){this.catches[a]=b}; +z.prototype.throwError=function(a,b,c){if(this.catches[a])return this.catches[a](a,b,c);if(this.catches.ALL)return this.catches.ALL(a,b,c);alert("Error type: "+a+"\nDescription: "+b);return null};window.dhtmlxError=new z; +dtmlXMLLoaderObject.prototype.doXPathOpera=function(a,b){var c=a.replace(/[\/]+/gi,"/").split("/"),d=null,e=1;if(!c.length)return[];if(c[0]==".")d=[b];else if(c[0]=="")d=(this.xmlDoc.responseXML||this.xmlDoc).getElementsByTagName(c[e].replace(/\[[^\]]*\]/g,"")),e++;else return[];for(;e0?"&dhx_no_header=1":"")},b=function(b){return a.call(this,b)+(this._connector_sorting||"")+(this._connector_filter||"")},c=function(a,c,d){this._connector_sorting="&dhx_sort["+c+"]="+d;return b.call(this, +a)},d=function(a,c,d){for(var h=0;h0)this.xy.nav_height=e;var f=this.xy.scale_height+ +this.xy.nav_height+(this._quirks?-2:0);this.set_xy(this._els.dhx_cal_data[0],a,b-(f+2),0,f+2)};scheduler.set_xy=function(a,b,c,d,e){a.style.width=Math.max(0,b)+"px";a.style.height=Math.max(0,c)+"px";if(arguments.length>3)a.style.left=d+"px",a.style.top=e+"px"}; +scheduler.get_elements=function(){for(var a=this._obj.getElementsByTagName("DIV"),b=0;bf.getHours()&&(f.setHours(g),a=f.valueOf());b=a+e}var h=new Date(b);f.valueOf()==h.valueOf()&&h.setTime(h.valueOf()+e);d.start_date=d.start_date||f;d.end_date=d.end_date||h;d.text=d.text||this.locale.labels.new_event;d.id=this._drag_id= +this.uid();this._drag_mode="new-size";this._loading=!0;this.addEvent(d);this.callEvent("onEventCreated",[this._drag_id,c]);this._loading=!1;this._drag_event={};this._on_mouse_up(c)}; +scheduler._on_dbl_click=function(a,b){b=b||a.target||a.srcElement;if(!this.config.readonly){var c=b.className.split(" ")[0];switch(c){case "dhx_scale_holder":case "dhx_scale_holder_now":case "dhx_month_body":case "dhx_wa_day_data":if(!scheduler.config.dblclick_create)break;var d=this._mouse_coords(a),e=this._min_date.valueOf()+(d.y*this.config.time_step+(this._table_view?0:d.x)*1440)*6E4,e=this._correct_shift(e);this.addEventNow(e,null,a);break;case "dhx_body":case "dhx_wa_ev_body":case "dhx_cal_event_line":case "dhx_cal_event_clear":var f= +this._locate_event(b);if(!this.callEvent("onDblClick",[f,a]))break;this.config.details_on_dblclick||this._table_view||!this.getEvent(f)._timed?this.showLightbox(f):this.edit(f);break;case "":if(b.parentNode)return scheduler._on_dbl_click(a,b.parentNode);default:var g=this["dblclick_"+c];g&&g.call(this,a)}}}; +scheduler._mouse_coords=function(a){var b,c=document.body,d=document.documentElement;b=a.pageX||a.pageY?{x:a.pageX,y:a.pageY}:{x:a.clientX+(c.scrollLeft||d.scrollLeft||0)-c.clientLeft,y:a.clientY+(c.scrollTop||d.scrollTop||0)-c.clientTop};b.x-=getAbsoluteLeft(this._obj)+(this._table_view?0:this.xy.scale_width);b.y-=getAbsoluteTop(this._obj)+this.xy.nav_height+(this._dy_shift||0)+this.xy.scale_height-this._els.dhx_cal_data[0].scrollTop;b.ev=a;var e=this["mouse_"+this._mode];if(e)return e.call(this, +b);if(this._table_view){for(var f=0,f=1;fb.y)break;b.y=(Math.max(0,Math.ceil(b.x/this._cols[0])-1)+Math.max(0,f-1)*7)*1440/this.config.time_step;b.x=0}else b.x=Math.max(0,Math.ceil(b.x/this._cols[0])-1),b.y=Math.max(0,Math.ceil(b.y*60/(this.config.time_step*this.config.hour_size_px))-1)+this.config.first_hour*(60/this.config.time_step);return b}; +scheduler._close_not_saved=function(){if((new Date).valueOf()-(scheduler._new_event||0)>500&&scheduler._edit_id){var a=scheduler.locale.labels.confirm_closing;(!a||confirm(a))&&scheduler.editStop(scheduler.config.positive_closing)}};scheduler._correct_shift=function(a,b){return a-=((new Date(scheduler._min_date)).getTimezoneOffset()-(new Date(a)).getTimezoneOffset())*6E4*(b?-1:1)}; +scheduler._on_mouse_move=function(a){if(this._drag_mode){var b=this._mouse_coords(a);if(!this._drag_pos||b.custom||this._drag_pos.x!=b.x||this._drag_pos.y!=b.y){this._edit_id!=this._drag_id&&this._close_not_saved();this._drag_pos=b;if(this._drag_mode=="create"){this._close_not_saved();this._loading=!0;var c=this._min_date.valueOf()+(b.y*this.config.time_step+(this._table_view?0:b.x)*1440)*6E4,c=this._correct_shift(c);if(!this._drag_start){this._drag_start=c;return}var d=c;if(d==this._drag_start)return; +this._drag_id=this.uid();this.addEvent(new Date(this._drag_start),new Date(d),this.locale.labels.new_event,this._drag_id,b.fields);this.callEvent("onEventCreated",[this._drag_id,a]);this._loading=!1;this._drag_mode="new-size"}var e=this.getEvent(this._drag_id);if(this._drag_mode=="move")c=this._min_date.valueOf()+(b.y*this.config.time_step+b.x*1440)*6E4,!b.custom&&this._table_view&&(c+=this.date.time_part(e.start_date)*1E3),c=this._correct_shift(c),d=e.end_date.valueOf()-(e.start_date.valueOf()-c); +else{c=e.start_date.valueOf();if(this._table_view)d=this._min_date.valueOf()+b.y*this.config.time_step*6E4+(b.custom?0:864E5),this._mode=="month"&&(d=this._correct_shift(d,!1));else if(d=this.date.date_part(new Date(e.end_date)).valueOf()+b.y*this.config.time_step*6E4,this._els.dhx_cal_data[0].style.cursor="s-resize",this._mode=="week"||this._mode=="day")d=this._correct_shift(d);if(this._drag_mode=="new-size")if(d<=this._drag_start)var f=b.shift||(this._table_view&&!b.custom?864E5:0),c=d-(b.shift? +0:f),d=this._drag_start+(f||this.config.time_step*6E4);else c=this._drag_start;else d<=c&&(d=c+this.config.time_step*6E4)}var g=new Date(d-1),h=new Date(c);if(this._table_view||g.getDate()==h.getDate()&&g.getHours()this._min_date&&t.getHours()>=this.config.first_hour&&t.getHours()";for(var o=0;o<7;o++){l+= +"=d?m="dhx_after":c.valueOf()==e.valueOf()&&(m="dhx_now");l+=" class='"+m+" "+this.templates.month_date_class(c,e)+"' ";l+=">
"+this.templates.month_day(c)+"
";c=this.date.add(c,1,"day")}l+="";i[k]=j;j+=this._colsS.height}l+="";this._max_date=c;a.innerHTML=l;return c}; +scheduler.getLabel=function(a,b){for(var c=this.config.lightbox.sections,d=0;d11?"pm":"am")+"';case "%A":return'"+(date.getHours()>11?"PM":"AM")+"';case "%s":return'"+scheduler.date.to_fixed(date.getSeconds())+"';case "%W":return'"+scheduler.date.to_fixed(scheduler.date.getISOWeek(date))+"';default:return a}});b&&(a=a.replace(/date\.get/g, +"date.getUTC"));return new Function("date",'return "'+a+'";')},str_to_date:function(a,b){for(var c="var temp=date.split(/[^0-9a-zA-Z]+/g);",d=a.match(/%[a-zA-Z]/g),e=0;e50?1900:2000);";break;case "%g":case "%G":case "%h":case "%H":c+="set[3]=temp["+e+"]||0;";break;case "%i":c+="set[4]=temp["+e+"]||0;";break;case "%Y":c+= +"set[0]=temp["+e+"]||0;";break;case "%a":case "%A":c+="set[3]=set[3]%12+((temp["+e+"]||'').toLowerCase()=='am'?0:12);";break;case "%s":c+="set[5]=temp["+e+"]||0;";break;case "%M":c+="set[1]=scheduler.locale.date.month_short_hash[temp["+e+"]]||0;";break;case "%F":c+="set[1]=scheduler.locale.date.month_full_hash[temp["+e+"]]||0;"}var f="set[0],set[1],set[2],set[3],set[4],set[5]";b&&(f=" Date.UTC("+f+")");return new Function("date","var set=[0,0,1,0,0,0]; "+c+" return new Date("+f+");")},getISOWeek:function(a){if(!a)return!1; +var b=a.getDay();b===0&&(b=7);var c=new Date(a.valueOf());c.setDate(a.getDate()+(4-b));var d=c.getFullYear(),e=Math.round((c.getTime()-(new Date(d,0,1)).getTime())/864E5),f=1+Math.floor(e/7);return f},getUTCISOWeek:function(a){return this.getISOWeek(a)}}; +scheduler.locale={date:{month_full:"January,February,March,April,May,June,July,August,September,October,November,December".split(","),month_short:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","),day_full:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday".split(","),day_short:"Sun,Mon,Tue,Wed,Thu,Fri,Sat".split(",")},labels:{dhx_cal_today_button:"Today",day_tab:"Day",week_tab:"Week",month_tab:"Month",new_event:"New event",icon_save:"Save",icon_cancel:"Cancel",icon_details:"Details", +icon_edit:"Edit",icon_delete:"Delete",confirm_closing:"",confirm_deleting:"Event will be deleted permanently, are you sure?",section_description:"Description",section_time:"Time period",full_day:"Full day",confirm_recurring:"Do you want to edit the whole set of repeated events?",section_recurring:"Repeat event",button_recurring:"Disabled",button_recurring_open:"Enabled",agenda_tab:"Agenda",date:"Date",description:"Description",year_tab:"Year",week_agenda_tab:"Agenda"}}; +scheduler.config={default_date:"%j %M %Y",month_date:"%F %Y",load_date:"%Y-%m-%d",week_date:"%l",day_date:"%D, %F %j",hour_date:"%H:%i",month_day:"%d",xml_date:"%m/%d/%Y %H:%i",api_date:"%d-%m-%Y %H:%i",hour_size_px:42,time_step:5,start_on_monday:1,first_hour:0,last_hour:24,readonly:!1,drag_resize:1,drag_move:1,drag_create:1,dblclick_create:1,edit_on_create:1,details_on_create:0,click_form_details:0,cascade_event_display:!1,cascade_event_count:4,cascade_event_margin:30,drag_lightbox:!0,preserve_scroll:!0, +server_utc:!1,positive_closing:!1,icons_edit:["icon_save","icon_cancel"],icons_select:["icon_details","icon_edit","icon_delete"],buttons_left:["dhx_save_btn","dhx_cancel_btn"],buttons_right:["dhx_delete_btn"],lightbox:{sections:[{name:"description",height:200,map_to:"text",type:"textarea",focus:!0},{name:"time",height:72,type:"time",map_to:"auto"}]},repeat_date_of_end:"01.01.2010"};scheduler.templates={}; +scheduler.init_templates=function(){var a=scheduler.date.date_to_str,b=scheduler.config,c=function(a,b){for(var c in b)a[c]||(a[c]=b[c])};c(scheduler.templates,{day_date:a(b.default_date),month_date:a(b.month_date),week_date:function(a,b){return scheduler.templates.day_date(a)+" – "+scheduler.templates.day_date(scheduler.date.add(b,-1,"day"))},day_scale_date:a(b.default_date),month_scale_date:a(b.week_date),week_scale_date:a(b.day_date),hour_scale:a(b.hour_date),time_picker:a(b.hour_date),event_date:a(b.hour_date), +month_day:a(b.month_day),xml_date:scheduler.date.str_to_date(b.xml_date,b.server_utc),load_format:a(b.load_date,b.server_utc),xml_format:a(b.xml_date,b.server_utc),api_date:scheduler.date.str_to_date(b.api_date),event_header:function(a,b){return scheduler.templates.event_date(a)+" - "+scheduler.templates.event_date(b)},event_text:function(a,b,c){return c.text},event_class:function(){return""},month_date_class:function(){return""},week_date_class:function(){return""},event_bar_date:function(a){return scheduler.templates.event_date(a)+ +" "},event_bar_text:function(a,b,c){return c.text}});this.callEvent("onTemplatesReady",[])};scheduler.uid=function(){if(!this._seed)this._seed=(new Date).valueOf();return this._seed++};scheduler._events={};scheduler.clearAll=function(){this._events={};this._loaded={};this.clear_view()}; +scheduler.addEvent=function(a,b,c,d,e){if(!arguments.length)return this.addEventNow();var f=a;if(arguments.length!=1)f=e||{},f.start_date=a,f.end_date=b,f.text=c,f.id=d;f.id=f.id||scheduler.uid();f.text=f.text||"";if(typeof f.start_date=="string")f.start_date=this.templates.api_date(f.start_date);if(typeof f.end_date=="string")f.end_date=this.templates.api_date(f.end_date);var g=(this.config.event_duration||this.config.time_step)*6E4;f.start_date.valueOf()==f.end_date.valueOf()&&f.end_date.setTime(f.end_date.valueOf()+ +g);f._timed=this.is_one_day_event(f);var h=!this._events[f.id];this._events[f.id]=f;this.event_updated(f);this._loading||this.callEvent(h?"onEventAdded":"onEventChanged",[f.id,f])};scheduler.deleteEvent=function(a,b){var c=this._events[a];if(b||this.callEvent("onBeforeEventDelete",[a,c])&&this.callEvent("onConfirmedBeforeEventDelete",[a,c]))c&&(delete this._events[a],this.unselect(a),this.event_updated(c)),this.callEvent("onEventDeleted",[a])};scheduler.getEvent=function(a){return this._events[a]}; +scheduler.setEvent=function(a,b){this._events[a]=b};scheduler.for_rendered=function(a,b){for(var c=this._rendered.length-1;c>=0;c--)this._rendered[c].getAttribute("event_id")==a&&b(this._rendered[c],c)};scheduler.changeEventId=function(a,b){if(a!=b){var c=this._events[a];if(c)c.id=b,this._events[b]=c,delete this._events[a];this.for_rendered(a,function(a){a.setAttribute("event_id",b)});if(this._select_id==a)this._select_id=b;if(this._edit_id==a)this._edit_id=b;this.callEvent("onEventIdChange",[a,b])}}; +(function(){for(var a="text,Text,start_date,StartDate,end_date,EndDate".split(","),b=function(a){return function(b){return scheduler.getEvent(b)[a]}},c=function(a){return function(b,c){var d=scheduler.getEvent(b);d[a]=c;d._changed=!0;d._timed=this.is_one_day_event(d);scheduler.event_updated(d,!0)}},d=0;dthis._colsS.height-22){for(var i=g.rows[h].cells,k=0;kb.id?1:-1:a.start_date>b.start_date?1:-1});for(var c=[],d=[],e=0;el)l=i[j]._sorder;f._sorder=l+1;f._inner=!1}else f._sorder=0;i.push(f);i.length>(i.max_count||0)?(i.max_count=i.length,f._count= +i.length):f._count=f._count?f._count:1}if(g=this.config.last_hour)if(d.push(f),a[e]=f=this._copy_event(f),g=this.config.last_hour&&(f.end_date.setMinutes(0),f.end_date.setHours(this.config.last_hour)),f.start_date>f.end_date||g==this.config.last_hour)a.splice(e,1),e--}if(!b){for(e=0;ec.id?1:-1:a.start_date>c.start_date?1:-1})}; +scheduler._pre_render_events_table=function(a,b){this._time_order(a);for(var c=[],d=[[],[],[],[],[],[],[]],e=this._colsS.heights,f,g=this._cols.length,h=0;hthis._max_date)j=this._max_date;var l=this.locate_holder_day(k,!1,i);i._sday=l%g;var o=this.locate_holder_day(j,!0,i)||g;i._eday=o%g||g;i._length=o-l;i._sweek=Math.floor((this._correct_shift(k.valueOf(),1)-this._min_date.valueOf())/(864E5*g));var m= +d[i._sweek],n;for(n=0;n";if(this._quirks7)m.firstChild.style.height=g- +12+"px";this._editor=m.firstChild;this._editor.onkeypress=function(a){if((a||event).shiftKey)return!0;var b=(a||event).keyCode;b==scheduler.keys.edit_save&&scheduler.editStop(!0);b==scheduler.keys.edit_cancel&&scheduler.editStop(!1)};this._editor.onselectstart=function(a){return(a||event).cancelBubble=!0};m.firstChild.focus();this._els.dhx_cal_data[0].scrollLeft=0;m.firstChild.select()}if(this._select_id==a.id){if(this.config.cascade_event_display&&this._drag_mode)o.style.zIndex=1;for(var n=this.config["icons_"+ +(this._edit_id==a.id?"edit":"select")],p="",q=a.color?"background-color:"+a.color+";":"",v=a.textColor?"color:"+a.textColor+";":"",s=0;s
";var r=this._render_v_bar(a.id,i-b+1,f,b,n.length*20+26,"","
",p,!0);r.style.left=i-b+1;this._els.dhx_cal_data[0].appendChild(r);this._rendered.push(r)}}}}; +scheduler._render_v_bar=function(a,b,c,d,e,f,g,h,i){var k=document.createElement("DIV"),j=this.getEvent(a),l="dhx_cal_event",o=scheduler.templates.event_class(j.start_date,j.end_date,j);o&&(l=l+" "+o);var m=j.color?"background-color:"+j.color+";":"",n=j.textColor?"color:"+j.textColor+";":"",p='
';p+='
 
'; +p+='
'+g+"
";p+='
'+h+"
";p+='
';k.innerHTML=p;return k.firstChild};scheduler.locate_holder=function(a){return this._mode=="day"?this._els.dhx_cal_data[0].firstChild:this._els.dhx_cal_data[0].childNodes[a]}; +scheduler.locate_holder_day=function(a,b){var c=Math.floor((this._correct_shift(a,1)-this._min_date)/864E5);b&&this.date.time_part(a)&&c++;return c}; +scheduler.render_event_bar=function(a){var b=this._rendered_location,c=this._colsS[a._sday],d=this._colsS[a._eday];d==c&&(d=this._colsS[a._eday+1]);var e=this.xy.bar_height,f=this._colsS.heights[a._sweek]+(this._colsS.height?this.xy.month_scale_height+2:2)+a._sorder*e,g=document.createElement("DIV"),h=a._timed?"dhx_cal_event_clear":"dhx_cal_event_line",i=scheduler.templates.event_class(a.start_date,a.end_date,a);i&&(h=h+" "+i);var k=a.color?"background-color:"+a.color+";":"",j=a.textColor?"color:"+ +a.textColor+";":"",l='
';a._timed&&(l+=scheduler.templates.event_bar_date(a.start_date,a.end_date,a));l+=scheduler.templates.event_bar_text(a.start_date,a.end_date,a)+"
";l+="
";g.innerHTML=l;this._rendered.push(g.firstChild);b.appendChild(g.firstChild)}; +scheduler._locate_event=function(a){for(var b=null;a&&!b&&a.getAttribute;)b=a.getAttribute("event_id"),a=a.parentNode;return b};scheduler.edit=function(a){if(this._edit_id!=a)this.editStop(!1,a),this._edit_id=a,this.updateEvent(a)};scheduler.editStop=function(a,b){if(!(b&&this._edit_id==b)){var c=this.getEvent(this._edit_id);if(c){if(a)c.text=this._editor.value;this._editor=this._edit_id=null;this.updateEvent(c.id);this._edit_stop_event(c,a)}}}; +scheduler._edit_stop_event=function(a,b){this._new_event?(b?this.callEvent("onEventAdded",[a.id,a]):this.deleteEvent(a.id,!0),this._new_event=null):b&&this.callEvent("onEventChanged",[a.id,a])};scheduler.getEvents=function(a,b){var c=[],d;for(d in this._events){var e=this._events[d];e&&e.start_datea&&c.push(e)}return c};scheduler._loaded={}; +scheduler._load=function(a,b){a=a||this._load_url;a+=(a.indexOf("?")==-1?"?":"&")+"timeshift="+(new Date).getTimezoneOffset();this.config.prevent_cache&&(a+="&uid="+this.uid());var c,b=b||this._date;if(this._load_mode){for(var d=this.templates.load_format,b=this.date[this._load_mode+"_start"](new Date(b.valueOf()));b>this._min_date;)b=this.date.add(b,-1,this._load_mode);c=b;for(var e=!0;cb&&this._loaded[d(f)]);if(c<=b)return!1;for(dhtmlxAjax.get(a+"&from="+d(b)+"&to="+d(c),function(a){scheduler.on_load(a)});b
"},set_value:function(a,b){a.innerHTML=b||""},get_value:function(a){return a.innerHTML||""},focus:function(){}},textarea:{render:function(a){var b=(a.height||"130")+"px";return"
"},set_value:function(a,b){a.firstChild.value=b||""},get_value:function(a){return a.firstChild.value}, +focus:function(a){var b=a.firstChild;b.select();b.focus()}},select:{render:function(a){for(var b=(a.height||"23")+"px",c="
";return c},set_value:function(a,b){if(typeof b=="undefined")b=(a.firstChild.options[0]||{}).value;a.firstChild.value=b||""},get_value:function(a){return a.firstChild.value},focus:function(a){var b= +a.firstChild;b.select&&b.select();b.focus()}},time:{render:function(){var a=scheduler.config,b=this.date.date_part(new Date),c=1440,d=0;scheduler.config.limit_time_select&&(c=60*a.last_hour+1,d=60*a.first_hour,b.setHours(a.first_hour));for(var e=" ";return"
"+e+"  –  "+e+"
"},set_value:function(a, +b,c){function d(a,b,c){a[b+0].value=Math.round((c.getHours()*60+c.getMinutes())/scheduler.config.time_step)*scheduler.config.time_step;a[b+1].value=c.getDate();a[b+2].value=c.getMonth();a[b+3].value=c.getFullYear()}var e=a.getElementsByTagName("select");if(scheduler.config.full_day){if(!a._full_day){var f="";scheduler.config.wide_form||(f=a.previousSibling.innerHTML+ +f);a.previousSibling.innerHTML=f;a._full_day=!0}var g=a.previousSibling.getElementsByTagName("input")[0],h=scheduler.date.time_part(c.start_date)===0&&scheduler.date.time_part(c.end_date)===0&&c.end_date.valueOf()-c.start_date.valueOf()<1728E5;g.checked=h;for(var i in e)e[i].disabled=g.checked;g.onclick=function(){if(g.checked){var a=new Date(c.start_date),b=new Date(c.end_date);scheduler.date.date_part(a);b=scheduler.date.add(a,1,"day")}for(var f in e)e[f].disabled=g.checked;d(e,0,a||c.start_date); +d(e,4,b||c.end_date)}}if(scheduler.config.auto_end_date&&scheduler.config.event_duration)for(var k=function(){c.start_date=new Date(e[3].value,e[2].value,e[1].value,0,e[0].value);c.end_date.setTime(c.start_date.getTime()+scheduler.config.event_duration*6E4);d(e,4,c.end_date)},j=0;j<4;j++)e[j].onchange=k;d(e,0,c.start_date);d(e,4,c.end_date)},get_value:function(a,b){s=a.getElementsByTagName("select");b.start_date=new Date(s[3].value,s[2].value,s[1].value,0,s[0].value);b.end_date=new Date(s[7].value, +s[6].value,s[5].value,0,s[4].value);if(b.end_date<=b.start_date)b.end_date=scheduler.date.add(b.start_date,scheduler.config.time_step,"minute")},focus:function(a){a.getElementsByTagName("select")[0].focus()}}}; +scheduler.showCover=function(a){if(a){a.style.display="block";var b=window.pageYOffset||document.body.scrollTop||document.documentElement.scrollTop,c=window.pageXOffset||document.body.scrollLeft||document.documentElement.scrollLeft,d=window.innerHeight||document.documentElement.clientHeight;a.style.top=b?Math.round(b+Math.max((d-a.offsetHeight)/2,0))+"px":Math.round(Math.max((d-a.offsetHeight)/2,0)+9)+"px";a.style.left=document.documentElement.scrollWidth>document.body.offsetWidth?Math.round(c+(document.body.offsetWidth- +a.offsetWidth)/2)+"px":Math.round((document.body.offsetWidth-a.offsetWidth)/2)+"px"}this.show_cover()};scheduler.showLightbox=function(a){if(a&&this.callEvent("onBeforeLightbox",[a])){var b=this._get_lightbox();this.showCover(b);this._fill_lightbox(a,b);this.callEvent("onLightbox",[a])}}; +scheduler._fill_lightbox=function(a,b){var c=this.getEvent(a),d=b.getElementsByTagName("span");scheduler.templates.lightbox_header?(d[1].innerHTML="",d[2].innerHTML=scheduler.templates.lightbox_header(c.start_date,c.end_date,c)):(d[1].innerHTML=this.templates.event_header(c.start_date,c.end_date,c),d[2].innerHTML=(this.templates.event_bar_text(c.start_date,c.end_date,c)||"").substr(0,70));for(var e=this.config.lightbox.sections,f=0;f
"+scheduler.locale.labels[c[d]]+"
";c=this.config.buttons_right;for(d=0;d
"+scheduler.locale.labels[c[d]]+"
";b+="
";a.innerHTML=b;if(scheduler.config.drag_lightbox)a.firstChild.onmousedown= +scheduler._ready_to_dnd,a.firstChild.onselectstart=function(){return!1},a.firstChild.style.cursor="pointer",scheduler._init_dnd_events();document.body.insertBefore(a,document.body.firstChild);this._lightbox=a;for(var e=this.config.lightbox.sections,b="",d=0;d
"+this.locale.labels["button_"+ +e[d].button]+"
");this.config.wide_form&&(b+="
");b+="
"+g+this.locale.labels["section_"+e[d].name]+"
"+f.render.call(this,e[d]);b+="
"}}var h=a.getElementsByTagName("div");h[1].innerHTML=b;this.setLightboxSize();this._init_lightbox_events(this);a.style.display="none";a.style.visibility="visible"}return this._lightbox};scheduler._lightbox_template="
 
"; +scheduler._dp_init=function(a){a._methods=["setEventTextStyle","","changeEventId","deleteEvent"];this.attachEvent("onEventAdded",function(b){!this._loading&&this.validId(b)&&a.setUpdated(b,!0,"inserted")});this.attachEvent("onConfirmedBeforeEventDelete",function(b){if(this.validId(b)){var c=a.getState(b);if(c=="inserted"||this._new_event)return a.setUpdated(b,!1),!0;if(c=="deleted")return!1;if(c=="true_deleted")return!0;a.setUpdated(b,!0,"deleted");return!1}});this.attachEvent("onEventChanged",function(b){!this._loading&& +this.validId(b)&&a.setUpdated(b,!0,"updated")});a._getRowData=function(a){var c=this.obj.getEvent(a),d={},e;for(e in c)e.indexOf("_")!=0&&(d[e]=c[e]&&c[e].getUTCFullYear?this.obj.templates.xml_format(c[e]):c[e]);return d};a._clearUpdateFlag=function(){};a.attachEvent("insertCallback",scheduler._update_callback);a.attachEvent("updateCallback",scheduler._update_callback);a.attachEvent("deleteCallback",function(a,c){this.obj.setUserData(c,this.action_param,"true_deleted");this.obj.deleteEvent(c)})}; +scheduler.setUserData=function(a,b,c){a?this.getEvent(a)[b]=c:this._userdata[b]=c};scheduler.getUserData=function(a,b){return a?this.getEvent(a)[b]:this._userdata[b]};scheduler.setEventTextStyle=function(a,b){this.for_rendered(a,function(a){a.style.cssText+=";"+b});var c=this.getEvent(a);c._text_style=b;this.event_updated(c)};scheduler.validId=function(){return!0}; +scheduler._update_callback=function(a){var b=scheduler.xmlNodeToJSON(a.firstChild);b.text=b.text||b._tagvalue;b.start_date=scheduler.templates.xml_date(b.start_date);b.end_date=scheduler.templates.xml_date(b.end_date);scheduler.addEvent(b)}; -- cgit v1.2.3