From 16ed11c0c7f424d6f93843d9f5e35736eb52c061 Mon Sep 17 00:00:00 2001 From: Nathan Gray Date: Tue, 22 Mar 2016 21:33:53 +0000 Subject: [PATCH] Move gantt widget into projectmanager --- .../js/dhtmlxGantt/codebase/dhtmlxcommon.js | 933 -- .../js/dhtmlxGantt/codebase/dhtmlxgantt.css | 5 - .../js/dhtmlxGantt/codebase/dhtmlxgantt.js | 240 - .../codebase/ext/dhtmlxgantt_quick_info.js | 13 - .../codebase/ext/dhtmlxgantt_tooltip.js | 10 - phpgwapi/js/dhtmlxGantt/codebase/imgs/arr.gif | Bin 162 -> 0 bytes phpgwapi/js/dhtmlxGantt/codebase/imgs/bg.png | Bin 151 -> 0 bytes .../js/dhtmlxGantt/codebase/imgs/bg_week.png | Bin 275 -> 0 bytes .../codebase/imgs/menu/menu_bg.png | Bin 159 -> 0 bytes .../codebase/imgs/menu/menu_selection.png | Bin 600 -> 0 bytes .../codebase/imgs/menu/window_tr.png | Bin 2247 -> 0 bytes .../js/dhtmlxGantt/codebase/imgs/minus.gif | Bin 121 -> 0 bytes .../codebase/imgs/parentnode_filled.png | Bin 186 -> 0 bytes .../js/dhtmlxGantt/codebase/imgs/plus.gif | Bin 124 -> 0 bytes .../dhtmlxGantt/codebase/imgs/progress_bg.png | Bin 186 -> 0 bytes .../codebase/imgs/progress_filled.png | Bin 186 -> 0 bytes .../js/dhtmlxGantt/codebase/locale/locale.js | 7 - .../dhtmlxGantt/codebase/locale/locale_ar.js | 7 - .../dhtmlxGantt/codebase/locale/locale_be.js | 7 - .../dhtmlxGantt/codebase/locale/locale_ca.js | 7 - .../dhtmlxGantt/codebase/locale/locale_cn.js | 7 - .../dhtmlxGantt/codebase/locale/locale_cs.js | 7 - .../dhtmlxGantt/codebase/locale/locale_da.js | 7 - .../dhtmlxGantt/codebase/locale/locale_de.js | 7 - .../dhtmlxGantt/codebase/locale/locale_el.js | 7 - .../dhtmlxGantt/codebase/locale/locale_es.js | 7 - .../dhtmlxGantt/codebase/locale/locale_fi.js | 7 - .../dhtmlxGantt/codebase/locale/locale_fr.js | 7 - .../dhtmlxGantt/codebase/locale/locale_he.js | 7 - .../dhtmlxGantt/codebase/locale/locale_hu.js | 7 - .../dhtmlxGantt/codebase/locale/locale_id.js | 7 - .../dhtmlxGantt/codebase/locale/locale_it.js | 7 - .../dhtmlxGantt/codebase/locale/locale_jp.js | 7 - .../dhtmlxGantt/codebase/locale/locale_nb.js | 7 - .../dhtmlxGantt/codebase/locale/locale_nl.js | 7 - .../dhtmlxGantt/codebase/locale/locale_no.js | 7 - .../dhtmlxGantt/codebase/locale/locale_pl.js | 7 - .../dhtmlxGantt/codebase/locale/locale_pt.js | 7 - .../dhtmlxGantt/codebase/locale/locale_ro.js | 7 - .../dhtmlxGantt/codebase/locale/locale_ru.js | 7 - .../dhtmlxGantt/codebase/locale/locale_si.js | 7 - .../dhtmlxGantt/codebase/locale/locale_sk.js | 7 - .../dhtmlxGantt/codebase/locale/locale_sv.js | 7 - .../dhtmlxGantt/codebase/locale/locale_tr.js | 7 - .../dhtmlxGantt/codebase/locale/locale_ua.js | 7 - .../codebase/skins/dhtmlxgantt_broadway.css | 5 - .../codebase/skins/dhtmlxgantt_meadow.css | 5 - .../codebase/skins/dhtmlxgantt_skyblue.css | 5 - .../codebase/skins/dhtmlxgantt_terrace.css | 5 - .../codebase/sources/dhtmlxgantt.js | 8378 ----------------- .../codebase/sources/dhtmlxgantt.js.map | 4 - .../sources/ext/dhtmlxgantt_quick_info.js | 181 - .../sources/ext/dhtmlxgantt_quick_info.js.map | 5 - .../sources/ext/dhtmlxgantt_tooltip.js | 145 - .../sources/ext/dhtmlxgantt_tooltip.js.map | 5 - .../codebase/sources/locale/locale.js | 50 - .../codebase/sources/locale/locale.js.map | 5 - .../codebase/sources/locale/locale_ar.js | 53 - .../codebase/sources/locale/locale_ar.js.map | 5 - .../codebase/sources/locale/locale_be.js | 54 - .../codebase/sources/locale/locale_be.js.map | 5 - .../codebase/sources/locale/locale_ca.js | 57 - .../codebase/sources/locale/locale_ca.js.map | 5 - .../codebase/sources/locale/locale_cn.js | 60 - .../codebase/sources/locale/locale_cn.js.map | 5 - .../codebase/sources/locale/locale_cs.js | 54 - .../codebase/sources/locale/locale_cs.js.map | 5 - .../codebase/sources/locale/locale_da.js | 54 - .../codebase/sources/locale/locale_da.js.map | 5 - .../codebase/sources/locale/locale_de.js | 54 - .../codebase/sources/locale/locale_de.js.map | 5 - .../codebase/sources/locale/locale_el.js | 54 - .../codebase/sources/locale/locale_el.js.map | 5 - .../codebase/sources/locale/locale_es.js | 57 - .../codebase/sources/locale/locale_es.js.map | 5 - .../codebase/sources/locale/locale_fi.js | 54 - .../codebase/sources/locale/locale_fi.js.map | 5 - .../codebase/sources/locale/locale_fr.js | 52 - .../codebase/sources/locale/locale_fr.js.map | 5 - .../codebase/sources/locale/locale_he.js | 54 - .../codebase/sources/locale/locale_he.js.map | 5 - .../codebase/sources/locale/locale_hu.js | 54 - .../codebase/sources/locale/locale_hu.js.map | 5 - .../codebase/sources/locale/locale_id.js | 5 - .../codebase/sources/locale/locale_id.js.map | 5 - .../codebase/sources/locale/locale_it.js | 54 - .../codebase/sources/locale/locale_it.js.map | 5 - .../codebase/sources/locale/locale_jp.js | 57 - .../codebase/sources/locale/locale_jp.js.map | 5 - .../codebase/sources/locale/locale_nb.js | 54 - .../codebase/sources/locale/locale_nb.js.map | 5 - .../codebase/sources/locale/locale_nl.js | 54 - .../codebase/sources/locale/locale_nl.js.map | 5 - .../codebase/sources/locale/locale_no.js | 54 - .../codebase/sources/locale/locale_no.js.map | 5 - .../codebase/sources/locale/locale_pl.js | 54 - .../codebase/sources/locale/locale_pl.js.map | 5 - .../codebase/sources/locale/locale_pt.js | 63 - .../codebase/sources/locale/locale_pt.js.map | 5 - .../codebase/sources/locale/locale_ro.js | 58 - .../codebase/sources/locale/locale_ro.js.map | 5 - .../codebase/sources/locale/locale_ru.js | 54 - .../codebase/sources/locale/locale_ru.js.map | 5 - .../codebase/sources/locale/locale_si.js | 54 - .../codebase/sources/locale/locale_si.js.map | 5 - .../codebase/sources/locale/locale_sk.js | 54 - .../codebase/sources/locale/locale_sk.js.map | 5 - .../codebase/sources/locale/locale_sv.js | 54 - .../codebase/sources/locale/locale_sv.js.map | 5 - .../codebase/sources/locale/locale_tr.js | 54 - .../codebase/sources/locale/locale_tr.js.map | 5 - .../codebase/sources/locale/locale_ua.js | 54 - .../codebase/sources/locale/locale_ua.js.map | 5 - .../sources/skins/dhtmlxgantt_broadway.css | 1371 --- .../sources/skins/dhtmlxgantt_meadow.css | 1267 --- .../sources/skins/dhtmlxgantt_skyblue.css | 1236 --- .../sources/skins/dhtmlxgantt_terrace.css | 1269 --- phpgwapi/js/dhtmlxGantt/index.html | 107 - phpgwapi/js/dhtmlxGantt/license.txt | 339 - phpgwapi/js/dhtmlxGantt/readme.txt | 18 - .../js/dhtmlxGantt/sources/dhtmlxcommon.js | 938 -- .../js/dhtmlxGantt/sources/dhtmlxgantt.js | 6122 ------------ phpgwapi/js/dhtmlxGantt/whatsnew.txt | 40 - 123 files changed, 24532 deletions(-) delete mode 100644 phpgwapi/js/dhtmlxGantt/codebase/dhtmlxcommon.js delete mode 100644 phpgwapi/js/dhtmlxGantt/codebase/dhtmlxgantt.css delete mode 100644 phpgwapi/js/dhtmlxGantt/codebase/dhtmlxgantt.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/ext/dhtmlxgantt_quick_info.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/ext/dhtmlxgantt_tooltip.js delete mode 100644 phpgwapi/js/dhtmlxGantt/codebase/imgs/arr.gif delete mode 100644 phpgwapi/js/dhtmlxGantt/codebase/imgs/bg.png delete mode 100644 phpgwapi/js/dhtmlxGantt/codebase/imgs/bg_week.png delete mode 100644 phpgwapi/js/dhtmlxGantt/codebase/imgs/menu/menu_bg.png delete mode 100644 phpgwapi/js/dhtmlxGantt/codebase/imgs/menu/menu_selection.png delete mode 100644 phpgwapi/js/dhtmlxGantt/codebase/imgs/menu/window_tr.png delete mode 100644 phpgwapi/js/dhtmlxGantt/codebase/imgs/minus.gif delete mode 100644 phpgwapi/js/dhtmlxGantt/codebase/imgs/parentnode_filled.png delete mode 100644 phpgwapi/js/dhtmlxGantt/codebase/imgs/plus.gif delete mode 100644 phpgwapi/js/dhtmlxGantt/codebase/imgs/progress_bg.png delete mode 100644 phpgwapi/js/dhtmlxGantt/codebase/imgs/progress_filled.png delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_ar.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_be.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_ca.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_cn.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_cs.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_da.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_de.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_el.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_es.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_fi.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_fr.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_he.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_hu.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_id.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_it.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_jp.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_nb.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_nl.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_no.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_pl.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_pt.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_ro.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_ru.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_si.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_sk.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_sv.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_tr.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_ua.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/skins/dhtmlxgantt_broadway.css delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/skins/dhtmlxgantt_meadow.css delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/skins/dhtmlxgantt_skyblue.css delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/skins/dhtmlxgantt_terrace.css delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/dhtmlxgantt.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/dhtmlxgantt.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/ext/dhtmlxgantt_quick_info.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/ext/dhtmlxgantt_quick_info.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/ext/dhtmlxgantt_tooltip.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/ext/dhtmlxgantt_tooltip.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ar.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ar.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_be.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_be.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ca.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ca.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_cn.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_cn.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_cs.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_cs.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_da.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_da.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_de.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_de.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_el.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_el.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_es.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_es.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_fi.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_fi.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_fr.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_fr.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_he.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_he.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_hu.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_hu.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_id.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_id.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_it.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_it.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_jp.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_jp.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_nb.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_nb.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_nl.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_nl.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_no.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_no.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_pl.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_pl.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_pt.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_pt.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ro.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ro.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ru.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ru.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_si.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_si.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_sk.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_sk.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_sv.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_sv.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_tr.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_tr.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ua.js delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ua.js.map delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_broadway.css delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_meadow.css delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_skyblue.css delete mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_terrace.css delete mode 100644 phpgwapi/js/dhtmlxGantt/index.html delete mode 100755 phpgwapi/js/dhtmlxGantt/license.txt delete mode 100755 phpgwapi/js/dhtmlxGantt/readme.txt delete mode 100644 phpgwapi/js/dhtmlxGantt/sources/dhtmlxcommon.js delete mode 100644 phpgwapi/js/dhtmlxGantt/sources/dhtmlxgantt.js delete mode 100755 phpgwapi/js/dhtmlxGantt/whatsnew.txt diff --git a/phpgwapi/js/dhtmlxGantt/codebase/dhtmlxcommon.js b/phpgwapi/js/dhtmlxGantt/codebase/dhtmlxcommon.js deleted file mode 100644 index 208124b8c7..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/dhtmlxcommon.js +++ /dev/null @@ -1,933 +0,0 @@ -dhtmlx=function(obj){ - for (var a in obj) dhtmlx[a]=obj[a]; - return dhtmlx; //simple singleton -}; -dhtmlx.extend_api=function(name,map,ext){ - var t = window[name]; - if (!t) return; //component not defined - window[name]=function(obj){ - if (obj && typeof obj == "object" && !obj.tagName){ - var that = t.apply(this,(map._init?map._init(obj):arguments)); - //global settings - for (var a in dhtmlx) - if (map[a]) this[map[a]](dhtmlx[a]); - //local settings - for (var a in obj){ - if (map[a]) this[map[a]](obj[a]); - else if (a.indexOf("on")==0){ - this.attachEvent(a,obj[a]); - } - } - } else - var that = t.apply(this,arguments); - if (map._patch) map._patch(this); - return that||this; - }; - window[name].prototype=t.prototype; - if (ext) - dhtmlXHeir(window[name].prototype,ext); -}; - -dhtmlxAjax={ - get:function(url,callback){ - var t=new dtmlXMLLoaderObject(true); - t.async=(arguments.length<3); - t.waitCall=callback; - t.loadXML(url) - return t; - }, - post:function(url,post,callback){ - var t=new dtmlXMLLoaderObject(true); - t.async=(arguments.length<4); - t.waitCall=callback; - t.loadXML(url,true,post) - return t; - }, - getSync:function(url){ - return this.get(url,null,true) - }, - postSync:function(url,post){ - return this.post(url,post,null,true); - } -} - -/** - * @desc: xmlLoader object - * @type: private - * @param: funcObject - xml parser function - * @param: object - jsControl object - * @param: async - sync/async mode (async by default) - * @param: rSeed - enable/disable random seed ( prevent IE caching) - * @topic: 0 - */ -function dtmlXMLLoaderObject(funcObject, dhtmlObject, async, rSeed){ - this.xmlDoc=""; - - if (typeof (async) != "undefined") - this.async=async; - else - this.async=true; - - this.onloadAction=funcObject||null; - this.mainObject=dhtmlObject||null; - this.waitCall=null; - this.rSeed=rSeed||false; - return this; -}; -/** - * @desc: xml loading handler - * @type: private - * @param: dtmlObject - xmlLoader object - * @topic: 0 - */ -dtmlXMLLoaderObject.prototype.waitLoadFunction=function(dhtmlObject){ - var once = true; - this.check=function (){ - if ((dhtmlObject)&&(dhtmlObject.onloadAction != null)){ - if ((!dhtmlObject.xmlDoc.readyState)||(dhtmlObject.xmlDoc.readyState == 4)){ - if (!once) - return; - - once=false; //IE 5 fix - if (typeof dhtmlObject.onloadAction == "function") - dhtmlObject.onloadAction(dhtmlObject.mainObject, null, null, null, dhtmlObject); - - if (dhtmlObject.waitCall){ - dhtmlObject.waitCall.call(this,dhtmlObject); - dhtmlObject.waitCall=null; - } - } - } - }; - return this.check; -}; - -/** - * @desc: return XML top node - * @param: tagName - top XML node tag name (not used in IE, required for Safari and Mozilla) - * @type: private - * @returns: top XML node - * @topic: 0 - */ -dtmlXMLLoaderObject.prototype.getXMLTopNode=function(tagName, oldObj){ - if (this.xmlDoc.responseXML){ - var temp = this.xmlDoc.responseXML.getElementsByTagName(tagName); - if(temp.length==0 && tagName.indexOf(":")!=-1) - var temp = this.xmlDoc.responseXML.getElementsByTagName((tagName.split(":"))[1]); - var z = temp[0]; - } else - var z = this.xmlDoc.documentElement; - - if (z){ - this._retry=false; - return z; - } - - if ((_isIE)&&(!this._retry)){ - //fall back to MS.XMLDOM - var xmlString = this.xmlDoc.responseText; - var oldObj = this.xmlDoc; - this._retry=true; - this.xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); - this.xmlDoc.async=false; - this.xmlDoc["loadXM"+"L"](xmlString); - - return this.getXMLTopNode(tagName, oldObj); - } - dhtmlxError.throwError("LoadXML", "Incorrect XML", [ - (oldObj||this.xmlDoc), - this.mainObject - ]); - - return document.createElement("DIV"); -}; - -/** - * @desc: load XML from string - * @type: private - * @param: xmlString - xml string - * @topic: 0 - */ -dtmlXMLLoaderObject.prototype.loadXMLString=function(xmlString){ - { - try{ - var parser = new DOMParser(); - this.xmlDoc=parser.parseFromString(xmlString, "text/xml"); - } - catch (e){ - this.xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); - this.xmlDoc.async=this.async; - this.xmlDoc["loadXM"+"L"](xmlString); - } - } - - this.onloadAction(this.mainObject, null, null, null, this); - - if (this.waitCall){ - this.waitCall(); - this.waitCall=null; - } -} -/** - * @desc: load XML - * @type: private - * @param: filePath - xml file path - * @param: postMode - send POST request - * @param: postVars - list of vars for post request - * @topic: 0 - */ -dtmlXMLLoaderObject.prototype.loadXML=function(filePath, postMode, postVars, rpc){ - if (this.rSeed) - filePath+=((filePath.indexOf("?") != -1) ? "&" : "?")+"a_dhx_rSeed="+(new Date()).valueOf(); - this.filePath=filePath; - - if ((!_isIE)&&(window.XMLHttpRequest)) - this.xmlDoc=new XMLHttpRequest(); - else { - if (document.implementation&&document.implementation.createDocument){ - this.xmlDoc=document.implementation.createDocument("", "", null); - this.xmlDoc.onload=new this.waitLoadFunction(this); - this.xmlDoc.load(filePath); - return; - } else - this.xmlDoc=new ActiveXObject("Microsoft.XMLHTTP"); - } - - if (this.async) - this.xmlDoc.onreadystatechange=new this.waitLoadFunction(this); - this.xmlDoc.open(postMode ? "POST" : "GET", filePath, this.async); - - if (rpc){ - this.xmlDoc.setRequestHeader("User-Agent", "dhtmlxRPC v0.1 ("+navigator.userAgent+")"); - this.xmlDoc.setRequestHeader("Content-type", "text/xml"); - } - - else if (postMode) - this.xmlDoc.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); - - this.xmlDoc.setRequestHeader("X-Requested-With","XMLHttpRequest"); - this.xmlDoc.send(null||postVars); - - if (!this.async) - (new this.waitLoadFunction(this))(); -}; -/** - * @desc: destructor, cleans used memory - * @type: private - * @topic: 0 - */ -dtmlXMLLoaderObject.prototype.destructor=function(){ - this._filterXPath = null; - this._getAllNamedChilds = null; - this._retry = null; - this.async = null; - this.rSeed = null; - this.filePath = null; - this.onloadAction = null; - this.mainObject = null; - this.xmlDoc = null; - this.doXPath = null; - this.doXPathOpera = null; - this.doXSLTransToObject = null; - this.doXSLTransToString = null; - this.loadXML = null; - this.loadXMLString = null; - // this.waitLoadFunction = null; - this.doSerialization = null; - this.xmlNodeToJSON = null; - this.getXMLTopNode = null; - this.setXSLParamValue = null; - return null; -} - -dtmlXMLLoaderObject.prototype.xmlNodeToJSON = function(node){ - var t={}; - for (var i=0; i-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){ //mimic FF behavior for Safari 3.1+ - _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]) -} - - -//multibrowser Xpath processor -dtmlXMLLoaderObject.prototype.doXPath=function(xpathExp, docObj, namespace, result_type){ - if (_isKHTML || (!_isIE && !window.XPathResult)) - return this.doXPathOpera(xpathExp, docObj); - - if (_isIE){ //IE - if (!docObj) - if (!this.xmlDoc.nodeName) - docObj=this.xmlDoc.responseXML - else - docObj=this.xmlDoc; - - if (!docObj) - dhtmlxError.throwError("LoadXML", "Incorrect XML", [ - (docObj||this.xmlDoc), - this.mainObject - ]); - - if (namespace != null) - docObj.setProperty("SelectionNamespaces", "xmlns:xsl='"+namespace+"'"); // - - if (result_type == 'single'){ - return docObj.selectSingleNode(xpathExp); - } - else { - return docObj.selectNodes(xpathExp)||new Array(0); - } - } else { //Mozilla - var nodeObj = docObj; - - if (!docObj){ - if (!this.xmlDoc.nodeName){ - docObj=this.xmlDoc.responseXML - } - else { - docObj=this.xmlDoc; - } - } - - if (!docObj) - dhtmlxError.throwError("LoadXML", "Incorrect XML", [ - (docObj||this.xmlDoc), - this.mainObject - ]); - - if (docObj.nodeName.indexOf("document") != -1){ - nodeObj=docObj; - } - else { - nodeObj=docObj; - docObj=docObj.ownerDocument; - } - var retType = XPathResult.ANY_TYPE; - - if (result_type == 'single') - retType=XPathResult.FIRST_ORDERED_NODE_TYPE - var rowsCol = new Array(); - var col = docObj.evaluate(xpathExp, nodeObj, function(pref){ - return namespace - }, retType, null); - - if (retType == XPathResult.FIRST_ORDERED_NODE_TYPE){ - return col.singleNodeValue; - } - var thisColMemb = col.iterateNext(); - - while (thisColMemb){ - rowsCol[rowsCol.length]=thisColMemb; - thisColMemb=col.iterateNext(); - } - return rowsCol; - } -} - -function _dhtmlxError(type, name, params){ - if (!this.catches) - this.catches=new Array(); - - return this; -} - -_dhtmlxError.prototype.catchError=function(type, func_name){ - this.catches[type]=func_name; -} -_dhtmlxError.prototype.throwError=function(type, name, params){ - if (this.catches[type]) - return this.catches[type](type, name, params); - - if (this.catches["ALL"]) - return this.catches["ALL"](type, name, params); - - alert("Error type: "+arguments[0]+"\nDescription: "+arguments[1]); - return null; -} - -window.dhtmlxError=new _dhtmlxError(); - - -//opera fake, while 9.0 not released -//multibrowser Xpath processor -dtmlXMLLoaderObject.prototype.doXPathOpera=function(xpathExp, docObj){ - //this is fake for Opera - var z = xpathExp.replace(/[\/]+/gi, "/").split('/'); - var obj = null; - var i = 1; - - if (!z.length) - return []; - - if (z[0] == ".") - obj=[docObj]; else if (z[0] == ""){ - obj=(this.xmlDoc.responseXML||this.xmlDoc).getElementsByTagName(z[i].replace(/\[[^\]]*\]/g, "")); - i++; - } else - return []; - - for (i; i < z.length; i++)obj=this._getAllNamedChilds(obj, z[i]); - - if (z[i-1].indexOf("[") != -1) - obj=this._filterXPath(obj, z[i-1]); - return obj; -} - -dtmlXMLLoaderObject.prototype._filterXPath=function(a, b){ - var c = new Array(); - var b = b.replace(/[^\[]*\[\@/g, "").replace(/[\[\]\@]*/g, ""); - - for (var i = 0; i < a.length; i++) - if (a[i].getAttribute(b)) - c[c.length]=a[i]; - - return c; -} -dtmlXMLLoaderObject.prototype._getAllNamedChilds=function(a, b){ - var c = new Array(); - - if (_isKHTML) - b=b.toUpperCase(); - - for (var i = 0; i < a.length; i++)for (var j = 0; j < a[i].childNodes.length; j++){ - if (_isKHTML){ - if (a[i].childNodes[j].tagName&&a[i].childNodes[j].tagName.toUpperCase() == b) - c[c.length]=a[i].childNodes[j]; - } - - else if (a[i].childNodes[j].tagName == b) - c[c.length]=a[i].childNodes[j]; - } - - return c; -} - -function dhtmlXHeir(a, b){ - for (var c in b) - if (typeof (b[c]) == "function") - a[c]=b[c]; - return a; -} - -function dhtmlxEvent(el, event, handler){ - if (el.addEventListener) - el.addEventListener(event, handler, false); - - else if (el.attachEvent) - el.attachEvent("on"+event, handler); -} - -//============= XSL Extension =================================== - -dtmlXMLLoaderObject.prototype.xslDoc=null; -dtmlXMLLoaderObject.prototype.setXSLParamValue=function(paramName, paramValue, xslDoc){ - if (!xslDoc) - xslDoc=this.xslDoc - - if (xslDoc.responseXML) - xslDoc=xslDoc.responseXML; - var item = - this.doXPath("/xsl:stylesheet/xsl:variable[@name='"+paramName+"']", xslDoc, - "http:/\/www.w3.org/1999/XSL/Transform", "single"); - - if (item != null) - item.firstChild.nodeValue=paramValue -} -dtmlXMLLoaderObject.prototype.doXSLTransToObject=function(xslDoc, xmlDoc){ - if (!xslDoc) - xslDoc=this.xslDoc; - - if (xslDoc.responseXML) - xslDoc=xslDoc.responseXML - - if (!xmlDoc) - xmlDoc=this.xmlDoc; - - if (xmlDoc.responseXML) - xmlDoc=xmlDoc.responseXML - - //MOzilla - if (!_isIE){ - if (!this.XSLProcessor){ - this.XSLProcessor=new XSLTProcessor(); - this.XSLProcessor.importStylesheet(xslDoc); - } - var result = this.XSLProcessor.transformToDocument(xmlDoc); - } else { - var result = new ActiveXObject("Msxml2.DOMDocument.3.0"); - try{ - xmlDoc.transformNodeToObject(xslDoc, result); - }catch(e){ - result = xmlDoc.transformNode(xslDoc); - } - } - return result; -} - -dtmlXMLLoaderObject.prototype.doXSLTransToString=function(xslDoc, xmlDoc){ - var res = this.doXSLTransToObject(xslDoc, xmlDoc); - if(typeof(res)=="string") - return res; - return this.doSerialization(res); -} - -dtmlXMLLoaderObject.prototype.doSerialization=function(xmlDoc){ - if (!xmlDoc) - xmlDoc=this.xmlDoc; - if (xmlDoc.responseXML) - xmlDoc=xmlDoc.responseXML - if (!_isIE){ - var xmlSerializer = new XMLSerializer(); - return xmlSerializer.serializeToString(xmlDoc); - } else - return xmlDoc.xml; -} - -/** -* @desc: -* @type: private -*/ -dhtmlxEventable=function(obj){ - 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)); //return ID (event name & event ID) - } - 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(':'); //get EventName and ID - this[list[0]].removeEvent(list[1]); //remove event - } - } - obj.detachAllEvents = function(){ - for (var name in this){ - if (name.indexOf("ev_")==0) - delete this[name]; - } - } -} diff --git a/phpgwapi/js/dhtmlxGantt/codebase/dhtmlxgantt.css b/phpgwapi/js/dhtmlxGantt/codebase/dhtmlxgantt.css deleted file mode 100644 index 5a2e2b6203..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/dhtmlxgantt.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -.gridHoverStyle{background-color:#fff3a1}.gridSelection{background-color:#fff3a1}.timelineSelection{background-color:#fff3a1}.gantt_grid_scale .gantt_grid_head_cell{color:#a6a6a6;border-top:0!important;border-right:0!important}.gantt_grid_data .gantt_cell{border-right:0;color:#454545}.gantt_task_link .gantt_link_arrow_right{border-width:6px;margin-top:-3px}.gantt_task_link .gantt_link_arrow_left{border-width:6px;margin-left:-6px;margin-top:-3px}.gantt_task_link .gantt_link_arrow_top{border-width:6px}.gantt_task_link .gantt_link_arrow_down{border-width:6px}.gantt_task_line .gantt_task_progress_drag{bottom:-4px;height:16px;margin-left:-8px;width:16px}.chartHeaderBg{background-color:#fff}.gantt_task .gantt_task_scale .gantt_scale_cell{color:#a6a6a6;border-right:1px solid #ebebeb}.gantt_row.gantt_project,.gantt_row.odd.gantt_project{background-color:#edffef}.gantt_task_row.gantt_project,.gantt_task_row.odd.gantt_project{background-color:#f5fff6}.gantt_task_line.gantt_project{background-color:#65c16f;border:1px solid #3c9445}.gantt_task_line.gantt_project .gantt_task_progress{background-color:#46ad51}.buttonBg{background:#fff}.dhx_cal_light .dhx_btn_set{margin:5px 10px}.dhx_btn_set.dhx_cancel_btn_set{background:#fff;color:#454545;border:1px solid #cecece}.dhx_btn_set.dhx_save_btn_set{background:#3db9d3;text-shadow:0 -1px 0 #248a9f;color:#fff}.dhx_btn_set.dhx_delete_btn_set{text-shadow:0 -1px 0 #6f6f6f;background:#ec8e00;text-shadow:0 -1px 0 #a60;color:#fff}.dhx_delete_btn{margin-top:2px;width:20px}.dhx_cal_light_wide{padding-left:0!important;padding-right:0!important}.dhx_cal_light_wide .dhx_cal_larea{border-left:0!important;border-right:0!important}.dhtmlx_popup_button.dhtmlx_ok_button{background:#3db9d3;text-shadow:0 -1px 0 #248a9f;color:#fff;font-weight:700;border-width:0}.dhtmlx_popup_button.dhtmlx_cancel_button{font-weight:700;color:#454544}.dhx_qi_big_icon.icon_edit{color:#454545;background:#fff}.dhx_qi_big_icon.icon_delete{text-shadow:0 -1px 0 #a60;background:#ec8e00;color:#fff;border-width:0}.gantt_container{font-family:Arial;font-size:13px;border:1px solid #cecece;position:relative;white-space:nowrap}.gantt_grid{border-right:1px solid #cecece}.gantt_task_scroll{overflow-x:scroll}.gantt_task{position:relative}.gantt_task,.gantt_grid{overflow-x:hidden;overflow-y:hidden;display:inline-block;vertical-align:top}.gantt_grid_scale,.gantt_task_scale{color:#6b6b6b;font-size:12px;border-bottom:1px solid #cecece}.gantt_grid_scale{background-color:#fff}.gantt_task_scale{background-color:#fff}.gantt_scale_line{box-sizing:border-box;-moz-box-sizing:border-box;border-top:1px solid #cecece}.gantt_scale_line:first-child{border-top:0}.gantt_grid_head_cell{display:inline-block;vertical-align:top;border-right:1px solid #cecece;text-align:center;position:relative;cursor:default;height:100%;box-sizing:border-box;-moz-box-sizing:border-box;line-height:33px;-moz-user-select:-moz-none;-webkit-user-select:none;-user-select:none}.gantt_scale_line{clear:both}.gantt_grid_data{width:100%;overflow:hidden}.gantt_row{position:relative;-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_add,.gantt_grid_head_add{width:100%;height:100%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTQ3MjMyMENDNkI0MTFFMjk4MTI5QTg3MDhFNDVDQTkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTQ3MjMyMERDNkI0MTFFMjk4MTI5QTg3MDhFNDVDQTkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1NDcyMzIwQUM2QjQxMUUyOTgxMjlBODcwOEU0NUNBOSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1NDcyMzIwQkM2QjQxMUUyOTgxMjlBODcwOEU0NUNBOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PshZT8UAAABbSURBVHjaYrTdeZmBEsCER+4wEP+H4sPkGGCDg020ARR7gb4GIAcYDKMDdPnDyAbYkGG5DVW9cIQMvUdBBAuUY4vDz8iAcZinA2zgCHqAYQMseAywJcYFAAEGAM+UFGuohFczAAAAAElFTkSuQmCC);background-position:center center;background-repeat:no-repeat;cursor:pointer;position:relative;-moz-opacity:.3;opacity:.3}.gantt_grid_head_cell.gantt_grid_head_add{-moz-opacity:.6;opacity:.6;top:0}.gantt_grid_head_cell.gantt_grid_head_add:hover{-moz-opacity:1;opacity:1}.gantt_grid_data .gantt_row:hover,.gantt_grid_data .gantt_row.odd:hover{background-color:#fff3a1}.gantt_grid_data .gantt_row:hover .gantt_add,.gantt_grid_data .gantt_row.odd:hover .gantt_add{-moz-opacity:1;opacity:1}.gantt_task_row,.gantt_row{border-bottom:1px solid #ebebeb}.gantt_row,.gantt_task_row{background-color:#fff}.gantt_row.odd,.gantt_task_row.odd{background-color:#fff}.gantt_row,.gantt_cell,.gantt_task_row,.gantt_task_cell,.gantt_grid_head_cell,.gantt_scale_cell{box-sizing:border-box;-moz-box-sizing:border-box}.gantt_grid_head_cell,.gantt_scale_cell{line-height:inherit}.gantt_cell{display:inline-block;vertical-align:top;border-right:1px solid #ebebeb;padding-left:6px;padding-right:6px;height:100%;overflow:hidden;white-space:nowrap;font-size:13px}.gantt_grid_scale .gantt_last_cell,.gantt_grid_data .gantt_last_cell,.gantt_task_scale .gantt_last_cell,.gantt_task_bg .gantt_last_cell{border-right-width:0}.gantt_task_bg{overflow:hidden}.gantt_scale_cell{display:inline-block;white-space:nowrap;overflow:hidden;border-right:1px solid #cecece;text-align:center;height:100%}.gantt_task_cell{display:inline-block;height:100%;border-right:1px solid #ebebeb}.gantt_ver_scroll{width:0;background-color:transparent;height:1px;overflow-x:hidden;overflow-y:scroll;display:none;position:absolute;right:0}.gantt_ver_scroll>div{width:1px;height:1px}.gantt_hor_scroll{height:0;background-color:transparent;width:100%;clear:both;overflow-x:scroll;overflow-y:hidden;display:none}.gantt_hor_scroll>div{width:5000px;height:1px}.gantt_tree_indent{width:15px;height:100%;display:inline-block}.gantt_tree_content,.gantt_tree_icon{vertical-align:top}.gantt_tree_icon{width:28px;height:100%;display:inline-block;background-repeat:no-repeat;background-position:center center}.gantt_tree_content{height:100%;display:inline-block}.gantt_tree_icon.gantt_open{background-image:url(data:image/gif;base64,R0lGODlhEgASALMJAMrKyt3d3ejp6d7f3+/v75aWlvf39////wAAAP///wAAAAAAAAAAAAAAAAAAAAAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6M0I5RTczQjVDMDdBMTFFMTgxRjc4Mzk4M0Q3MjVFQzAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6M0I5RTczQjZDMDdBMTFFMTgxRjc4Mzk4M0Q3MjVFQzAiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozQjlFNzNCM0MwN0ExMUUxODFGNzgzOTgzRDcyNUVDMCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDozQjlFNzNCNEMwN0ExMUUxODFGNzgzOTgzRDcyNUVDMCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAEAAAkALAAAAAASABIAAARJMMlJq704661B+SAIXAVhnKhBFKSZnmuLImhslXPN3ibi+6pdBXc4IIpB2YkGE1IKAoL0ICUInJNCYMDtDgJYiScUGnHO6LQkAgA7);width:18px;cursor:pointer}.gantt_tree_icon.gantt_close{background-image:url(data:image/gif;base64,R0lGODlhEgASALMJAMrKyt3d3ejp6d7f3+/v75aWlvf39wAAAP///////wAAAAAAAAAAAAAAAAAAAAAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzY0QzNGM0VDMDdBMTFFMUE3MDlCNUM2QjU1NDA5RjgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzY0QzNGM0ZDMDdBMTFFMUE3MDlCNUM2QjU1NDA5RjgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozNjRDM0YzQ0MwN0ExMUUxQTcwOUI1QzZCNTU0MDlGOCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDozNjRDM0YzREMwN0ExMUUxQTcwOUI1QzZCNTU0MDlGOCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAEAAAkALAAAAAASABIAAARDMMlJq704661B+SAIXAVhnKhBFKSZnmv7wqxVzmpd3Uff5zKEUAi0uV4xm4DAbBIEOkohMKhaB4HoxBMKjTjgsFgSAQA7);width:18px;cursor:pointer}.gantt_tree_icon.gantt_blank{width:18px}.gantt_tree_icon.gantt_folder_open{background-image:url(data:image/gif;base64,R0lGODlhEgASAJECAJeXl7Gvrf///wAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTdDRDM3QzVDMDZEMTFFMUJGMzhFMDhCN0RGRjBGQ0YiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTdDRDM3QzZDMDZEMTFFMUJGMzhFMDhCN0RGRjBGQ0YiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1N0NEMzdDM0MwNkQxMUUxQkYzOEUwOEI3REZGMEZDRiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMzdDNEMwNkQxMUUxQkYzOEUwOEI3REZGMEZDRiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAEAAAIALAAAAAASABIAAAIzlI+pywcPm3mhWgkCsjBOvVkimElG9ZlCBlXd+2XjjLKg5GqoeZXqvsOQXK/ijUZTKVUFADs=)}.gantt_tree_icon.gantt_folder_closed{background-image:url(data:image/gif;base64,R0lGODlhEgASAJECAJeXl7Gvrf///wAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTAyMTU1RTNDMDZEMTFFMUJGNzZCRThBRkFCRjg4MTIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTAyMTU1RTRDMDZEMTFFMUJGNzZCRThBRkFCRjg4MTIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MDIxNTVFMUMwNkQxMUUxQkY3NkJFOEFGQUJGODgxMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1MDIxNTVFMkMwNkQxMUUxQkY3NkJFOEFGQUJGODgxMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAEAAAIALAAAAAASABIAAAIwlI+pywcPm3mhWgkCsjBOvVkimElG9ZlCuYIY6TYs+6bmHDO4igfdD3GNhheV0VQAADs=)}.gantt_tree_icon.gantt_file{background-image:url(data:image/gif;base64,R0lGODlhEgASAJECAJeXl7Gvrf///wAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NzkxQzI4RjZDMDZEMTFFMTgwRjhBQURDQzI3NDU3QUEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NzkxQzI4RjdDMDZEMTFFMTgwRjhBQURDQzI3NDU3QUEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3OTFDMjhGNEMwNkQxMUUxODBGOEFBRENDMjc0NTdBQSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3OTFDMjhGNUMwNkQxMUUxODBGOEFBRENDMjc0NTdBQSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAEAAAIALAAAAAASABIAAAIylI+pwN16QJiUQiFThRlJm3RRFYSlR5qXMKmXaMDuuMoyOi8n/e6xn8NMHETgh5RaKQsAOw==)}.gantt_grid_head_cell .gantt_sort{position:absolute;right:5px;top:8px;width:7px;height:13px;background-repeat:no-repeat;background-position:center center}.gantt_grid_head_cell .gantt_sort.gantt_asc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR4nGNgQAKGxib/GbABkIS7b8B/DAUwCRiGK0CXwFBAb1DfP/U/LszwHwi2X7qFgUEArBtdAVwCBmAKMCSQFSDzAWXXaOHsXeqkAAAAAElFTkSuQmCC)}.gantt_grid_head_cell .gantt_sort.gantt_desc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR42mNgQAL1/VP/M2ADIIntF2/9x1AAlrh0C47hCmA60DFYwX88gIFGwNDY5D8uDFbg7hvwHx2jmIBTAlkB0e4BAEjlaNtBWJPnAAAAAElFTkSuQmCC)}.gantt_inserted,.gantt_updated{font-weight:700}.gantt_deleted{text-decoration:line-through}.gantt_invalid{background-color:FFE0E0}.gantt_error{color:red}.dhtmlx_message_area{position:fixed;right:5px;width:250px;z-index:1000}.dhtmlx-info{min-width:120px;padding:4px 4px 4px 20px;font-family:Arial;z-index:10000;margin:5px;margin-bottom:10px;-webkit-transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;transition:all .5s ease}.dhtmlx-info.hidden{height:0;padding:0;border-width:0;margin:0;overflow:hidden}.dhtmlx_modal_box{overflow:hidden;display:inline-block;min-width:250px;width:250px;text-align:center;position:fixed;z-index:20000;box-shadow:3px 3px 3px rgba(0,0,0,.07);font-family:Arial;border-radius:6px;border:1px solid #cecece;background:#fff}.dhtmlx_popup_title{border-top-left-radius:6px;border-top-right-radius:6px;border-width:0}.dhtmlx_button,.dhtmlx_popup_button{border:1px solid #cecece;height:30px;line-height:30px;display:inline-block;margin:0 5px;border-radius:4px;background:#fff}.dhtmlx-info,.dhtmlx_popup_button,.dhtmlx_button{user-select:none;-webkit-user-select:none;-moz-user-select:-moz-none;cursor:pointer}.dhtmlx_popup_text{overflow:hidden}.dhtmlx_popup_controls{border-radius:6px;padding:10px}.dhtmlx_popup_button{min-width:100px}div.dhx_modal_cover{background-color:#000;cursor:default;filter:alpha(opacity=20);opacity:.2;position:fixed;z-index:19999;left:0;top:0;width:100%;height:100%;border:0;zoom:1}.dhtmlx-info img,.dhtmlx_modal_box img{float:left;margin-right:20px}.dhtmlx-alert-error,.dhtmlx-confirm-error{border:1px solid red}.dhtmlx_button input,.dhtmlx_popup_button div{border-radius:4px;font-size:14px;-moz-box-sizing:content-box;box-sizing:content-box;padding:0;margin:0;vertical-align:top}.dhtmlx_popup_title{color:#fff;text-shadow:1px 1px #000;height:40px;line-height:40px;font-size:20px}.dhtmlx_popup_text{margin:15px 15px 5px;font-size:14px;color:#000;min-height:30px;border-radius:6px}.dhtmlx-info,.dhtmlx-error{font-size:14px;color:#000;box-shadow:3px 3px 3px rgba(0,0,0,.07);padding:0;background-color:#FFF;border-radius:3px;border:1px solid #fff}.dhtmlx-info div{padding:5px 10px;background-color:#fff;border-radius:3px;border:1px solid #cecece}.dhtmlx-error{background-color:#d81b1b;border:1px solid #ff3c3c;box-shadow:3px 3px 3px rgba(0,0,0,.07)}.dhtmlx-error div{background-color:#d81b1b;border:1px solid #940000;color:#FFF}.gantt_grid div,.gantt_data_area div{-ms-touch-action:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.gantt_data_area{position:relative;overflow-x:hidden;overflow-y:hidden;-moz-user-select:-moz-none;-webkit-user-select:none;-user-select:none}.gantt_links_area{position:absolute;left:0;top:0}.gantt_task_content,.gantt_task_progress,.gantt_side_content{line-height:inherit;overflow:hidden;height:100%}.gantt_task_content{font-size:12px;color:#fff;width:100%;position:absolute;white-space:nowrap;text-align:center}.gantt_task_progress{text-align:center;z-index:0;background:#299cb4}.gantt_task_line{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;position:absolute;-moz-box-sizing:border-box;box-sizing:border-box;background-color:#3db9d3;border:1px solid #2898b0;-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_task_line.gantt_drag_move div{cursor:move}.gantt_side_content{position:absolute;white-space:nowrap;color:#6e6e6e;bottom:7px;font-size:11px}.gantt_side_content.gantt_left{right:100%;padding-right:15px}.gantt_side_content.gantt_right{left:100%;padding-left:15px}.gantt_side_content.gantt_link_crossing{bottom:8.75px}.gantt_task_link .gantt_line_wrapper,.gantt_link_arrow{position:absolute;cursor:pointer}.gantt_line_wrapper div{background-color:#ffa011}.gantt_task_link:hover .gantt_line_wrapper div{box-shadow:0 0 5px 0 #ffa011}.gantt_task_link div.gantt_link_arrow{background-color:transparent;border-style:solid;width:0;height:0}.gantt_link_control{position:absolute;width:13px;top:0}.gantt_link_control div{display:none;cursor:pointer;box-sizing:border-box;position:relative;top:50%;margin-top:-7.5px;vertical-align:middle;border:1px solid #929292;-webkit-border-radius:6.5px;-moz-border-radius:6.5px;border-radius:6.5px;height:13px;width:13px;background-color:#f0f0f0}.gantt_link_control div:hover{background-color:#fff}.gantt_link_control.task_left{left:-13px}.gantt_link_control.task_right{right:-13px}.gantt_task_line.gantt_selected .gantt_link_control div,.gantt_task_line:hover .gantt_link_control div{display:block}.gantt_link_target .gantt_link_control div{display:block}.gantt_link_source,.gantt_link_target{box-shadow:0 0 3px #3db9d3}.gantt_link_target.link_start_allow,.gantt_link_target.link_finish_allow{box-shadow:0 0 3px #ffbf5e}.gantt_link_target.link_start_deny,.gantt_link_target.link_finish_deny{box-shadow:0 0 3px #e87e7b}.link_start_allow .gantt_link_control.task_left div,.link_finish_allow .gantt_link_control.task_right div{background-color:#ffbf5e;border-color:#ffa011}.link_start_deny .gantt_link_control.task_left div,.link_finish_deny .gantt_link_control.task_right div{background-color:#e87e7b;border-color:#dd3e3a}.gantt_link_arrow_right{border-width:4px 0 4px 6px;border-color:transparent transparent transparent #ffa011;margin-top:-1px}.gantt_link_arrow_left{border-width:4px 6px 4px 0;margin-top:-1px;border-color:transparent #ffa011 transparent transparent}.gantt_link_arrow_top{border-width:0 4px 6px;border-color:transparent transparent #ffa011}.gantt_link_arrow_down{border-width:4px 6px 0 4px;border-color:#ffa011 transparent transparent}.gantt_task_drag,.gantt_task_progress_drag{cursor:w-resize;height:100%;display:none;position:absolute}.gantt_task_line.gantt_selected .gantt_task_progress_drag,.gantt_task_line:hover .gantt_task_progress_drag,.gantt_task_line.gantt_selected .gantt_task_drag,.gantt_task_line:hover .gantt_task_drag{display:block}.gantt_task_drag{width:6px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAACCAYAAAB7Xa1eAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QYDDjkw3UJvAwAAABRJREFUCNdj/P//PwM2wASl/6PTAKrrBf4+lD8LAAAAAElFTkSuQmCC);z-index:1;top:0}.gantt_task_drag.task_left{left:0}.gantt_task_drag.task_right{right:0}.gantt_task_progress_drag{height:8px;width:8px;bottom:-4px;margin-left:-4px;background-position:bottom;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MkY3Rjk0RUVDMkYzMTFFMkI1OThEQTA3ODU0OTkzMEEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MkY3Rjk0RUZDMkYzMTFFMkI1OThEQTA3ODU0OTkzMEEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyRjdGOTRFQ0MyRjMxMUUyQjU5OERBMDc4NTQ5OTMwQSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyRjdGOTRFREMyRjMxMUUyQjU5OERBMDc4NTQ5OTMwQSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PobPBzIAAADkSURBVHjaYpk2bRoDDsAExL1QdjEQ/8OmiAWHZk4gXqymqhQM4ty6fU8OSMUA8XdiDBAB4k0a6iqWRga6EKcwMQXduHlnL5DpB8Rv0J2JDFSA+JiOtgZcMwiA2CAxkBxUDVYDLEAKgIpV9XQ0MZwFEgPJAZnHoWpRDAgC4n2W5saiQKfjClQGkBxQDciL+6B6wAbkA/EqJwdrTkUFOQZCAKQGpBbIXA3SCzJggo+XK7OEuBgDsQCkFqgHrBfsBT5eHgZSAUwP2IBfv36TbABMDygdtK1Zv6UESLORaAbIhG6AAAMAKN8wE24DXWcAAAAASUVORK5CYII=);background-repeat:no-repeat;z-index:2}.gantt_link_tooltip{box-shadow:3px 3px 3px #888;background-color:#fff;border-left:1px dotted #cecece;border-top:1px dotted #cecece;font-family:Tahoma;font-size:8pt;color:#444;padding:6px;line-height:20px}.gantt_link_direction{height:0;border:0 none #ffa011;border-bottom-style:dashed;border-bottom-width:2px;transform-origin:0 0;-ms-transform-origin:0 0;-webkit-transform-origin:0 0;z-index:2;margin-left:1px;position:absolute}.gantt_grid_data .gantt_row.gantt_selected,.gantt_grid_data .gantt_row.odd.gantt_selected{background-color:#fff3a1}.gantt_task_row.gantt_selected{background-color:#fff3a1}.gantt_task_row.gantt_selected .gantt_task_cell{border-right-color:#ffec6e}.gantt_task_line.gantt_selected{box-shadow:0 0 5px #299cb4}.gantt_task_line.gantt_project.gantt_selected{box-shadow:0 0 5px #46ad51}.gantt_task_line.gantt_milestone{visibility:hidden;background-color:#d33daf;border:0 solid #61164f;box-sizing:content-box;-moz-box-sizing:content-box}.gantt_task_line.gantt_milestone div{visibility:visible}.gantt_task_line.gantt_milestone .gantt_task_content{background:inherit;border:inherit;border-width:1px;border-radius:inherit;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.dhx_unselectable,.dhx_unselectable div{-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.dhx_cal_light{-webkit-tap-highlight-color:transparent;background:#fff;border-radius:6px;font-family:Arial;font-size:13px;border:1px solid #cecece;color:#6b6b6b;font-size:12px;position:absolute;z-index:10001;width:550px;height:250px;box-shadow:3px 3px 3px rgba(0,0,0,.07)}.dhx_cal_light_wide{width:650px}.dhx_cal_light select{font-family:Arial;border:1px solid #cecece;font-size:13px;padding:2px;margin:0}.dhx_cal_ltitle{padding:7px 10px;overflow:hidden;white-space:nowrap;-webkit-border-top-left-radius:6px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:6px;-webkit-border-bottom-right-radius:0;-moz-border-radius-topleft:6px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:0;border-top-left-radius:6px;border-bottom-left-radius:0;border-top-right-radius:6px;border-bottom-right-radius:0}.dhx_cal_ltitle span{white-space:nowrap}.dhx_cal_lsection{color:#727272;font-weight:700;padding:12px 0 5px 10px}.dhx_cal_lsection .dhx_fullday{float:right;margin-right:5px;font-size:12px;font-weight:400;line-height:20px;vertical-align:top;cursor:pointer}.dhx_cal_lsection{font-size:13px}.dhx_cal_ltext{padding:2px 10px;overflow:hidden}.dhx_cal_ltext textarea{overflow:auto;font-family:Arial;font-size:13px;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #cecece;height:100%;width:100%;outline:0!important;resize:none}.dhx_time{font-weight:700}.dhx_cal_light .dhx_title{padding-left:10px}.dhx_cal_larea{border:1px solid #cecece;border-left:0;border-right:0;background-color:#fff;overflow:hidden;height:1px}.dhx_btn_set{margin:10px 7px 5px 10px;padding:5px 15px 5px 10px;float:left;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border-width:0;border-color:#cecece;border-style:solid;height:32px;font-weight:700;background:#fff;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.dhx_btn_set div{float:left;font-size:13px;height:22px;line-height:22px;background-repeat:no-repeat;vertical-align:middle}.dhx_save_btn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTk1OUU5RDFDMzA0MTFFMkExMUZBQTdDNDAzOUE5RjMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTk1OUU5RDJDMzA0MTFFMkExMUZBQTdDNDAzOUE5RjMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxOTU5RTlDRkMzMDQxMUUyQTExRkFBN0M0MDM5QTlGMyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoxOTU5RTlEMEMzMDQxMUUyQTExRkFBN0M0MDM5QTlGMyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PjDroXYAAAEXSURBVHjaYvz//z8DJYCRUgPIAUxAbAnEHiAHMIBcQCwGaRYXF3e6evXqoffv39/dv38/CymaGSUkJBzv3LlzCsj///fv3wdAihkkIQnEvkAshU8zLy+v7a1bt06ANP/79+87kDIAy505cybq06dPr3p7ezuwGQLTfOPGjWP/ESAZLg8kPKBO+g01RBJNszWyZqC6uSgWgIg/f/4shxnS2dnZBjMEqNkSFGBImi8CKTYMA4BYCGjIczRDHC5dunQQSfN7IKWI4UUkjjdMMdCwnw8ePLjwHxV4Yw1gZA5Q47z/2EELzhhCE+ABGvIQWSeQvwcU38QaAML2wHj+C/X3MyAlijeB4ZBoBOIPQGxJKIVSnBsBAgwABddBclWfcZUAAAAASUVORK5CYII=);margin-top:2px;width:21px}.dhx_cancel_btn{margin-top:2px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDkzMDA3MzlDMzA0MTFFMjg2QTVFMzFEQzgwRkJERDYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDkzMDA3M0FDMzA0MTFFMjg2QTVFMzFEQzgwRkJERDYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowOTMwMDczN0MzMDQxMUUyODZBNUUzMURDODBGQkRENiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowOTMwMDczOEMzMDQxMUUyODZBNUUzMURDODBGQkRENiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmYuYOUAAAEdSURBVHjaYvz//z8DJYAFXWDlypU8QKoIiD2A2AwqfAqIdwBxX3h4+Bdk9YzILgBqtgdS84FYEYeF94E4EWjIQZgAE5LmQCB1AKoZZKMPEAtAMYh9GSp3AKjWD8UFQAEhIPshEIOc3wHENUBb/qJ57SyQMoJyPwKxElDNO1gYFEE17wMKVmIJlzNQzeegrjaA6qmBecEbSvfh0GwMxGeBhoPoemQ9MAO0kEIbl2YTqPAFKK2IbMB3AjabYIkRZmQD7kNpMyI0G0PpO8gGbIUFJj7NQDk2INWIrIcJKfBAKcwJqvkcDs0TgFgXGo19KCkRmpDWQdWDEk0NUoCBoq0FqhkE/IEWbKJKUmZEz43QzFSKIzN1481M5ACAAAMAlfl/lCwRpagAAAAASUVORK5CYII=);width:20px}.dhx_delete_btn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjFENzI3NUNDMzA0MTFFMjhBNjJGQTc3MUIyQzYzNEYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjFENzI3NURDMzA0MTFFMjhBNjJGQTc3MUIyQzYzNEYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyMUQ3Mjc1QUMzMDQxMUUyOEE2MkZBNzcxQjJDNjM0RiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyMUQ3Mjc1QkMzMDQxMUUyOEE2MkZBNzcxQjJDNjM0RiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmUD0gAAAABvSURBVHjaYvz//z8DIyMjAxYQicReji4J0ofKQNP8HwmgGQbXB8IsWGwDSSwDuioKjY9uBthVjFAXYHUGAQA2kYmBUoAUBpGk0LAwgBvwH+YX4mkwptgLowYMRgOITUyYKRFIN/wnDjQgJySAAAMApryKzL8wjfUAAAAASUVORK5CYII=);margin-top:2px;width:20px}.dhx_cal_cover{width:100%;height:100%;position:absolute;z-index:10000;top:0;left:0;background-color:#000;opacity:.1;filter:alpha(opacity=10)}.dhx_custom_button{padding:0 3px;font-family:Arial;font-size:13px;font-weight:400;margin-right:5px;margin-top:0;cursor:pointer}.dhx_custom_button div{cursor:pointer;float:left;height:21px;line-height:21px;vertical-align:middle}.dhx_cal_light_wide{width:580px;padding:2px 4px}.dhx_cal_light_wide .dhx_cal_larea{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #cecece}.dhx_cal_light_wide .dhx_cal_lsection{border:0;float:left;text-align:right;width:80px;height:20px;padding:5px 10px 0 0}.dhx_cal_light_wide .dhx_wrap_section{position:relative;padding:10px 0;overflow:hidden;border-bottom:1px solid #ebebeb}.dhx_cal_light_wide .dhx_section_time{overflow:hidden;padding-top:2px!important;padding-right:0;height:20px!important}.dhx_cal_light_wide .dhx_cal_ltext{padding-right:0}.dhx_cal_light_wide .dhx_cal_larea{padding:0 10px;width:100%}.dhx_cal_light_wide .dhx_section_time{background:transparent}.dhx_cal_light_wide .dhx_cal_checkbox label{padding-left:0}.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday{float:none;margin-right:0;font-weight:700;cursor:pointer}.dhx_cal_light_wide .dhx_custom_button{position:absolute;top:0;right:0;margin-top:2px}.dhx_cal_light_wide .dhx_repeat_right{margin-right:55px}.dhx_cal_light_wide.dhx_cal_light_full{width:738px}.dhx_cal_wide_checkbox input{margin-top:8px;margin-left:14px}.dhx_cal_light input{font-size:13px}.dhx_custom_button{float:right;height:21px;width:90px;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px}.dhx_section_time{background-color:#fff;white-space:nowrap;padding:2px 10px 5px;padding-top:2px!important}.dhx_section_time .dhx_time_selects{float:left;height:25px}.dhx_section_time .dhx_time_selects select{height:23px;padding:2px;border:1px solid #cecece}.dhx_gantt_duration{width:100px;height:23px;float:left;white-space:nowrap;margin-left:20px;line-height:23px}.dhx_gantt_duration .dhx_gantt_duration_value,.dhx_gantt_duration .dhx_gantt_duration_dec,.dhx_gantt_duration .dhx_gantt_duration_inc{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;vertical-align:top;height:100%;border:1px solid #cecece}.dhx_gantt_duration .dhx_gantt_duration_value{width:40px;padding:3px 4px;border-left-width:0;border-right-width:0}.dhx_gantt_duration .dhx_gantt_duration_dec,.dhx_gantt_duration .dhx_gantt_duration_inc{width:20px;padding:1px;padding-bottom:3px;background:#fff}.dhx_gantt_duration .dhx_gantt_duration_dec{-moz-border-top-left-radius:4px;-moz-border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.dhx_gantt_duration .dhx_gantt_duration_inc{margin-right:4px;-moz-border-top-right-radius:4px;-moz-border-bottom-right-radius:4px;-webkit-border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:4px}.dhx_cal_quick_info{border:1px solid #cecece;border-radius:6px;position:absolute;z-index:300;box-shadow:3px 3px 3px rgba(0,0,0,.07);background-color:#fff;width:300px;transition:left .5s ease,right .5s;-moz-transition:left .5s ease,right .5s;-webkit-transition:left .5s ease,right .5s;-o-transition:left .5s ease,right .5s}.dhx_no_animate{transition:none;-moz-transition:none;-webkit-transition:none;-o-transition:none}.dhx_cal_quick_info.dhx_qi_left .dhx_qi_big_icon{float:right}.dhx_cal_qi_title{-webkit-border-top-left-radius:6px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:6px;-webkit-border-bottom-right-radius:0;-moz-border-radius-topleft:6px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:0;border-top-left-radius:6px;border-bottom-left-radius:0;border-top-right-radius:6px;border-bottom-right-radius:0;padding:5px 0 8px 12px;color:#454545;background-color:#fff;border-bottom:1px solid #cecece}.dhx_cal_qi_tdate{font-size:14px;font-weight:700}.dhx_cal_qi_tcontent{font-size:13px}.dhx_cal_qi_content{padding:16px 8px;font-size:13px;color:#454545;overflow:hidden}.dhx_cal_qi_controls{-webkit-border-top-left-radius:0;-webkit-border-bottom-left-radius:6px;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:6px;-moz-border-radius-topleft:0;-moz-border-radius-bottomleft:6px;-moz-border-radius-topright:0;-moz-border-radius-bottomright:6px;border-top-left-radius:0;border-bottom-left-radius:6px;border-top-right-radius:0;border-bottom-right-radius:6px;padding-left:7px}.dhx_cal_qi_controls .dhx_menu_icon{margin-top:6px;background-repeat:no-repeat}.dhx_cal_qi_controls .dhx_menu_icon.icon_edit{width:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH3QYFCjI5ZQj5bAAAAFNJREFUOMvt0zEOACAIA0DkwTymH8bJTRTKZGJXyaWEKPKTCQAH4Ls37cItcDUzsxHNDLZNhCq7Gt1wh9ErV7EjyGAhyGLphlnsClWuS32rn0czAV+vNGrM/LBtAAAAAElFTkSuQmCC)}.dhx_cal_qi_controls .dhx_menu_icon.icon_delete{width:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjFENzI3NUNDMzA0MTFFMjhBNjJGQTc3MUIyQzYzNEYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjFENzI3NURDMzA0MTFFMjhBNjJGQTc3MUIyQzYzNEYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyMUQ3Mjc1QUMzMDQxMUUyOEE2MkZBNzcxQjJDNjM0RiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyMUQ3Mjc1QkMzMDQxMUUyOEE2MkZBNzcxQjJDNjM0RiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmUD0gAAAABvSURBVHjaYvz//z8DIyMjAxYQicReji4J0ofKQNP8HwmgGQbXB8IsWGwDSSwDuioKjY9uBthVjFAXYHUGAQA2kYmBUoAUBpGk0LAwgBvwH+YX4mkwptgLowYMRgOITUyYKRFIN/wnDjQgJySAAAMApryKzL8wjfUAAAAASUVORK5CYII=)}.dhx_qi_big_icon{font-size:13px;border-radius:4px;font-weight:700;background:#fff;margin:5px 9px 8px 0;min-width:60px;line-height:32px;vertical-align:middle;padding:0 10px 0 5px;cursor:pointer;border:1px solid #cecece}.dhx_cal_qi_controls div{float:left;height:32px;text-align:center;line-height:32px}.gantt_tooltip{box-shadow:3px 3px 3px rgba(0,0,0,.07);background-color:#fff;border-left:1px solid rgba(0,0,0,.07);border-top:1px solid rgba(0,0,0,.07);font-family:Arial;font-size:8pt;color:#454545;padding:10px;position:absolute;z-index:500}.gantt_noselect{-moz-user-select:-moz-none;-webkit-user-select:none;-user-select:none}.gantt_drag_marker{position:absolute;font-family:Arial;font-size:13px}.gantt_drag_marker .gantt_tree_indent,.gantt_drag_marker .gantt_tree_icon.gantt_blank,.gantt_drag_marker .gantt_tree_icon.gantt_open,.gantt_drag_marker .gantt_tree_icon.gantt_close{display:none}.gantt_drag_marker,.gantt_drag_marker .gantt_row.odd{background-color:#fff}.gantt_drag_marker .gantt_row{border-left:1px solid #d2d2d2;border-top:1px solid #d2d2d2}.gantt_drag_marker .gantt_cell{border-color:#d2d2d2}.gantt_row.gantt_over,.gantt_task_row.gantt_over{background-color:#0070fe}.gantt_row.gantt_transparent .gantt_cell{opacity:.7}.gantt_task_row.gantt_transparent{background-color:#f8fdfd}.dhtmlx_popup_button.dhtmlx_delete_button{background:#3db9d3;text-shadow:0 -1px 0 #248a9f;color:#fff;font-weight:700;border-width:0} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/dhtmlxgantt.js b/phpgwapi/js/dhtmlxGantt/codebase/dhtmlxgantt.js deleted file mode 100644 index 7c93f947fb..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/dhtmlxgantt.js +++ /dev/null @@ -1,240 +0,0 @@ -/* -dhtmlxGantt v.2.1.1 Standard This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. (c) Dinamenta, UAB. -*/ -function dtmlXMLLoaderObject(t,e,n,i){return this.xmlDoc="",this.async="undefined"!=typeof n?n:!0,this.onloadAction=t||null,this.mainObject=e||null,this.waitCall=null,this.rSeed=i||!1,this}function callerFunction(t,e){return this.handler=function(n){return n||(n=window.event),t(n,e),!0},this.handler}function getAbsoluteLeft(t){return getOffset(t).left}function getAbsoluteTop(t){return getOffset(t).top}function getOffsetSum(t){for(var e=0,n=0;t;)e+=parseInt(t.offsetTop),n+=parseInt(t.offsetLeft),t=t.offsetParent; -return{top:e,left:n}}function getOffsetRect(t){var e=t.getBoundingClientRect(),n=document.body,i=document.documentElement,a=window.pageYOffset||i.scrollTop||n.scrollTop,s=window.pageXOffset||i.scrollLeft||n.scrollLeft,r=i.clientTop||n.clientTop||0,o=i.clientLeft||n.clientLeft||0,d=e.top+a-r,l=e.left+s-o;return{top:Math.round(d),left:Math.round(l)}}function getOffset(t){return t.getBoundingClientRect?getOffsetRect(t):getOffsetSum(t)}function convertStringToBoolean(t){switch("string"==typeof t&&(t=t.toLowerCase()),t){case"1":case"true":case"yes":case"y":case 1:case!0:return!0; -default:return!1}}function getUrlSymbol(t){return-1!=t.indexOf("?")?"&":"?"}function dhtmlDragAndDropObject(){return window.dhtmlDragAndDrop?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,this)}function _dhtmlxError(){return this.catches||(this.catches=[]),this}function dhtmlXHeir(t,e){for(var n in e)"function"==typeof e[n]&&(t[n]=e[n]);return t}function dhtmlxEvent(t,e,n){t.addEventListener?t.addEventListener(e,n,!1):t.attachEvent&&t.attachEvent("on"+e,n) -}function dhtmlxDetachEvent(t,e,n){t.removeEventListener?t.removeEventListener(e,n,!1):t.detachEvent&&t.detachEvent("on"+e,n)}function dhtmlxDnD(t,e){e&&(this._settings=e),dhtmlxEventable(this),dhtmlxEvent(t,"mousedown",dhtmlx.bind(function(e){this.dragStart(t,e)},this))}function dataProcessor(t){return this.serverProcessor=t,this.action_param="!nativeeditor_status",this.object=null,this.updatedRows=[],this.autoUpdate=!0,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(!0),dhtmlxEventable(this),this -}window.dhtmlx||(dhtmlx=function(t){for(var e in t)dhtmlx[e]=t[e];return dhtmlx}),dhtmlx.extend_api=function(t,e,n){var i=window[t];i&&(window[t]=function(t){var n;if(t&&"object"==typeof t&&!t.tagName){n=i.apply(this,e._init?e._init(t):arguments);for(var a in dhtmlx)e[a]&&this[e[a]](dhtmlx[a]);for(var a in t)e[a]?this[e[a]](t[a]):0===a.indexOf("on")&&this.attachEvent(a,t[a])}else n=i.apply(this,arguments);return e._patch&&e._patch(this),n||this},window[t].prototype=i.prototype,n&&dhtmlXHeir(window[t].prototype,n)) -},dhtmlxAjax={get:function(t,e){var n=new dtmlXMLLoaderObject(!0);return n.async=arguments.length<3,n.waitCall=e,n.loadXML(t),n},post:function(t,e,n){var i=new dtmlXMLLoaderObject(!0);return i.async=arguments.length<4,i.waitCall=n,i.loadXML(t,!0,e),i},getSync:function(t){return this.get(t,null,!0)},postSync:function(t,e){return this.post(t,e,null,!0)}},dtmlXMLLoaderObject.count=0,dtmlXMLLoaderObject.prototype.waitLoadFunction=function(t){var e=!0;return this.check=function(){if(t&&t.onloadAction&&(!t.xmlDoc.readyState||4==t.xmlDoc.readyState)){if(!e)return; -e=!1,dtmlXMLLoaderObject.count++,"function"==typeof t.onloadAction&&t.onloadAction(t.mainObject,null,null,null,t),t.waitCall&&(t.waitCall.call(this,t),t.waitCall=null)}},this.check},dtmlXMLLoaderObject.prototype.getXMLTopNode=function(t,e){var n;if(this.xmlDoc.responseXML){var i=this.xmlDoc.responseXML.getElementsByTagName(t);if(0===i.length&&-1!=t.indexOf(":"))var i=this.xmlDoc.responseXML.getElementsByTagName(t.split(":")[1]);n=i[0]}else n=this.xmlDoc.documentElement;if(n)return this._retry=!1,n; -if(!this._retry&&_isIE){this._retry=!0;var e=this.xmlDoc;return this.loadXMLString(this.xmlDoc.responseText.replace(/^[\s]+/,""),!0),this.getXMLTopNode(t,e)}return dhtmlxError.throwError("LoadXML","Incorrect XML",[e||this.xmlDoc,this.mainObject]),document.createElement("DIV")},dtmlXMLLoaderObject.prototype.loadXMLString=function(t,e){if(_isIE)this.xmlDoc=new ActiveXObject("Microsoft.XMLDOM"),this.xmlDoc.async=this.async,this.xmlDoc.onreadystatechange=function(){},this.xmlDoc.loadXML(t);else{var n=new DOMParser; -this.xmlDoc=n.parseFromString(t,"text/xml")}e||(this.onloadAction&&this.onloadAction(this.mainObject,null,null,null,this),this.waitCall&&(this.waitCall(),this.waitCall=null))},dtmlXMLLoaderObject.prototype.loadXML=function(t,e,n,i){this.rSeed&&(t+=(-1!=t.indexOf("?")?"&":"?")+"a_dhx_rSeed="+(new Date).valueOf()),this.filePath=t,this.xmlDoc=!_isIE&&window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHTTP"),this.async&&(this.xmlDoc.onreadystatechange=new this.waitLoadFunction(this)),this.xmlDoc.open(e?"POST":"GET",t,this.async),i?(this.xmlDoc.setRequestHeader("User-Agent","dhtmlxRPC v0.1 ("+navigator.userAgent+")"),this.xmlDoc.setRequestHeader("Content-type","text/xml")):e&&this.xmlDoc.setRequestHeader("Content-type","application/x-www-form-urlencoded"),this.xmlDoc.setRequestHeader("X-Requested-With","XMLHttpRequest"),this.xmlDoc.send(null||n),this.async||new this.waitLoadFunction(this)() -},dtmlXMLLoaderObject.prototype.destructor=function(){return this._filterXPath=null,this._getAllNamedChilds=null,this._retry=null,this.async=null,this.rSeed=null,this.filePath=null,this.onloadAction=null,this.mainObject=null,this.xmlDoc=null,this.doXPath=null,this.doXPathOpera=null,this.doXSLTransToObject=null,this.doXSLTransToString=null,this.loadXML=null,this.loadXMLString=null,this.doSerialization=null,this.xmlNodeToJSON=null,this.getXMLTopNode=null,this.setXSLParamValue=null,null},dtmlXMLLoaderObject.prototype.xmlNodeToJSON=function(t){for(var e={},n=0;n_FFrv)&&window.dhtmlDragAndDrop.calculateFramePosition()); -try{parent.dhtmlDragAndDrop&&parent!=window&&parent!=t&&parent.dhtmlDragAndDrop.initFrameRoute(window)}catch(n){}for(var i=0;i-1&&(_isChrome=!0),-1!=navigator.userAgent.indexOf("Safari")||-1!=navigator.userAgent.indexOf("Konqueror")?(_KHTMLrv=parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf("Safari")+7,5)),_KHTMLrv>525?(_isFF=!0,_FFrv=1.9):_isKHTML=!0):-1!=navigator.userAgent.indexOf("Opera")?(_isOpera=!0,_OperaRv=parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf("Opera")+6,3))):-1!=navigator.appName.indexOf("Microsoft")?(_isIE=!0,-1==navigator.appVersion.indexOf("MSIE 8.0")&&-1==navigator.appVersion.indexOf("MSIE 9.0")&&-1==navigator.appVersion.indexOf("MSIE 10.0")||"BackCompat"==document.compatMode||(_isIE=8)):"Netscape"==navigator.appName&&-1!=navigator.userAgent.indexOf("Trident")?_isIE=8:(_isFF=!0,_FFrv=parseFloat(navigator.userAgent.split("rv:")[1])),dtmlXMLLoaderObject.prototype.doXPath=function(t,e,n,i){if(_isKHTML||!_isIE&&!window.XPathResult)return this.doXPathOpera(t,e); -if(_isIE)return e||(e=this.xmlDoc.nodeName?this.xmlDoc:this.xmlDoc.responseXML),e||dhtmlxError.throwError("LoadXML","Incorrect XML",[e||this.xmlDoc,this.mainObject]),n&&e.setProperty("SelectionNamespaces","xmlns:xsl='"+n+"'"),"single"==i?e.selectSingleNode(t):e.selectNodes(t)||new Array(0);var a=e;e||(e=this.xmlDoc.nodeName?this.xmlDoc:this.xmlDoc.responseXML),e||dhtmlxError.throwError("LoadXML","Incorrect XML",[e||this.xmlDoc,this.mainObject]),-1!=e.nodeName.indexOf("document")?a=e:(a=e,e=e.ownerDocument); -var s=XPathResult.ANY_TYPE;"single"==i&&(s=XPathResult.FIRST_ORDERED_NODE_TYPE);var r=[],o=e.evaluate(t,a,function(){return n},s,null);if(s==XPathResult.FIRST_ORDERED_NODE_TYPE)return o.singleNodeValue;for(var d=o.iterateNext();d;)r[r.length]=d,d=o.iterateNext();return r},_dhtmlxError.prototype.catchError=function(t,e){this.catches[t]=e},_dhtmlxError.prototype.throwError=function(t,e,n){return this.catches[t]?this.catches[t](t,e,n):this.catches.ALL?this.catches.ALL(t,e,n):(window.alert("Error type: "+arguments[0]+"\nDescription: "+arguments[1]),null) -},window.dhtmlxError=new _dhtmlxError,dtmlXMLLoaderObject.prototype.doXPathOpera=function(t,e){var n=t.replace(/[\/]+/gi,"/").split("/"),i=null,a=1;if(!n.length)return[];if("."==n[0])i=[e];else{if(""!==n[0])return[];i=(this.xmlDoc.responseXML||this.xmlDoc).getElementsByTagName(n[a].replace(/\[[^\]]*\]/g,"")),a++}for(a;a
"+t+"
"}function a(t){g.area||(g.area=document.createElement("DIV"),g.area.className="dhtmlx_message_area",g.area.style[g.position]="5px",document.body.appendChild(g.area)),g.hide(t.id);var e=document.createElement("DIV");return e.innerHTML="
"+t.text+"
",e.className="dhtmlx-info dhtmlx-"+t.type,e.onclick=function(){g.hide(t.id),t=null -},"bottom"==g.position&&g.area.firstChild?g.area.insertBefore(e,g.area.firstChild):g.area.appendChild(e),t.expire>0&&(g.timers[t.id]=window.setTimeout(function(){g.hide(t.id)},t.expire)),g.pull[t.id]=e,e=null,t.id}function s(e,n,a){var s=document.createElement("DIV");s.className=" dhtmlx_modal_box dhtmlx-"+e.type,s.setAttribute("dhxbox",1);var r="";if(e.width&&(s.style.width=e.width),e.height&&(s.style.height=e.height),e.title&&(r+='
'+e.title+"
"),r+='
'+(e.content?"":e.text)+'
',n&&(r+=i(e.ok||"OK",!0)),a&&(r+=i(e.cancel||"Cancel",!1)),e.buttons)for(var o=0;othis.config.sensitivity){if(this.config.started=!0,this.config.ignore=!1,this.callEvent("onBeforeDragStart",[t,e])===!1)return this.config.ignore=!0,!0;var r=this.config.marker=document.createElement("div");r.className="gantt_drag_marker",r.innerHTML="Dragging object",document.body.appendChild(r),this.callEvent("onAfterDragStart",[t,e])}else this.config.ignore=!0}this.config.ignore||(e.pos=this.getPosition(e),this.config.marker.style.left=e.pos.x+"px",this.config.marker.style.top=e.pos.y+"px",this.callEvent("onDragMove",[t,e])) -},dragEnd:function(){this.config.marker&&(this.config.marker.parentNode.removeChild(this.config.marker),this.config.marker=null,this.callEvent("onDragEnd",[])),document.body.className=document.body.className.replace(" gantt_noselect","")},getPosition:function(t){var e=0,n=0;return t=t||window.event,t.pageX||t.pageY?(e=t.pageX,n=t.pageY):(t.clientX||t.clientY)&&(e=t.clientX+document.body.scrollLeft+document.documentElement.scrollLeft,n=t.clientY+document.body.scrollTop+document.documentElement.scrollTop),{x:e,y:n} -}},gantt._init_grid=function(){this._click.gantt_close=dhtmlx.bind(function(t,e){this.close(e)},this),this._click.gantt_open=dhtmlx.bind(function(t,e){this.open(e)},this),this._click.gantt_row=dhtmlx.bind(function(t,e,n){if(null!==e){var i=this.getTaskNode(e),a=Math.max(i.offsetLeft-this.config.task_scroll_offset,0);this.scrollTo(a),this.callEvent("onTaskRowClick",[e,n])}},this),this._click.gantt_grid_head_cell=dhtmlx.bind(function(t,e,n){var i=n.getAttribute("column_id");if(this.callEvent("onGridHeaderClick",[i,t]))if("add"==i)this._click.gantt_add(t,this.config.root_id); -else if(this.config.sort){var a=this._sort&&this._sort.direction&&this._sort.name==i?this._sort.direction:"desc";a="desc"==a?"asc":"desc",this._sort={name:i,direction:a},this._render_grid_header(),this.sort(i,"desc"==a)}},this),!this.config.sort&&this.config.order_branch&&this._init_dnd(),this._click.gantt_add=dhtmlx.bind(function(t,e){if(!this.config.readonly){var n=e?this.getTask(e):!1,i="";if(n)i=n.start_date;else{var a=this._order[0];i=a?this.getTask(a).start_date:this.getState().min_date}n&&(n.$open=!0); -var s={text:gantt.locale.labels.new_task,start_date:this.templates.xml_format(i),duration:1,progress:0,parent:e};s.id=dhtmlx.uid(),this.callEvent("onTaskCreated",[s]),this.config.details_on_create?(s.$new=!0,this._pull[s.id]=this._init_task(s),this._add_branch(s),s.$level=this._item_level(s),this.selectTask(s.id),this.refreshData(),this.showLightbox(s.id)):(this.addTask(s),this.showTask(s.id),this.selectTask(s.id))}},this)},gantt._render_grid=function(){this._is_grid_visible()&&(this._calc_grid_width(),this._render_grid_header()) -},gantt._calc_grid_width=function(){if(this.config.autofit){for(var t=this.config.columns,e=0,n=[],i=[],a=0;a0?n.length:i.length>0?i.length:1)}if(n.length>0)for(var o=r/(n.length?n.length:1),a=0;an+o.width&&(o.width=this._get_grid_width()-n),n+=o.width;var d=this._sort&&o.name==this._sort.name?"
":"",l=["gantt_grid_head_cell","gantt_grid_head_"+o.name,r?"gantt_last_cell":"",this.templates.grid_header_class(o.name,o)].join(" "),_="width:"+(o.width-(r?1:0))+"px;",h=o.label||i["column_"+o.name];h=h||"";var c="
"+h+d+"
";e.push(c)}this.$grid_scale.style.height=this.config.scale_height-1+"px",this.$grid_scale.style.lineHeight=a+"px",this.$grid_scale.style.width=n-1+"px",this.$grid_scale.innerHTML=e.join("") -},gantt._render_grid_item=function(t){if(!gantt._is_grid_visible())return null;for(var e=this.config.columns,n=[],i=0;i
":(s=o.template?o.template(t):t[o.name],s instanceof Date&&(s=this.templates.date_grid(s)),s="
"+s+"
");var d="gantt_cell"+(r?" gantt_last_cell":""),l="";if(o.tree){for(var _=0;_0; -h?(l+=this.templates.grid_open(t),l+=this.templates.grid_folder(t)):(l+=this.templates.grid_blank(t),l+=this.templates.grid_file(t))}var c="width:"+(o.width-(r?1:0))+"px;";dhtmlx.defined(o.align)&&(c+="text-align:"+o.align+";"),a="
"+l+s+"
",n.push(a)}var d=t.$index%2===0?"":" odd";if(d+=t.$transparent?" gantt_transparent":"",this.templates.grid_row_class){var g=this.templates.grid_row_class.call(this,t.start_date,t.end_date,t);g&&(d+=" "+g)}this.getState().selected_task==t.id&&(d+=" gantt_selected"); -var u=document.createElement("div");return u.className="gantt_row"+d,u.style.height=this.config.row_height+"px",u.style.lineHeight=gantt.config.row_height+"px",u.setAttribute(this.config.task_attribute,t.id),u.innerHTML=n.join(""),u},gantt.open=function(t){gantt._set_item_state(t,!0),this.callEvent("onTaskOpened",[t])},gantt.close=function(t){gantt._set_item_state(t,!1),this.callEvent("onTaskClosed",[t])},gantt._set_item_state=function(t,e){t&&this._pull[t]&&(this._pull[t].$open=e,this.refreshData()) -},gantt._is_grid_visible=function(){return this.config.grid_width&&this.config.show_grid},gantt._get_grid_width=function(){return this._is_grid_visible()?this._is_chart_visible()?this.config.grid_width:this._x:0},gantt.getTaskIndex=function(t){for(var e=this._branches[this.getTask(t).parent],n=0;nr&&e--}this._replace_branch_child(a.parent,t),s=this._branches[n];var o=s[e];o?s=s.slice(0,e).concat([t]).concat(s.slice(e)):s.push(t),a.parent=n,this._branches[n]=s,this.refreshData()},gantt._init_dnd=function(){var t=new dhtmlxDnD(this.$grid_data,{updates_per_second:60});dhtmlx.defined(this.config.dnd_sensitivity)&&(t.config.sensitivity=this.config.dnd_sensitivity),t.attachEvent("onBeforeDragStart",dhtmlx.bind(function(t,e){var n=this._locateHTML(e); -if(!n)return!1;this.hideQuickInfo&&this._hideQuickInfo();var i=this.locate(e);return this.callEvent("onRowDragStart",[i,e.target||e.srcElement,e])?void 0:!1},this)),t.attachEvent("onAfterDragStart",dhtmlx.bind(function(e,n){var i=this._locateHTML(n);t.config.marker.innerHTML=i.outerHTML,t.config.id=this.locate(n);var a=this.getTask(t.config.id);a.$open=!1,a.$transparent=!0,this.refreshData()},this)),t.lastTaskOfLevel=function(t){for(var e=gantt._order,n=gantt._pull,i=null,a=0,s=e.length;s>a;a++)n[e[a]].$level==t&&(i=n[e[a]]); -return i?i.id:null},t.attachEvent("onDragMove",dhtmlx.bind(function(e,n){var i=t.config,a=this._get_position(this.$grid_data),s=a.x+10,r=n.pos.y-10;ra.y+this.$grid_data.offsetHeight-this.config.row_height&&(r=a.y+this.$grid_data.offsetHeight-this.config.row_height),i.marker.style.left=s+"px",i.marker.style.top=r+"px";var o=document.elementFromPoint(a.x-document.body.scrollLeft+1,r-document.body.scrollTop),d=this.locate(o),l=this.getTask(t.config.id);if(this.isTaskExists(d)||(d=t.lastTaskOfLevel(l.$level),d==t.config.id&&(d=null)),this.isTaskExists(d)){var _=gantt._get_position(o),h=this.getTask(d); -if(_.y+o.offsetHeight/2=a;a++)i+=t[a];return i},setSumWidth:function(t,e,n,i){var a=e.width;void 0===i&&(i=a.length-1),void 0===n&&(n=0);var s=i-n+1;if(!(n>a.length-1||0>=s||i>a.length-1)){var r=this.getSum(a,n,i),o=t-r; -this.adjustSize(o,a,n,i),this.adjustSize(-o,a,i+1),e.full_width=this.getSum(a)}},splitSize:function(t,e){for(var n=[],i=0;e>i;i++)n[i]=0;return this.adjustSize(t,n),n},adjustSize:function(t,e,n,i){n||(n=0),void 0===i&&(i=e.length-1);for(var a=i-n+1,s=this.getSum(e,n,i),r=0,o=n;i>=o;o++){var d=Math.floor(t*(s?e[o]/s:1/a));s-=e[o],t-=d,a--,e[o]+=d,r+=d}e[e.length-1]+=t},sortScales:function(t){function e(t,e){var n=new Date(1970,0,1);return gantt.date.add(n,e,t)-n}t.sort(function(t,n){return e(t.unit,t.step)=0;o--){var d=o==t.length-1,l=this.initScaleConfig(t[o]);d&&this.processIgnores(l),this.initColSizes(l,e,s,a[o]),this.limitVisibleRange(l),d&&(s=l.full_width),r.unshift(l)}for(var o=0;o=h;h++)+r[h]!=+s[_]||(a&&a.apply(this,[l,_,o,h]),o=h,l=_)},alineScaleColumns:function(t,e,n,i){this.iterateScales(t,e,n,i,function(n,i,a,s){var r=this.getSum(t.width,a,s-1),o=this.getSum(e.width,n,i-1);o!=r&&this.setSumWidth(r,e,n,i-1)})},eachColumn:function(t,e,n){var i=new Date(gantt._min_date),a=new Date(gantt._max_date);gantt.date[t+"_start"]&&(i=gantt.date[t+"_start"](i)); -for(var s=new Date(i);+a>+s;)n.call(this,new Date(s)),s=gantt.date.add(s,e,t)},limitVisibleRange:function(t){var e=t.trace_x,n=0,i=t.width.length-1,a=0;if(+e[0]<+gantt._min_date&&n!=i){var s=Math.floor(t.width[0]*((e[1]-gantt._min_date)/(e[1]-e[0])));a+=t.width[0]-s,t.width[0]=s,e[0]=new Date(gantt._min_date)}var r=e.length-1,o=e[r],d=gantt.date.add(o,t.step,t.unit);if(+d>+gantt._max_date&&r>0){var s=t.width[r]-Math.floor(t.width[r]*((d-gantt._max_date)/(d-o)));a+=t.width[r]-s,t.width[r]=s}if(a){for(var l=this.getSum(t.width),_=0,h=0;ht.x?this.dirs.right:e.y>t.y?this.dirs.down:this.dirs.up -}},gantt._y_from_ind=function(t){return t*gantt.config.row_height},gantt._path_builder={path:[],clear:function(){this.path=[]},current:function(){return this.path[this.path.length-1]},point:function(t){return t?(this.path.push(dhtmlx.copy(t)),t):this.current()},point_to:function(t,e,n){n=n?{x:n.x,y:n.y}:dhtmlx.copy(this.point());var i=gantt._drawer.dirs;switch(t){case i.left:n.x-=e;break;case i.right:n.x+=e;break;case i.up:n.y-=e;break;case i.down:n.y+=e}return this.point(n)},get_points:function(t){var e=this.get_endpoint(t),n=gantt.config,i=e.e_y-e.y,a=e.e_x-e.x,s=gantt._drawer.dirs; -this.clear(),this.point({x:e.x,y:e.y});var r=2*n.link_arrow_size,o=e.e_x>e.x;if(t.type==gantt.config.links.start_to_start)this.point_to(s.left,r),o?(this.point_to(s.down,i),this.point_to(s.right,a)):(this.point_to(s.right,a),this.point_to(s.down,i)),this.point_to(s.right,r);else if(t.type==gantt.config.links.finish_to_start)if(o=e.e_x>e.x+2*r,this.point_to(s.right,r),o)a-=r,this.point_to(s.down,i),this.point_to(s.right,a);else{a-=2*r;var d=i>0?1:-1;this.point_to(s.down,d*(n.row_height/2)),this.point_to(s.right,a),this.point_to(s.down,d*(Math.abs(i)-n.row_height/2)),this.point_to(s.right,r) -}else if(t.type==gantt.config.links.finish_to_finish)this.point_to(s.right,r),o?(this.point_to(s.right,a),this.point_to(s.down,i)):(this.point_to(s.down,i),this.point_to(s.right,a)),this.point_to(s.left,r);else if(t.type==gantt.config.links.start_to_finish)if(o=e.e_x>e.x-2*r,this.point_to(s.left,r),o){a+=2*r;var d=i>0?1:-1;this.point_to(s.down,d*(n.row_height/2)),this.point_to(s.right,a),this.point_to(s.down,d*(Math.abs(i)-n.row_height/2)),this.point_to(s.left,r)}else a+=r,this.point_to(s.down,i),this.point_to(s.right,a); -return this.path},get_endpoint:function(t){var e=gantt.config.links,n=!1,i=!1;t.type==e.start_to_start?n=i=!0:t.type==e.finish_to_finish?n=i=!1:t.type==e.finish_to_start?(n=!1,i=!0):t.type==e.start_to_finish?(n=!0,i=!1):dhtmlx.assert(!1,"Invalid link type");var a=gantt._get_task_visible_pos(gantt._pull[t.source],n),s=gantt._get_task_visible_pos(gantt._pull[t.target],i);return{x:a.x,e_x:s.x,y:a.y,e_y:s.y}}},gantt._init_links_dnd=function(){function t(t,e,n){var i=gantt._get_task_pos(t,!!e);return i.y+=gantt._get_task_height()/2,n=n||0,i.x+=(e?-1:1)*n,i -}function e(t){var e=i(),n=["gantt_link_tooltip"];e.from&&e.to&&n.push(gantt.isLinkAllowed(e.from,e.to,e.from_start,e.to_start)?"gantt_allowed_link":"gantt_invalid_link");var a=gantt.templates.drag_link_class(e.from,e.from_start,e.to,e.to_start);a&&n.push(a);var s="
"+gantt.templates.drag_link(e.from,e.from_start,e.to,e.to_start)+"
";t.innerHTML=s}function n(t,e){t.style.left=e.x+5+"px",t.style.top=e.y+5+"px"}function i(){return{from:gantt._link_source_task,to:gantt._link_target_task,from_start:gantt._link_source_task_start,to_start:gantt._link_target_task_start} -}function a(){gantt._link_source_task=gantt._link_source_task_start=gantt._link_target_task=null,gantt._link_target_task_start=!0}function s(t,e,n,a){var s=d(),l=i(),_=["gantt_link_direction"];gantt.templates.link_direction_class&&_.push(gantt.templates.link_direction_class(l.from,l.from_start,l.to,l.to_start));var h=Math.sqrt(Math.pow(n-t,2)+Math.pow(a-e,2));if(h=Math.max(0,h-3)){s.className=_.join(" ");var c=(a-e)/(n-t),g=Math.atan(c);2==o(t,n,e,a)?g+=Math.PI:3==o(t,n,e,a)&&(g-=Math.PI);var u=Math.sin(g),f=Math.cos(g),p=Math.round(e),m=Math.round(t),v=["-webkit-transform: rotate("+g+"rad)","-moz-transform: rotate("+g+"rad)","-ms-transform: rotate("+g+"rad)","-o-transform: rotate("+g+"rad)","transform: rotate("+g+"rad)","width:"+Math.round(h)+"px"]; -if(-1!=window.navigator.userAgent.indexOf("MSIE 8.0")){v.push('-ms-filter: "'+r(u,f)+'"');var k=Math.abs(Math.round(t-n)),x=Math.abs(Math.round(a-e));switch(o(t,n,e,a)){case 1:p-=x;break;case 2:m-=k,p-=x;break;case 3:m-=k}}v.push("top:"+p+"px"),v.push("left:"+m+"px"),s.style.cssText=v.join(";")}}function r(t,e){return"progid:DXImageTransform.Microsoft.Matrix(M11 = "+e+",M12 = -"+t+",M21 = "+t+",M22 = "+e+",SizingMethod = 'auto expand')"}function o(t,e,n,i){return e>=t?n>=i?1:4:n>=i?2:3}function d(){return _._direction||(_._direction=document.createElement("div"),gantt.$task_links.appendChild(_._direction)),_._direction -}function l(){_._direction&&(_._direction.parentNode&&_._direction.parentNode.removeChild(_._direction),_._direction=null)}var _=new dhtmlxDnD(this.$task_bars,{sensitivity:0,updates_per_second:60}),h="task_left",c="task_right",g="gantt_link_point",u="gantt_link_control";_.attachEvent("onBeforeDragStart",dhtmlx.bind(function(e,n){if(gantt.config.readonly)return!1;var i=n.target||n.srcElement;if(a(),gantt.getState().drag_id)return!1;if(gantt._locate_css(i,g)){gantt._locate_css(i,h)&&(gantt._link_source_task_start=!0); -var s=gantt._link_source_task=this.locate(n),r=gantt.getTask(s),o=0;return r.type==gantt.config.types.milestone&&(o=(gantt._get_visible_milestone_width()-gantt._get_milestone_width())/2),this._dir_start=t(r,!!gantt._link_source_task_start,o),!0}return!1},this)),_.attachEvent("onAfterDragStart",dhtmlx.bind(function(){e(_.config.marker)},this)),_.attachEvent("onDragMove",dhtmlx.bind(function(i,a){var r=_.config,o=_.getPosition(a);n(r.marker,o);var d=gantt._is_link_drop_area(a),l=gantt._link_target_task,h=gantt._link_landing,g=gantt._link_target_task_start,f=gantt.locate(a),p=!0; -if(d&&(p=!gantt._locate_css(a,c),d=!!f),gantt._link_target_task=f,gantt._link_landing=d,gantt._link_target_task_start=p,d){var m=gantt.getTask(f),v=gantt._locate_css(a,u),k=0;v&&(k=Math.floor(v.offsetWidth/2)),this._dir_end=t(m,!!gantt._link_target_task_start,k)}else this._dir_end=gantt._get_mouse_pos(a);var x=!(h==d&&l==f&&g==p);return x&&(l&&gantt.refreshTask(l,!1),f&&gantt.refreshTask(f,!1)),x&&e(r.marker),s(this._dir_start.x,this._dir_start.y,this._dir_end.x,this._dir_end.y),!0},this)),_.attachEvent("onDragEnd",dhtmlx.bind(function(){var t=i(); -if(t.from&&t.to&&t.from!=t.to){var e=gantt._get_link_type(t.from_start,t.to_start);e&&gantt.addLink({source:t.from,target:t.to,type:e})}a(),t.from&&gantt.refreshTask(t.from,!1),t.to&&gantt.refreshTask(t.to,!1),l()},this)),gantt._is_link_drop_area=function(t){return!!gantt._locate_css(t,u)}},gantt._get_link_state=function(){return{link_landing_area:this._link_landing,link_target_id:this._link_target_task,link_target_start:this._link_target_task_start,link_source_id:this._link_source_task,link_source_start:this._link_source_task_start} -},gantt._init_tasks=function(){function t(t,e,n,i){for(var a=0;a-1?i.$target[0]:i.$source[0]),a&&this._delete_link_handler(a,t),!1},this),this._tasks_dnd.init(),this._init_links_dnd();var e=this._create_filter("_filter_task","_is_grid_visible"),n=this._create_filter("_filter_task","_is_chart_visible"),i=this._create_filter("_filter_link","_is_chart_visible");this._taskRenderer=gantt._task_renderer("line",this._render_task_element,this.$task_bars,n),this._linkRenderer=gantt._task_renderer("links",this._render_link_element,this.$task_links,i),this._gridRenderer=gantt._task_renderer("grid_items",this._render_grid_item,this.$grid_data,e),this._bgRenderer=gantt._task_renderer("bg_lines",this._render_bg_line,this.$task_bg,n),this.attachEvent("onTaskIdChange",function(e,n){var i=this._get_task_renderers(); -t(i,e,n,this.getTask(n))}),this.attachEvent("onLinkIdChange",function(e,n){var i=this._get_link_renderers();t(i,e,n,this.getLink(n))})},gantt._create_filter=function(t){return t instanceof Array||(t=Array.prototype.slice.call(arguments,0)),function(e){for(var n=!0,i=0,a=t.length;a>i;i++){var s=t[i];gantt[s]&&(n=n&&gantt[s].apply(gantt,[e.id,e])!==!1)}return n}},gantt._is_chart_visible=function(){return!!this.config.show_chart},gantt._filter_task=function(t,e){var n=null,i=null;return this.config.start_date&&this.config.end_date&&(n=this.config.start_date.valueOf(),i=this.config.end_date.valueOf(),+e.start_date>i||+e.end_date<+n)?!1:!0 -},gantt._filter_link=function(t,e){return this.config.show_links&&gantt.isTaskVisible(e.source)&&gantt.isTaskVisible(e.target)?this.callEvent("onBeforeLinkDisplay",[t,e]):!1},gantt._get_task_renderers=function(){return[this._taskRenderer,this._gridRenderer,this._bgRenderer]},gantt._get_link_renderers=function(){return[this._linkRenderer]},gantt._delete_link_handler=function(t,e){if(t&&this.callEvent("onLinkDblClick",[t,e])){if(this.config.readonly)return;var n="",i=gantt.locale.labels.link+" "+this.templates.link_description(this.getLink(t))+" "+gantt.locale.labels.confirm_link_deleting; -window.setTimeout(function(){gantt._dhtmlx_confirm(i,n,function(){gantt.deleteLink(t)})},gantt.config.touch?300:1)}},gantt.getTaskNode=function(t){return this._taskRenderer.rendered[t]},gantt.getLinkNode=function(t){return this._linkRenderer.rendered[t]},gantt._get_tasks_data=function(){for(var t=[],e=0;e+i&&(i=new Date(t.end_date))},this.config.root_id),this.eachTask(function(t){t.start_date&&+t.start_date<+a&&(a=new Date(t.start_date)) -},this.config.root_id),this._min_date=a,this._max_date=i,i&&i!=-1/0||(this._min_date=new Date,this._max_date=new Date(this._min_date)),this._min_date=this.date[t+"_start"](this._min_date),+this._min_date==+a&&(this._min_date=this.date.add(this.date[t+"_start"](this._min_date),-1,t)),this._max_date=this.date[t+"_start"](this._max_date),this._max_date=this.date.add(this._max_date,1,t)},gantt._prepare_scale_html=function(t){var e=[],n=null,i=null,a=null;(t.template||t.date)&&(i=t.template||this.date.date_to_str(t.date)),a=t.css||gantt.templates.scale_cell_class; -for(var s=0;s"+r+"";e.push(h)}}return e.join("")},gantt._render_tasks_scales=function(){this._init_tasks_range(),this._scroll_resize(),this._set_sizes();var t="",e=0,n=0,i=0;if(this._is_chart_visible()){var a=this._scale_helpers,s=[a.primaryScale()].concat(this.config.subscales); -i=this.config.scale_height-1,a.sortScales(s);for(var r=this._get_resize_options(),o=r.x?0:this.$task.offsetWidth,d=a.prepareConfigs(s,this.config.min_column_width,o,i),l=this._tasks=d[d.length-1],_=[],h=this.templates.scale_row_class,c=0;c'+this._prepare_scale_html(d[c])+"")}t=_.join(""),e=l.full_width+this.$scroll_ver.offsetWidth+"px",n=l.full_width+"px",i+="px" -}this.$task.style.display=this._is_chart_visible()?"":"none",this.$task_scale.style.height=i,this.$task_data.style.width=this.$task_scale.style.width=e,this.$task_links.style.width=this.$task_bars.style.width=n,this.$task_scale.innerHTML=t},gantt._render_bg_line=function(t){var e=gantt._tasks,n=e.count,i=[];if(gantt.config.show_task_cells)for(var a=0;n>a;a++){var s=e.width[a],r="",o="";if(s>0){r="width:"+s+"px;",o="gantt_task_cell"+(a==n-1?" gantt_last_cell":""),_=this.templates.task_cell_class(t,e.trace_x[a]),_&&(o+=" "+_); -var d="
";i.push(d)}}var l=t.$index%2!==0,_=gantt.templates.task_row_class(t.start_date,t.end_date,t),h="gantt_task_row"+(l?" odd":"")+(_?" "+_:"");this.getState().selected_task==t.id&&(h+=" gantt_selected");var c=document.createElement("div");return c.className=h,c.style.height=gantt.config.row_height+"px",c.setAttribute(this.config.task_attribute,t.id),c.innerHTML=i.join(""),c},gantt._adjust_scales=function(){if(this.config.fit_tasks){var t=+this._min_date,e=+this._max_date; -if(this._init_tasks_range(),+this._min_date!=t||+this._max_date!=e)return this.render(),this.callEvent("onScaleAdjusted",[]),!0}return!1},gantt.refreshTask=function(t,e){var n=this._get_task_renderers(),i=this.getTask(t);if(i&&this.isTaskVisible(t))for(var a=0;a=+a.min_date&&t.appendChild(i(e+" task_left"))},gantt._get_task_height=function(){var t=this.config.task_height;return"full"==t&&(t=this.config.row_height-5),t=Math.min(t,this.config.row_height),Math.max(t,0)},gantt._get_milestone_width=function(){return this._get_task_height()},gantt._get_visible_milestone_width=function(){var t=gantt._get_task_height();return Math.sqrt(2*t*t)},gantt._get_task_width=function(t){return Math.round(this._get_task_pos(t,!1).x-this._get_task_pos(t,!0).x) -},gantt._render_task_element=function(t){var e=this._get_task_pos(t),n=this.config,i=this._get_task_height(),a=Math.floor((this.config.row_height-i)/2);t.type==n.types.milestone&&n.link_line_width>1&&(a+=1);var s=document.createElement("div"),r=gantt._get_task_width(t),o=this._get_safe_type(t.type);s.setAttribute(this.config.task_attribute,t.id),s.appendChild(gantt._render_task_content(t,r)),s.className=this._combine_item_class("gantt_task_line",this.templates.task_class(t.start_date,t.end_date,t),t.id),s.style.cssText=["left:"+e.x+"px","top:"+(a+e.y)+"px","height:"+i+"px","line-height:"+i+"px","width:"+r+"px"].join(";"); -var d=this._render_leftside_content(t);return d&&s.appendChild(d),d=this._render_rightside_content(t),d&&s.appendChild(d),n.show_progress&&o!=this.config.types.milestone&&this._render_task_progress(t,s,r),this.config.readonly||(n.drag_resize&&!this._is_flex_task(t)&&o!=this.config.types.milestone&&gantt._render_pair(s,"gantt_task_drag",t,function(t){var e=document.createElement("div");return e.className=t,e}),n.drag_links&&gantt._render_pair(s,"gantt_link_control",t,function(t){var e=document.createElement("div"); -e.className=t,e.style.cssText=["height:"+i+"px","line-height:"+i+"px"].join(";");var n=document.createElement("div");return n.className="gantt_link_point",e.appendChild(n),e})),s},gantt._render_side_content=function(t,e,n){if(!e)return null;var i=e(t.start_date,t.end_date,t);if(!i)return null;var a=document.createElement("div");return a.className="gantt_side_content "+n,a.innerHTML=i,a},gantt._render_leftside_content=function(t){var e="gantt_left "+gantt._get_link_crossing_css(!0,t);return gantt._render_side_content(t,this.templates.leftside_text,e) -},gantt._render_rightside_content=function(t){var e="gantt_right "+gantt._get_link_crossing_css(!1,t);return gantt._render_side_content(t,this.templates.rightside_text,e)},gantt._get_conditions=function(t){return t?{$source:[gantt.config.links.start_to_start],$target:[gantt.config.links.start_to_start,gantt.config.links.finish_to_start]}:{$source:[gantt.config.links.finish_to_start,gantt.config.links.finish_to_finish],$target:[gantt.config.links.finish_to_finish]}},gantt._get_link_crossing_css=function(t,e){var n=gantt._get_conditions(t); -for(var i in n)for(var a=e[i],s=0;st||t>e.full_width)return null;for(var n=0,i=0;i+e.width[n]=0,"Invalid day index");for(var n=Math.floor(e),i=e%1,a=0,s=1;n>=s;s++)a+=gantt._tasks.width[s-1];return i&&(a+=n=this._max_date)return n.length;for(var a=0;as;s++)this.render_item(e[s],a);i.appendChild(a)},replace_item:function(t,e){var n=this.rendered[t];n&&n.parentNode&&n.parentNode.replaceChild(e,n),this.rendered[t]=e},remove_item:function(t){var e=this.rendered[t]; -e&&e.parentNode&&e.parentNode.removeChild(e),delete this.rendered[t]},change_id:function(t,e){this.rendered[e]=this.rendered[t],delete this.rendered[t]},rendered:this._task_area_pulls[t],node:n},this._task_area_renderers[t])},gantt._pull={},gantt._branches={},gantt._order=[],gantt._lpull={},gantt.load=function(t,e,n){dhtmlx.assert(arguments.length,"Invalid load arguments"),this.callEvent("onLoadStart",[]);var i="json",a=null;arguments.length>=3?(i=e,a=n):"string"==typeof arguments[1]?i=arguments[1]:"function"==typeof arguments[1]&&(a=arguments[1]),dhtmlxAjax.get(t,dhtmlx.bind(function(t){this.on_load(t,i),"function"==typeof a&&a.call(this) -},this))},gantt.parse=function(t,e){this.on_load({xmlDoc:{responseText:t}},e)},gantt.serialize=function(t){return t=t||"json",this[t].serialize()},gantt.on_load=function(t,e){e||(e="json"),dhtmlx.assert(this[e],"Invalid data type:'"+e+"'");var n=t.xmlDoc.responseText,i=this[e].parse(n,t);this._process_loading(i),this.callEvent("onLoadEnd",[])},gantt._process_loading=function(t){t.collections&&this._load_collections(t.collections);for(var e=t.data,n=0;nn;n++)if(e[n]==t)return n;return-1},gantt.eachTask=function(t,e,n){e=e||this.config.root_id,n=n||this;var i=this._branches[e];if(i)for(var a=0;a"},_copyObject:function(t){var e=gantt.templates.xml_format(t.start_date),n=gantt.templates.xml_format(t.end_date);return""},serialize:function(){var t=[],e=[];gantt.eachTask(function(e){t.push(this._copyObject(e)) -},this.config.root_id,this);for(var n in gantt._lpull)e.push(this._copyLink(gantt._lpull[n]));return""+t.join("")+""+e.join("")+""}},gantt.oldxml={parse:function(t,e){e=gantt.xml._getXML(t,e,"projects");for(var n={collections:{links:[]}},i=n.data=[],a=e.doXPath("//task"),s=0;se;e++)if(this.units[e]==t)return e;dhtmlx.assert(!1,"Incorrect duration unit")},_timestamp:function(t){var e=null;return t.day||0===t.day?e=t.day:t.date&&(e=gantt.date.date_part(new Date(t.date)).valueOf()),e},set_time:function(t){var e=void 0!==t.hours?t.hours:!0,n=this._timestamp(t);null!==n?this.dates[n]=e:this.hours=e},unset_time:function(t){if(t){var e=this._timestamp(t); -null!==e&&delete this.dates[e]}else this.hours=[]},is_working_unit:function(t,e,n){return gantt.config.work_time?(void 0===n&&(n=this._get_unit_order(e)),void 0===n?!1:n&&!this.is_working_unit(t,this.units[n-1],n-1)?!1:this["is_work_"+e]?this["is_work_"+e](t):!0):!0},is_work_day:function(t){var e=this.get_working_hours(t);return e instanceof Array?e.length>0:!1},is_work_hour:function(t){for(var e=this.get_working_hours(t),n=t.getHours(),i=0;i=e[i]&&ns;){var r=gantt.date.add(a,i,n); -this.is_working_unit(i>0?a:r,n)&&s++,a=r}return a},get_closest_worktime:function(t){if(this.is_working_unit(t.date,t.unit))return t.date;var e=t.unit,n=gantt.date[e+"_start"](t.date),i=new Date(n),a=new Date(n),s=!0,r=3e3,o=0,d="any"==t.dir||!t.dir,l=1;for("past"==t.dir&&(l=-1);!this.is_working_unit(n,e);)if(d&&(n=s?i:a,l=-1*l),n=gantt.date.add(n,l,e),d&&(s?i=n:a=n),s=!s,o++,o>r)return dhtmlx.assert(!1,"Invalid working time check"),!1;return(n==a||"past"==t.dir)&&(n=gantt.date.add(n,1,e)),n}},gantt.getTask=function(t){return dhtmlx.assert(this._pull[t]),this._pull[t] -},gantt.getTaskByTime=function(t,e){var n=this._pull,i=[];if(t||e){t=+t||-1/0,e=+e||1/0;for(var a in n){var s=n[a];+s.start_datet&&i.push(s)}}else for(var a in n)i.push(n[a]);return i},gantt.isTaskExists=function(t){return dhtmlx.defined(this._pull[t])},gantt.isTaskVisible=function(t){if(!this._pull[t])return!1;if(!(+this._pull[t].start_date<+this._max_date&&+this._pull[t].end_date>+this._min_date))return!1;for(var e=0,n=this._order.length;n>e;e++)if(this._order[e]==t)return!0;return!1 -},gantt.updateTask=function(t,e){return dhtmlx.defined(e)||(e=this.getTask(t)),this.callEvent("onBeforeTaskUpdate",[t,e])===!1?!1:(this._pull[e.id]=e,this._is_parent_sync(e)||this._resync_parent(e),this._update_parents(e.id),this.refreshTask(e.id),this.callEvent("onAfterTaskUpdate",[t,e]),this._sync_order(),void this._adjust_scales())},gantt._add_branch=function(t){this._branches[t.parent]||(this._branches[t.parent]=[]);for(var e=this._branches[t.parent],n=!1,i=0,a=e.length;a>i;i++)if(e[i]==t.id){n=!0; -break}n||e.push(t.id),this._sync_parent(t),this._sync_order()},gantt._move_branch=function(t,e,n){t.parent=n,this._sync_parent(t),this._replace_branch_child(e,t.id),n?this._add_branch(t):delete this._branches[t.id],t.$level=this._item_level(t),this._sync_order()},gantt._resync_parent=function(t){this._move_branch(t,t.$rendered_parent,t.parent)},gantt._sync_parent=function(t){t.$rendered_parent=t.parent},gantt._is_parent_sync=function(t){return t.$rendered_parent==t.parent},gantt._replace_branch_child=function(t,e,n){var i=this._branches[t]; -if(i){for(var a=[],s=0;s0;)this.deleteLink(n.$source[0]);for(;n.$target.length>0;)this.deleteLink(n.$target[0]);return delete this._pull[t],this._move_branch(n,n.parent,null),e||(this.callEvent("onAfterTaskDelete",[t,n]),this.refreshData()),!0 -},gantt.clearAll=function(){this._pull={},this._branches={},this._order=[],this._order_full=[],this._lpull={},this.refreshData(),this.callEvent("onClear",[])},gantt._update_flags=function(t,e){this._lightbox_id==t&&(this._lightbox_id=e),this._selected_task==t&&(this._selected_task=e),this._tasks_dnd.drag&&this._tasks_dnd.drag.id==t&&(this._tasks_dnd.drag.id=e)},gantt.changeTaskId=function(t,e){var n=this._pull[e]=this._pull[t];this._pull[e].id=e,delete this._pull[t];for(var i in this._pull)this._pull[i].parent==t&&(this._pull[i].parent=e); -this._update_flags(t,e),this._replace_branch_child(n.parent,t,e),this.callEvent("onTaskIdChange",[t,e])},gantt._get_duration_unit=function(){return 1e3*gantt._get_line(this.config.duration_unit)||this.config.duration_unit},gantt._get_safe_type=function(t){for(var e in this.config.types)if(this.config.types[e]==t)return t;return gantt.config.types.task},gantt._get_type_name=function(t){for(var e in this.config.types)if(this.config.types[e]==t)return e;return"task"},gantt.getWorkHours=function(t){return this._working_time_helper.get_working_hours(t) -},gantt.setWorkTime=function(t){this._working_time_helper.set_time(t)},gantt.isWorkTime=function(t,e){var n=this._working_time_helper;return n.is_working_unit(t,e||this.config.duration_unit)},gantt.getClosestWorkTime=function(t){var e=this._working_time_helper;return t instanceof Date&&(t={date:t}),t.dir=t.dir||"any",t.unit=t.unit||this.config.duration_unit,e.get_closest_worktime(t)},gantt.calculateDuration=function(t,e){var n=this._working_time_helper;return n.get_work_units_between(t,e,this.config.duration_unit,this.config.duration_step) -},gantt.calculateEndDate=function(t,e){var n=this._working_time_helper,i=e>=0?1:-1;return n.add_worktime(t,Math.abs(e),this.config.duration_unit,i*this.config.duration_step)},gantt._init_task=function(t){return dhtmlx.defined(t.id)||(t.id=dhtmlx.uid()),t.start_date&&(t.start_date=gantt.date.parseDate(t.start_date,"xml_date")),t.end_date&&(t.end_date=gantt.date.parseDate(t.end_date,"xml_date")),t.start_date&&!t.end_date&&t.duration&&(t.end_date=this.calculateEndDate(t.start_date,t.duration)),gantt.config.work_time&&gantt.config.correct_work_time&&(t.start_date&&(t.start_date=gantt.getClosestWorkTime(t.start_date)),t.end_date&&(t.end_date=gantt.getClosestWorkTime(t.end_date))),gantt._init_task_timing(t),t.$source=[],t.$target=[],t.parent=t.parent||this.config.root_id,t.$open=dhtmlx.defined(t.open)?t.open:!1,t.$level=this._item_level(t),t -},gantt._init_task_timing=function(t){void 0===t.$rendered_type?t.$rendered_type=t.type:t.$rendered_type!=t.type&&(delete t.$no_end,delete t.$no_start,t.$rendered_type=t.type),void 0!==t.$no_end&&void 0!==t.$no_start||t.type==this.config.types.milestone||(t.type==this.config.types.project?t.$no_end=t.$no_start=!0:(t.$no_end=!(t.end_date||t.duration),t.$no_start=!t.start_date)),t.type==this.config.types.milestone&&(t.end_date=t.start_date),t.start_date&&t.end_date&&(t.duration=this.calculateDuration(t.start_date,t.end_date)),t.duration=t.duration||0 -},gantt._is_flex_task=function(t){return!(!t.$no_end&&!t.$no_start)},gantt._update_parents=function(t,e){if(t){for(var n=this.getTask(t);!n.$no_end&&!n.$no_start&&n.parent&&this.isTaskExists(n.parent);)n=this.getTask(n.parent);if(n.$no_end){var i=0;this.eachTask(function(t){t.end_date&&+t.end_date>+i&&(i=new Date(t.end_date))},n.id),i&&(n.end_date=i)}if(n.$no_start){var a=1/0;this.eachTask(function(t){t.start_date&&+t.start_date<+a&&(a=new Date(t.start_date))},n.id),1/0!=a&&(n.start_date=a)}(n.$no_end||n.$no_start)&&(this._init_task_timing(n),e||this.refreshTask(n.id,!0)),n.parent&&this.isTaskExists(n.parent)&&this._update_parents(n.parent,e) -}},gantt.isChildOf=function(t,e){if(!this.isTaskExists(t))return!1;if(e===this.config.root_id)return this.isTaskExists(t);for(var n=this.getTask(t);n&&this.isTaskExists(n.parent);)if(n=this.getTask(n.parent),n&&n.id==e)return!0;return!1},gantt._get_closest_date=function(t){for(var e=t.date,n=t.step,i=t.unit,a=gantt.date[i+"_start"](new Date(this._min_date));+e>+a;)a=gantt.date.add(a,n,i);var s=gantt.date.add(a,-1*n,i);return t.dir&&"future"==t.dir?a:t.dir&&"past"==t.dir?s:Math.abs(e-s)i[t];return e&&(a=!a),a?1:-1 -}:t,s=this._branches[n];if(s){for(var r=[],o=s.length-1;o>=0;o--)r[o]=this._pull[s[o]];r.sort(a);for(var o=0;o 
",gantt.showLightbox=function(t){if(t&&!this.config.readonly&&this.callEvent("onBeforeLightbox",[t])){var e=this.getTask(t),n=this.getLightbox(this._get_safe_type(e.type)); -this._center_lightbox(n),this.showCover(),this._fill_lightbox(t,n),this.callEvent("onLightbox",[t])}},gantt._get_timepicker_step=function(){if(this.config.round_dnd_dates){var t=gantt._tasks,e=this._get_line(t.unit)*t.step/60;return e>=1440&&(e=this.config.time_step),e}return this.config.time_step},gantt.getLabel=function(t,e){for(var n=this._get_typed_lightbox_config(),i=0;i
"+this.locale.labels[a[s]]+"
";a=this.config.buttons_right;for(var s in a)i+="
"+this.locale.labels[a[s]]+"
";i+="",e.innerHTML=i,gantt.config.drag_lightbox&&(e.firstChild.onmousedown=gantt._ready_to_dnd,e.firstChild.onselectstart=function(){return!1 -},e.firstChild.style.cursor="pointer",gantt._init_dnd_events()),document.body.insertBefore(e,document.body.firstChild),this._lightbox=e;var r=this._get_typed_lightbox_config(t);i=this._render_sections(r);for(var o=e.getElementsByTagName("div"),s=0;s
"+this.locale.labels["button_"+t[n].button]+"
"),this.config.wide_form&&(e+="
"),e+="
"+s+this.locale.labels["section_"+t[n].name]+"
"+i.render.call(this,t[n]),e+="
"}}return e},gantt.resizeLightbox=function(){var t=this._lightbox; -if(t){var e=t.childNodes[1];e.style.height="0px",e.style.height=e.scrollHeight+"px",t.style.height=e.scrollHeight+this.config.lightbox_additional_height+"px",e.style.height=e.scrollHeight+"px"}},gantt._center_lightbox=function(t){if(t){t.style.display="block";var e=window.pageYOffset||document.body.scrollTop||document.documentElement.scrollTop,n=window.pageXOffset||document.body.scrollLeft||document.documentElement.scrollLeft,i=window.innerHeight||document.documentElement.clientHeight;t.style.top=e?Math.round(e+Math.max((i-t.offsetHeight)/2,0))+"px":Math.round(Math.max((i-t.offsetHeight)/2,0)+9)+"px",t.style.left=document.documentElement.scrollWidth>document.body.offsetWidth?Math.round(n+(document.body.offsetWidth-t.offsetWidth)/2)+"px":Math.round((document.body.offsetWidth-t.offsetWidth)/2)+"px" -}},gantt.showCover=function(){if(!this._cover){this._cover=document.createElement("DIV"),this._cover.className="dhx_cal_cover";var t=void 0!==document.height?document.height:document.body.offsetHeight,e=document.documentElement?document.documentElement.scrollHeight:0;this._cover.style.height=Math.max(t,e)+"px",document.body.appendChild(this._cover)}},gantt._init_lightbox_events=function(){gantt.lightbox_events={},gantt.lightbox_events.dhx_save_btn=function(){gantt._save_lightbox()},gantt.lightbox_events.dhx_delete_btn=function(){gantt.callEvent("onLightboxDelete",[gantt._lightbox_id])&&gantt.$click.buttons["delete"](gantt._lightbox_id) -},gantt.lightbox_events.dhx_cancel_btn=function(){gantt._cancel_lightbox()},gantt.lightbox_events["default"]=function(t,e){if(e.getAttribute("dhx_button"))gantt.callEvent("onLightboxButton",[e.className,e,t]);else{var n,i,a;-1!=e.className.indexOf("dhx_custom_button")&&(-1!=e.className.indexOf("dhx_custom_button_")?(n=e.parentNode.getAttribute("index"),a=e.parentNode.parentNode):(n=e.getAttribute("index"),a=e.parentNode,e=e.firstChild));var s=gantt._get_typed_lightbox_config();n&&(i=gantt.form_blocks[s[n].type],i.button_click(n,e,a,a.nextSibling)) -}},dhtmlxEvent(gantt.getLightbox(),"click",function(t){t=t||window.event;var e=t.target?t.target:t.srcElement;if(e.className||(e=e.previousSibling),e&&e.className&&0===e.className.indexOf("dhx_btn_set")&&(e=e.firstChild),e&&e.className){var n=dhtmlx.defined(gantt.lightbox_events[e.className])?gantt.lightbox_events[e.className]:gantt.lightbox_events["default"];return n(t,e)}return!1}),gantt.getLightbox().onkeydown=function(t){switch((t||event).keyCode){case gantt.keys.edit_save:if((t||event).shiftKey)return; -gantt._save_lightbox();break;case gantt.keys.edit_cancel:gantt._cancel_lightbox()}}},gantt._cancel_lightbox=function(){var t=this.getLightboxValues();this.callEvent("onLightboxCancel",[this._lightbox_id,t.$new]),t.$new&&(this._deleteTask(t.id,!0),this.refreshData()),this.hideLightbox()},gantt._save_lightbox=function(){var t=this.getLightboxValues();this.callEvent("onLightboxSave",[this._lightbox_id,t,!!t.$new])&&(t.$new?(delete t.$new,this.addTask(t)):(dhtmlx.mixin(this.getTask(t.id),t,!0),this.updateTask(t.id)),this.refreshData(),this.hideLightbox()) -},gantt.getLightboxValues=function(){for(var t=dhtmlx.mixin({},this.getTask(this._lightbox_id)),e=this._get_typed_lightbox_config(),n=0;n0&&(o+=" ");var _="";switch(l){case"%Y":t._time_format_order[2]=d,t._time_format_order.size++;for(var h=a.getFullYear()-5,c=0;10>c;c++)_+="";break;case"%m":t._time_format_order[1]=d,t._time_format_order.size++;for(var c=0;12>c;c++)_+="";break;case"%d":t._time_format_order[0]=d,t._time_format_order.size++;for(var c=1;32>c;c++)_+="";break;case"%H:%i":var s=1440,r=0; -t._time_format_order[3]=d,t._time_format_order.size++;var c=r,g=a.getDate();for(t._time_values=[];s>c;){var u=this.templates.time_picker(a);_+="",t._time_values.push(c),a.setTime(a.valueOf()+60*this._get_timepicker_step()*1e3);var f=a.getDate()!=g?1:0;c=24*f*60+60*a.getHours()+a.getMinutes()}}if(_){var p=t.readonly?"disabled='disabled'":"",m=e?" style='display:none'":"";o+=""}}return o},_fill_lightbox_select:function(t,e,n,i){if(t[e+i[0]].value=n.getDate(),t[e+i[1]].value=n.getMonth(),t[e+i[2]].value=n.getFullYear(),dhtmlx.defined(i[3])){var a=60*n.getHours()+n.getMinutes(); -a=Math.round(a/gantt._get_timepicker_step())*gantt._get_timepicker_step(),t[e+i[3]].value=a}},template:{render:function(t){var e=(t.height||"30")+"px";return"
"},set_value:function(t,e){t.innerHTML=e||""},get_value:function(t){return t.innerHTML||""},focus:function(){}},textarea:{render:function(t){var e=(t.height||"130")+"px";return"
"},set_value:function(t,e){t.firstChild.value=e||"" -},get_value:function(t){return t.firstChild.value},focus:function(t){var e=t.firstChild;gantt._focus(e,!0)}},select:{render:function(t){for(var e=(t.height||"23")+"px",n="
"},set_value:function(t,e,n,i){var a=t.firstChild;!a._dhx_onchange&&i.onchange&&(a.onchange=i.onchange,a._dhx_onchange=!0),"undefined"==typeof e&&(e=(a.options[0]||{}).value),a.value=e||"" -},get_value:function(t){return t.firstChild.value},focus:function(t){var e=t.firstChild;gantt._focus(e,!0)}},time:{render:function(t){var e=this.form_blocks.getTimePicker.call(this,t),n=["
"];return n.push(e),t.single_date?(e=this.form_blocks.getTimePicker.call(this,t,!0),n.push("")):n.push("  –  "),n.push(e),n.push("
"),n.join("") -},set_value:function(t,e,n,i){{var a=this.config,s=t.getElementsByTagName("select"),r=i._time_format_order;i._time_format_size}if(a.auto_end_date)for(var o=function(){var t=new Date(s[r[2]].value,s[r[1]].value,s[r[0]].value,0,0),e=gantt.calculateEndDate(t,1);this.form_blocks._fill_lightbox_select(s,r.size,e,r,a)},d=0;4>d;d++)s[d].onchange=o;this.form_blocks._fill_lightbox_select(s,0,n.start_date,r,a),this.form_blocks._fill_lightbox_select(s,r.size,n.end_date,r,a)},get_value:function(t,e,n){var i=t.getElementsByTagName("select"),a=n._time_format_order,s=0,r=0; -if(dhtmlx.defined(a[3])){var o=parseInt(i[a[3]].value,10);s=Math.floor(o/60),r=o%60}if(e.start_date=new Date(i[a[2]].value,i[a[1]].value,i[a[0]].value,s,r),s=r=0,dhtmlx.defined(a[3])){var o=parseInt(i[a.size+a[3]].value,10);s=Math.floor(o/60),r=o%60}return e.end_date=new Date(i[a[2]+a.size].value,i[a[1]+a.size].value,i[a[0]+a.size].value,s,r),e.end_date<=e.start_date&&(e.end_date=gantt.date.add(e.start_date,gantt._get_timepicker_step(),"minute")),{start_date:new Date(e.start_date),end_date:new Date(e.end_date)} -},focus:function(t){gantt._focus(t.getElementsByTagName("select")[0])}},duration:{render:function(t){var e=this.form_blocks.getTimePicker.call(this,t);e="
"+e+"
";var n=this.locale.labels[this.config.duration_unit+"s"],i=t.single_date?' style="display:none"':"",a=t.readonly?" disabled='disabled'":"",s="
"+n+"
",r="
"+e+" "+s+"
"; -return r},set_value:function(t,e,n,i){function a(){var e=gantt.form_blocks.duration._get_start_date.call(gantt,t,i),n=gantt.form_blocks.duration._get_duration.call(gantt,t,i),a=gantt.calculateEndDate(e,n);h.innerHTML=gantt.templates.task_date(a)}function s(t){var e=l.value;e=parseInt(e,10),window.isNaN(e)&&(e=0),e+=t,1>e&&(e=1),l.value=e,a()}var r=this.config,o=t.getElementsByTagName("select"),d=t.getElementsByTagName("input"),l=d[1],_=[d[0],d[2]],h=t.getElementsByTagName("span")[0],c=i._time_format_order; -_[0].onclick=dhtmlx.bind(function(){s(-1*this.config.duration_step)},this),_[1].onclick=dhtmlx.bind(function(){s(1*this.config.duration_step)},this),o[0].onchange=a,o[1].onchange=a,o[2].onchange=a,o[3]&&(o[3].onchange=a),l.onkeydown=dhtmlx.bind(function(t){t=t||window.event;var e=t.charCode||t.keyCode||t.which;return 40==e?(s(-1*this.config.duration_step),!1):38==e?(s(1*this.config.duration_step),!1):void window.setTimeout(function(){a()},1)},this),l.onchange=dhtmlx.bind(function(){a()},this),this.form_blocks._fill_lightbox_select(o,0,n.start_date,c,r); -var g;g=n.end_date?gantt.calculateDuration(n.start_date,n.end_date):n.duration,g=Math.round(g),l.value=g,a()},_get_start_date:function(t,e){var n=t.getElementsByTagName("select"),i=e._time_format_order,a=0,s=0;if(dhtmlx.defined(i[3])){var r=parseInt(n[i[3]].value,10);a=Math.floor(r/60),s=r%60}return new Date(n[i[2]].value,n[i[1]].value,n[i[0]].value,a,s)},_get_duration:function(t){var e=t.getElementsByTagName("input")[1];return e=parseInt(e.value,10),window.isNaN(e)&&(e=1),0>e&&(e*=-1),e},get_value:function(t,e,n){e.start_date=this.form_blocks.duration._get_start_date(t,n); -var i=this.form_blocks.duration._get_duration(t,n);return e.end_date=this.calculateEndDate(e.start_date,i),e.duration=i,{start_date:new Date(e.start_date),end_date:new Date(e.end_date)}},focus:function(t){gantt._focus(t.getElementsByTagName("select")[0])}},typeselect:{render:function(t){var e=gantt.config.types,n=gantt.locale.labels,i=[];for(var a in e)i.push({key:e[a],label:n["type_"+a]});t.options=i;var s=t.onchange;return t.onchange=function(){gantt.getState().lightbox;gantt.changeLightboxType(this.value),"function"==typeof s&&s.apply(this,arguments) -},gantt.form_blocks.select.render.apply(this,arguments)},set_value:function(){return gantt.form_blocks.select.set_value.apply(this,arguments)},get_value:function(){return gantt.form_blocks.select.get_value.apply(this,arguments)},focus:function(){return gantt.form_blocks.select.focus.apply(this,arguments)}},parent:{_filter:function(t,e,n){var i=e.filter||function(){return!0};t=t.slice(0);for(var a=0;a
",this.$grid_scale=this.$grid.childNodes[0],this.$grid_data=this.$grid.childNodes[1],this.$task.innerHTML="
",this.$task_scale=this.$task.childNodes[0],this.$task_data=this.$task.childNodes[1],this.$task_bg=this.$task_data.childNodes[0],this.$task_links=this.$task_data.childNodes[1],this.$task_bars=this.$task_data.childNodes[2] -},gantt.$click={buttons:{edit:function(t){gantt.showLightbox(t)},"delete":function(t){var e=gantt.locale.labels.confirm_deleting,n=gantt.locale.labels.confirm_deleting_title;gantt._dhtmlx_confirm(e,n,function(){var e=gantt.getTask(t);e.$new?(gantt._deleteTask(t,!0),gantt.refreshData()):gantt.deleteTask(t),gantt.hideLightbox()})}}},gantt._calculate_content_height=function(){var t=this.config.scale_height,e=this._order.length*this.config.row_height,n=this._scroll_hor?this.config.scroll_size+1:0;return this._is_grid_visible()||this._is_chart_visible()?t+e+2+n:0 -},gantt._calculate_content_width=function(){{var t=this._get_grid_width(),e=this._tasks?this._tasks.full_width:0;this._scroll_ver?this.config.scroll_size+1:0}return this._is_chart_visible()||(e=0),this._is_grid_visible()||(t=0),t+e+1},gantt._get_resize_options=function(){var t={x:!1,y:!1};return"xy"==this.config.autosize?t.x=t.y=!0:"y"==this.config.autosize||this.config.autosize===!0?t.y=!0:"x"==this.config.autosize&&(t.x=!0),t},gantt._set_sizes=function(){var t=this._get_resize_options();if(t.y&&(this._obj.style.height=this._calculate_content_height()+"px"),t.x&&(this._obj.style.width=this._calculate_content_width()+"px"),this._y=this._obj.clientHeight,!(this._y<20)){this.$grid.style.height=this.$task.style.height=Math.max(this._y-this.$scroll_hor.offsetHeight-2,0)+"px"; -var e=Math.max(this._y-(this.config.scale_height||0)-this.$scroll_hor.offsetHeight-2,0);this.$grid_data.style.height=this.$task_data.style.height=e+"px";var n=Math.max(this._get_grid_width()-1,0);this.$grid.style.width=n+"px",this.$grid.style.display=0===n?"none":"",this._x=this._obj.clientWidth,this._x<20||(this.$grid_data.style.width=Math.max(this._get_grid_width()-1,0)+"px",this.$task.style.width=Math.max(this._x-this._get_grid_width()-2,0)+"px")}},gantt.getScrollState=function(){return{x:this.$task.scrollLeft,y:this.$task_data.scrollTop} -},gantt.scrollTo=function(t,e){1*t==t&&(this.$task.scrollLeft=t),1*e==e&&(this.$task_data.scrollTop=e,this.$grid_data.scrollTop=e)},gantt.showDate=function(t){var e=this.posFromDate(t),n=Math.max(e-this.config.task_scroll_offset,0);this.scrollTo(n)},gantt.showTask=function(t){var e=this.getTaskNode(t);if(e){var n=Math.max(e.offsetLeft-this.config.task_scroll_offset,0),i=e.offsetTop-(this.$task_data.offsetHeight-this.config.row_height)/2;this.scrollTo(n,i)}},gantt._on_resize=gantt.setSizes=function(){gantt._set_sizes(),gantt._scroll_resize() -},gantt.render=function(){if(this._render_grid(),this._render_tasks_scales(),this._scroll_resize(),this._on_resize(),this._render_data(),this.config.initial_scroll){var t=this._order[0]||this.config.root_id;t&&this.showTask(t)}this.callEvent("onGanttRender",[])},gantt._set_scroll_events=function(){dhtmlxEvent(this.$scroll_hor,"scroll",function(){if(!gantt._touch_scroll_active){var t=gantt.$scroll_hor.scrollLeft;gantt.scrollTo(t)}}),dhtmlxEvent(this.$scroll_ver,"scroll",function(){if(!gantt._touch_scroll_active){var t=gantt.$scroll_ver.scrollTop; -gantt.$grid_data.scrollTop=t,gantt.scrollTo(null,t)}}),dhtmlxEvent(this.$task,"scroll",function(){var t=gantt.$task.scrollLeft,e=gantt.$scroll_hor.scrollLeft;e!=t&&(gantt.$scroll_hor.scrollLeft=t)}),dhtmlxEvent(this.$task_data,"scroll",function(){var t=gantt.$task_data.scrollTop,e=gantt.$scroll_ver.scrollTop;e!=t&&(gantt.$scroll_ver.scrollTop=t)}),dhtmlxEvent(gantt.$container,"mousewheel",function(t){var e=gantt._get_resize_options();if(t.wheelDeltaX){if(e.x)return!0;var n=t.wheelDeltaX/-40,i=gantt.$task.scrollLeft+30*n; -gantt.scrollTo(i,null),gantt.$scroll_hor.scrollTop=a}else{if(e.y)return!0;var n=t.wheelDelta/-40;"undefined"==typeof t.wheelDelta&&(n=t.detail);var a=gantt.$grid_data.scrollTop+30*n;gantt.scrollTo(null,a),gantt.$scroll_ver.scrollTop=a}return t.preventDefault&&t.preventDefault(),t.cancelBubble=!0,!1})},gantt._scroll_resize=function(){if(!(this._x<20||this._y<20)){var t=this._get_grid_width(),e=this._x-t,n=this._y-this.config.scale_height,i=this.config.scroll_size+1,a=this.$task_data.offsetWidth-i,s=this.config.row_height*this._order.length,r=this._get_resize_options(),o=this._scroll_hor=r.x?!1:a>e,d=this._scroll_ver=r.y?!1:s>n; -this.$scroll_hor.style.display=o?"block":"none",this.$scroll_hor.style.height=(o?i:0)+"px",this.$scroll_hor.style.width=this._x-(d?i:2)+"px",this.$scroll_hor.firstChild.style.width=a+t+i+2+"px",this.$scroll_ver.style.display=d?"block":"none",this.$scroll_ver.style.width=(d?i:0)+"px",this.$scroll_ver.style.height=this._y-(o?i:0)-this.config.scale_height+"px",this.$scroll_ver.style.top=this.config.scale_height+"px",this.$scroll_ver.firstChild.style.height=this.config.scale_height+s+"px"}},gantt.locate=function(t){var e=gantt._get_target_node(t); -if("gantt_task_cell"==e.className)return null;for(var n=arguments[1]||this.config.task_attribute;e;){if(e.getAttribute){var i=e.getAttribute(n);if(i)return i}e=e.parentNode}return null},gantt._get_target_node=function(t){var e;return t.tagName?e=t:(t=t||window.event,e=t.target||t.srcElement),e},gantt._trim=function(t){var e=String.prototype.trim||function(){return this.replace(/^\s+|\s+$/g,"")};return e.apply(t)},gantt._locate_css=function(t,e,n){void 0===n&&(n=!0);for(var i=gantt._get_target_node(t),a="";i;){if(a=i.className){var s=a.indexOf(e); -if(s>=0){if(!n)return i;var r=0===s||!gantt._trim(a.charAt(s-1)),o=s+e.length>=a.length||!gantt._trim(a.charAt(s+e.length));if(r&&o)return i}}i=i.parentNode}return null},gantt._locateHTML=function(t,e){var n=gantt._get_target_node(t);for(e=e||this.config.task_attribute;n;){if(n.getAttribute){var i=n.getAttribute(e);if(i)return n}n=n.parentNode}return null},gantt.getTaskRowNode=function(t){for(var e=this.$grid_data.childNodes,n=this.config.task_attribute,i=0;in?!0:t._on_timeout?!1:(setTimeout(function(){delete t._on_timeout},n),t._on_timeout=!0,!0)},gantt.selectTask=function(t){if(!this.config.select_task)return!1; -if(t){if(this._selected_task==t)return this._selected_task;if(!this.callEvent("onBeforeTaskSelected",[t]))return!1;this.unselectTask(),this._selected_task=t,this.refreshTask(t),this.callEvent("onTaskSelected",[t])}return this._selected_task},gantt.unselectTask=function(){var t=this._selected_task;t&&(this._selected_task=null,this.refreshTask(t),this.callEvent("onTaskUnselected",[t]))},gantt.getSelectedId=function(){return dhtmlx.defined(this._selected_task)?this._selected_task:null},gantt.changeLightboxType=function(t){return this.getLightboxType()==t?!0:void gantt._silent_redraw_lightbox(t) -},gantt.date={init:function(){for(var t=gantt.locale.date.month_short,e=gantt.locale.date.month_short_hash={},n=0;nt?"0"+t:t},copy:function(t){return new Date(t.valueOf())},date_to_str:function(t,e){return t=t.replace(/%[a-zA-Z]/g,function(t){switch(t){case"%d":return'"+gantt.date.to_fixed(date.getDate())+"'; -case"%m":return'"+gantt.date.to_fixed((date.getMonth()+1))+"';case"%j":return'"+date.getDate()+"';case"%n":return'"+(date.getMonth()+1)+"';case"%y":return'"+gantt.date.to_fixed(date.getFullYear()%100)+"';case"%Y":return'"+date.getFullYear()+"';case"%D":return'"+gantt.locale.date.day_short[date.getDay()]+"';case"%l":return'"+gantt.locale.date.day_full[date.getDay()]+"';case"%M":return'"+gantt.locale.date.month_short[date.getMonth()]+"';case"%F":return'"+gantt.locale.date.month_full[date.getMonth()]+"'; -case"%h":return'"+gantt.date.to_fixed((date.getHours()+11)%12+1)+"';case"%g":return'"+((date.getHours()+11)%12+1)+"';case"%G":return'"+date.getHours()+"';case"%H":return'"+gantt.date.to_fixed(date.getHours())+"';case"%i":return'"+gantt.date.to_fixed(date.getMinutes())+"';case"%a":return'"+(date.getHours()>11?"pm":"am")+"';case"%A":return'"+(date.getHours()>11?"PM":"AM")+"';case"%s":return'"+gantt.date.to_fixed(date.getSeconds())+"';case"%W":return'"+gantt.date.to_fixed(gantt.date.getISOWeek(date))+"'; -default:return t}}),e&&(t=t.replace(/date\.get/g,"date.getUTC")),new Function("date",'return "'+t+'";')},str_to_date:function(t,e){for(var n="var temp=date.match(/[a-zA-Z]+|[0-9]+/g);",i=t.match(/%[a-zA-Z]/g),a=0;a50?1900:2000);";break;case"%g":case"%G":case"%h":case"%H":n+="set[3]=temp["+a+"]||0;";break;case"%i":n+="set[4]=temp["+a+"]||0;"; -break;case"%Y":n+="set[0]=temp["+a+"]||0;";break;case"%a":case"%A":n+="set[3]=set[3]%12+((temp["+a+"]||'').toLowerCase()=='am'?0:12);";break;case"%s":n+="set[5]=temp["+a+"]||0;";break;case"%M":n+="set[1]=gantt.locale.date.month_short_hash[temp["+a+"]]||0;";break;case"%F":n+="set[1]=gantt.locale.date.month_full_hash[temp["+a+"]]||0;"}var s="set[0],set[1],set[2],set[3],set[4],set[5]";return e&&(s=" Date.UTC("+s+")"),new Function("date","var set=[0,0,1,0,0,0]; "+n+" return new Date("+s+");")},getISOWeek:function(t){if(!t)return!1; -var e=t.getDay();0===e&&(e=7);var n=new Date(t.valueOf());n.setDate(t.getDate()+(4-e));var i=n.getFullYear(),a=Math.round((n.getTime()-new Date(i,0,1).getTime())/864e5),s=1+Math.floor(a/7);return s},getUTCISOWeek:function(t){return this.getISOWeek(t)},convert_to_utc:function(t){return new Date(t.getUTCFullYear(),t.getUTCMonth(),t.getUTCDate(),t.getUTCHours(),t.getUTCMinutes(),t.getUTCSeconds())},parseDate:function(t,e){return"string"==typeof t&&(dhtmlx.defined(e)&&(e="string"==typeof e?dhtmlx.defined(gantt.templates[e])?gantt.templates[e]:gantt.date.str_to_date(e):gantt.templates.xml_date),t=e(t)),t -}},gantt.config||(gantt.config={}),gantt.config||(gantt.config={}),gantt.templates||(gantt.templates={}),function(){dhtmlx.mixin(gantt.config,{links:{finish_to_start:"0",start_to_start:"1",finish_to_finish:"2",start_to_finish:"3"},types:{task:"task",project:"project",milestone:"milestone"},duration_unit:"day",work_time:!1,correct_work_time:!1,skip_off_time:!1,autosize:!1,show_links:!0,show_task_cells:!0,show_chart:!0,show_grid:!0,min_duration:36e5,xml_date:"%d-%m-%Y %H:%i",api_date:"%d-%m-%Y %H:%i",start_on_monday:!0,server_utc:!1,show_progress:!0,fit_tasks:!1,select_task:!0,readonly:!1,date_grid:"%Y-%m-%d",drag_links:!0,drag_progress:!0,drag_resize:!0,drag_move:!0,drag_mode:{resize:"resize",progress:"progress",move:"move",ignore:"ignore"},round_dnd_dates:!0,link_wrapper_width:20,root_id:0,autofit:!0,columns:[{name:"text",tree:!0,width:"*"},{name:"start_date",align:"center"},{name:"duration",align:"center"},{name:"add",width:"44"}],step:1,scale_unit:"day",subscales:[],time_step:60,duration_step:1,date_scale:"%d %M",task_date:"%d %F %Y",time_picker:"%H:%i",task_attribute:"task_id",link_attribute:"link_id",buttons_left:["dhx_save_btn","dhx_cancel_btn"],buttons_right:["dhx_delete_btn"],lightbox:{sections:[{name:"description",height:70,map_to:"text",type:"textarea",focus:!0},{name:"time",height:72,type:"duration",map_to:"auto"}],project_sections:[{name:"description",height:70,map_to:"text",type:"textarea",focus:!0},{name:"type",type:"typeselect",map_to:"type"},{name:"time",height:72,type:"duration",readonly:!0,map_to:"auto"}],milestone_sections:[{name:"description",height:70,map_to:"text",type:"textarea",focus:!0},{name:"type",type:"typeselect",map_to:"type"},{name:"time",height:72,type:"duration",single_date:!0,map_to:"auto"}]},drag_lightbox:!0,sort:!1,details_on_create:!0,details_on_dblclick:!0,initial_scroll:!0,task_scroll_offset:100,task_height:"full",min_column_width:70}),gantt.keys={edit_save:13,edit_cancel:27},gantt._init_template=function(t,e){var n=this._reg_templates||{}; -this.config[t]&&n[t]!=this.config[t]&&(e&&this.templates[t]||(this.templates[t]=this.date.date_to_str(this.config[t]),n[t]=this.config[t])),this._reg_templates=n},gantt._init_templates=function(){var t=gantt.locale.labels;t.dhx_save_btn=t.icon_save,t.dhx_cancel_btn=t.icon_cancel,t.dhx_delete_btn=t.icon_delete;var e=this.date.date_to_str,n=this.config;gantt._init_template("date_scale",!0),gantt._init_template("date_grid",!0),gantt._init_template("task_date",!0),dhtmlx.mixin(this.templates,{xml_date:this.date.str_to_date(n.xml_date,n.server_utc),xml_format:e(n.xml_date,n.server_utc),api_date:this.date.str_to_date(n.api_date),progress_text:function(){return"" -},grid_header_class:function(){return""},task_text:function(t,e,n){return n.text},task_class:function(){return""},grid_row_class:function(){return""},task_row_class:function(){return""},task_cell_class:function(){return""},scale_cell_class:function(){return""},scale_row_class:function(){return""},grid_indent:function(){return"
"},grid_folder:function(t){return"
"},grid_file:function(){return"
" -},grid_open:function(t){return"
"},grid_blank:function(){return"
"},task_time:function(t,e){return gantt.templates.task_date(t)+" - "+gantt.templates.task_date(e)},time_picker:e(n.time_picker),link_class:function(){return""},link_description:function(t){var e=gantt.getTask(t.source),n=gantt.getTask(t.target);return""+e.text+""+n.text+""},drag_link:function(t,e,n,i){t=gantt.getTask(t); -var a=gantt.locale.labels,s=""+t.text+" "+(e?a.link_start:a.link_end)+"
";return n&&(n=gantt.getTask(n),s+=" "+n.text+" "+(i?a.link_start:a.link_end)+"
"),s},drag_link_class:function(t,e,n,i){var a="";if(t&&n){var s=gantt.isLinkAllowed(t,n,e,i);a=" "+(s?"gantt_link_allow":"gantt_link_deny")}return"gantt_link_tooltip"+a}}),this.callEvent("onTemplatesReady",[])}}(),window.jQuery&&!function(t){var e=[];t.fn.dhx_gantt=function(n){if(n=n||{},"string"!=typeof n){var i=[];return this.each(function(){if(this&&this.getAttribute&&!this.getAttribute("dhxgantt")){for(var t in n)"data"!=t&&(gantt.config[t]=n[t]); -gantt.init(this),n.data&&gantt.parse(n.data),i.push(gantt)}}),1===i.length?i[0]:i}return e[n]?e[n].apply(this,[]):void t.error("Method "+n+" does not exist on jQuery.dhx_gantt")}}(jQuery),window.dhtmlx&&(dhtmlx.attaches||(dhtmlx.attaches={}),dhtmlx.attaches.attachGantt=function(t,e){var n=document.createElement("DIV");n.id="gantt_"+dhtmlx.uid(),n.style.width="100%",n.style.height="100%",n.cmp="grid",document.body.appendChild(n),this.attachObject(n.id);var i=this.vs[this.av];i.grid=gantt,gantt.init(n.id,t,e),n.firstChild.style.border="none",i.gridId=n.id,i.gridObj=n; -var a="_viewRestore";return this.vs[this[a]()].grid}),gantt.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:{new_task:"New task",icon_save:"Save",icon_cancel:"Cancel",icon_details:"Details",icon_edit:"Edit",icon_delete:"Delete",confirm_closing:"",confirm_deleting:"Task will be deleted permanently, are you sure?",section_description:"Description",section_time:"Time period",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years"}},gantt.skins.skyblue={config:{grid_width:350,row_height:27,scale_height:27,task_height:24,link_line_width:1,link_arrow_size:8,lightbox_additional_height:75},_second_column_width:95,_third_column_width:80},gantt.skins.meadow={config:{grid_width:350,row_height:27,scale_height:30,task_height:24,link_line_width:2,link_arrow_size:6,lightbox_additional_height:72},_second_column_width:95,_third_column_width:80},gantt.skins.terrace={config:{grid_width:360,row_height:35,scale_height:35,task_height:24,link_line_width:2,link_arrow_size:6,lightbox_additional_height:75},_second_column_width:90,_third_column_width:70},gantt.skins.broadway={config:{grid_width:360,row_height:35,scale_height:35,task_height:24,link_line_width:1,link_arrow_size:7,lightbox_additional_height:86},_second_column_width:90,_third_column_width:80,_lightbox_template:"
 
",_config_buttons_left:{},_config_buttons_right:{dhx_delete_btn:"icon_delete",dhx_save_btn:"icon_save"}},gantt.config.touch_drag=50,gantt.config.touch=!0,gantt._init_touch_events=function(){"force"!=this.config.touch&&(this.config.touch=this.config.touch&&(-1!=navigator.userAgent.indexOf("Mobile")||-1!=navigator.userAgent.indexOf("iPad")||-1!=navigator.userAgent.indexOf("Android")||-1!=navigator.userAgent.indexOf("Touch"))),this.config.touch&&(window.navigator.msPointerEnabled?this._touch_events(["MSPointerMove","MSPointerDown","MSPointerUp"],function(t){return t.pointerType==t.MSPOINTER_TYPE_MOUSE?null:t -},function(t){return!t||t.pointerType==t.MSPOINTER_TYPE_MOUSE}):this._touch_events(["touchmove","touchstart","touchend"],function(t){return t.touches&&t.touches.length>1?null:t.touches[0]?{target:t.target,pageX:t.touches[0].pageX,pageY:t.touches[0].pageY}:t},function(){return!1}))},gantt._touch_events=function(t,e,n){function i(t){return t&&t.preventDefault&&t.preventDefault(),(t||event).cancelBubble=!0,!1}var a,s=0,r=!1,o=!1,d=null;this._gantt_touch_event_ready||(this._gantt_touch_event_ready=1,dhtmlxEvent(document.body,t[0],function(t){if(!n(t)&&r){var l=e(t); -if(l&&d){var _=d.pageX-l.pageX,h=d.pageY-l.pageY;!o&&(Math.abs(_)>5||Math.abs(h)>5)&&(gantt._touch_scroll_active=o=!0,s=0,a=gantt.getScrollState()),o&&gantt.scrollTo(a.x+_,a.y+h)}return i(t)}})),dhtmlxEvent(this.$container,"contextmenu",function(t){return r?i(t):void 0}),dhtmlxEvent(this.$container,t[1],function(t){if(!n(t)){if(t.touches&&t.touches.length>1)return void(r=!1);if(r=!0,d=e(t),d&&s){var a=new Date;500>a-s?(gantt._on_dblclick(d),i(t)):s=a}else s=new Date}}),dhtmlxEvent(this.$container,t[2],function(t){n(t)||(gantt._touch_scroll_active=r=o=!1) -})}; -//# sourceMappingURL=sources/dhtmlxgantt.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/ext/dhtmlxgantt_quick_info.js b/phpgwapi/js/dhtmlxGantt/codebase/ext/dhtmlxgantt_quick_info.js deleted file mode 100755 index d942eac048..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/ext/dhtmlxgantt_quick_info.js +++ /dev/null @@ -1,13 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.config.quickinfo_buttons=["icon_delete","icon_edit"],gantt.config.quick_info_detached=!0,gantt.attachEvent("onTaskClick",function(t){return gantt.showQuickInfo(t),!0}),function(){for(var t=["onEmptyClick","onViewChange","onLightbox","onBeforeTaskDelete","onBeforeDrag"],i=function(){return gantt._hideQuickInfo(),!0},n=0;n
"+gantt.locale.labels[n[e]]+"
";i+="",t.innerHTML=i,dhtmlxEvent(t,"click",function(t){t=t||event,gantt._qi_button_click(t.target||t.srcElement) -}),gantt.config.quick_info_detached&&dhtmlxEvent(gantt.$task_data,"scroll",function(){gantt.hideQuickInfo()})}return this._quick_info_box},gantt._qi_button_click=function(t){var i=gantt._quick_info_box;if(t&&t!=i){var n=t.className;if(-1!=n.indexOf("_icon")){var e=gantt._quick_info_box_id;gantt.$click.buttons[n.split(" ")[1].replace("icon_","")](e)}else gantt._qi_button_click(t.parentNode)}},gantt._get_event_counter_part=function(t){for(var i=gantt.getTaskNode(t),n=0,e=0,a=i;a&&"gantt_task"!=a.className;)n+=a.offsetLeft,e+=a.offsetTop,a=a.offsetParent; -var o=this.getScrollState();if(a){var _=n+i.offsetWidth/2-o.x>gantt._x/2?1:0,c=e+i.offsetHeight/2-o.y>gantt._y/2?1:0;return{left:n,top:e,dx:_,dy:c,width:i.offsetWidth,height:i.offsetHeight}}return 0},gantt._fill_quick_data=function(t){var i=gantt.getTask(t),n=gantt._quick_info_box;gantt._quick_info_box_id=t;var e=n.firstChild.firstChild;e.innerHTML=gantt.templates.quick_info_title(i.start_date,i.end_date,i);var a=e.nextSibling;a.innerHTML=gantt.templates.quick_info_date(i.start_date,i.end_date,i); -var o=n.firstChild.nextSibling;o.innerHTML=gantt.templates.quick_info_content(i.start_date,i.end_date,i)}; -//# sourceMappingURL=../sources/ext/dhtmlxgantt_quick_info.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/ext/dhtmlxgantt_tooltip.js b/phpgwapi/js/dhtmlxGantt/codebase/ext/dhtmlxgantt_tooltip.js deleted file mode 100755 index d14af2d55b..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/ext/dhtmlxgantt_tooltip.js +++ /dev/null @@ -1,10 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt._tooltip={},gantt._tooltip_class="gantt_tooltip",gantt.config.tooltip_timeout=30,gantt._create_tooltip=function(){return this._tooltip_html||(this._tooltip_html=document.createElement("div"),this._tooltip_html.className=gantt._tooltip_class),this._tooltip_html},gantt._show_tooltip=function(t,i){if(!gantt.config.touch||gantt.config.touch_tooltip){var e=this._create_tooltip();e.innerHTML=t,gantt.$task_data.appendChild(e);var n=e.offsetWidth+20,o=e.offsetHeight+40,a=this.$task.offsetHeight,_=this.$task.offsetWidth,l=this.getScrollState(); -i.x+=l.x,i.y+=l.y,i.y=Math.min(Math.max(l.y,i.y),l.y+a-o),i.x=Math.min(Math.max(l.x,i.x),l.x+_-n),e.style.left=i.x+"px",e.style.top=i.y+"px"}},gantt._hide_tooltip=function(){this._tooltip_html&&this._tooltip_html.parentNode&&this._tooltip_html.parentNode.removeChild(this._tooltip_html),this._tooltip_id=0},gantt._is_tooltip=function(t){var i=t.target||t.srcElement;return gantt._is_node_child(i,function(t){return t.className==this._tooltip_class})},gantt._is_task_line=function(t){var i=t.target||t.srcElement; -return gantt._is_node_child(i,function(t){return t==this.$task_data})},gantt._is_node_child=function(t,i){for(var e=!1;t&&!e;)e=i.call(gantt,t),t=t.parentNode;return e},gantt._tooltip_pos=function(t){if(t.pageX||t.pageY)var i={x:t.pageX,y:t.pageY};var e=_isIE?document.documentElement:document.body,i={x:t.clientX+e.scrollLeft-e.clientLeft,y:t.clientY+e.scrollTop-e.clientTop},n=gantt._get_position(gantt.$task);return i.x=i.x-n.x,i.y=i.y-n.y,i},gantt.attachEvent("onMouseMove",function(t,i){if(this.config.tooltip_timeout){document.createEventObject&&!document.createEvent&&(i=document.createEventObject(i)); -var e=this.config.tooltip_timeout;this._tooltip_id&&!t&&(isNaN(this.config.tooltip_hide_timeout)||(e=this.config.tooltip_hide_timeout)),clearTimeout(gantt._tooltip_ev_timer),gantt._tooltip_ev_timer=setTimeout(function(){gantt._init_tooltip(t,i)},e)}else gantt._init_tooltip(t,i)}),gantt._init_tooltip=function(t,i){if(!this._is_tooltip(i)&&(t!=this._tooltip_id||this._is_task_line(i))){if(!t)return this._hide_tooltip();this._tooltip_id=t;var e=this.getTask(t),n=this.templates.tooltip_text(e.start_date,e.end_date,e); -n||this._hide_tooltip(),this._show_tooltip(n,this._tooltip_pos(i))}},gantt.attachEvent("onMouseLeave",function(t){gantt._is_tooltip(t)||this._hide_tooltip()}),gantt.templates.tooltip_date_format=gantt.date.date_to_str("%Y-%m-%d"),gantt.templates.tooltip_text=function(t,i,e){return"Task: "+e.text+"
Start date: "+gantt.templates.tooltip_date_format(t)+"
End date: "+gantt.templates.tooltip_date_format(i)}; -//# sourceMappingURL=../sources/ext/dhtmlxgantt_tooltip.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/imgs/arr.gif b/phpgwapi/js/dhtmlxGantt/codebase/imgs/arr.gif deleted file mode 100644 index 3bd086371b23ad0c66f4083e3a6f760f95c4a826..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162 zcmZ?wbhEHbYg>zAEawExE5-B))+ z&k8MCk()R-`v3p`7apHKcym9H!9X-n{K>+|z#zz=1JVJqlYvz}L8b38<3wcvlM~KN a=K@xAatL%MOz3I)cVIz*hfbFhgEaufL^X*3 diff --git a/phpgwapi/js/dhtmlxGantt/codebase/imgs/bg.png b/phpgwapi/js/dhtmlxGantt/codebase/imgs/bg.png deleted file mode 100644 index 9d495780d13358403878ceef3eaad657cfe743ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^j6kf%!3-qt88$}%DVB6cUq=Rp^(V|(yIunMk|nMY zCBgY=CFO}lsSJ)O`AMk?p1FzXsX?iUDV2pMQ*D5XI0Jk_T>t<7|NGDH&tE>|6H_V+Po~-c6>ar&aSW-r_2$+_z9s{S)*vDvHJ2`#^2qx7XW2GIyD8gqmhZd#y|yO({&zKN z-hHY6CVn`iY=aBQd*|J(%YFVl@21~(O}i~N;?`g1el$B)er=E0&5x_gkKxt{GV${} b)dLJt(!sxr*7f)SJ;31U>gTe~DWM4fI`MHx diff --git a/phpgwapi/js/dhtmlxGantt/codebase/imgs/menu/menu_bg.png b/phpgwapi/js/dhtmlxGantt/codebase/imgs/menu/menu_bg.png deleted file mode 100644 index 02f41eaf5d8d6cf4f0050eb850f19298d39a9553..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^Q-GL}g9%7(|0+-nq*&4&eH|GX)}JtE?Rp91OP07s zlmzFem6RtIr7}3CUboFyt=akR{ E0D%%QLjV8( diff --git a/phpgwapi/js/dhtmlxGantt/codebase/imgs/menu/menu_selection.png b/phpgwapi/js/dhtmlxGantt/codebase/imgs/menu/menu_selection.png deleted file mode 100644 index aa35f7dcf5fd7ecbcd60a57f1972d5ae3e495c15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 600 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 XQ{c#1qRZge^rpJVP}EzQiNP8G!52A$ diff --git a/phpgwapi/js/dhtmlxGantt/codebase/imgs/parentnode_filled.png b/phpgwapi/js/dhtmlxGantt/codebase/imgs/parentnode_filled.png deleted file mode 100644 index 1d08f670c44afe996a7eb82b9fc0f67ca585aad5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrI!3-oj1H|tFDVB6cUq=Rp^(V|(yIunMk|nMY zCBgY=CFO}lsSJ)O`AMk?p1FzXsX?iUDV2pMQ*D5X6a#!hTz_ph`@Pro*Xf);ml}Rw zs{gT8{NMNIKR2oWxjFgIgXO=D#`>KS>jx^9_jGX#skp^*u#u5LfP-PfN{;{Xcb-+O h6WX_S;}Z@82B!B67VrMI-v=sX@O1TaS?83{1ORMpMEw8& diff --git a/phpgwapi/js/dhtmlxGantt/codebase/imgs/plus.gif b/phpgwapi/js/dhtmlxGantt/codebase/imgs/plus.gif deleted file mode 100644 index ff22238004d22581ed7955381871bc1f44a0e21f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 124 zcmZ?wbhEHbJm%c=6r4cduW+{`vFgw{PG6{{8#>`SVYoKD~MK z=H9(~7cN}*|NlP&7%2W^VPs(7WzYffKxQzoXl~$iSUKTU#@e)>2g3v0B&V=VWzm@( b;4E{5+4asrUxq_XfA$}34cus=#9$2oX9hfW diff --git a/phpgwapi/js/dhtmlxGantt/codebase/imgs/progress_bg.png b/phpgwapi/js/dhtmlxGantt/codebase/imgs/progress_bg.png deleted file mode 100644 index 69205da45a8db6954269fe3733fcc9948f45d98b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrI!3-oj1H|tFDVB6cUq=Rp^(V|(yIunMk|nMY zCBgY=CFO}lsSJ)O`AMk?p1FzXsX?iUDV2pMQ*D5X6a#!hT;G5C{QJ+JA3uM+{rKtg z*Kd!Wzr6e8*|XPgzJCAl`u&FwpTEp-mfZkUEbr;!7*cVI4WrJ!Meez6PjR-qXb~q~aFK!A3>~0S<-@D>?ql-+7i1 he`}q(&QT5n2Bx1376B74Xakipc)I$ztaD0e0ssPKLD>KR diff --git a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale.js b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale.js deleted file mode 100755 index 15dac11e3d..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale.js +++ /dev/null @@ -1,7 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.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:{new_task:"New task",icon_save:"Save",icon_cancel:"Cancel",icon_details:"Details",icon_edit:"Edit",icon_delete:"Delete",confirm_closing:"",confirm_deleting:"Task will be deleted permanently, are you sure?",section_description:"Description",section_time:"Time period",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years"}}; - -//# sourceMappingURL=../sources/locale/locale.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_ar.js b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_ar.js deleted file mode 100755 index 6e0f679acf..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_ar.js +++ /dev/null @@ -1,7 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale={date:{month_full:["كانون الثاني","شباط","آذار","نيسان","أيار","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],month_short:["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],day_full:["الأحد","الأثنين","ألثلاثاء","الأربعاء","ألحميس","ألجمعة","السبت"],day_short:["احد","اثنين","ثلاثاء","اربعاء","خميس","جمعة","سبت"]},labels:{dhx_cal_today_button:"اليوم",day_tab:"يوم",week_tab:"أسبوع",month_tab:"شهر",new_event:"حدث جديد",icon_save:"اخزن",icon_cancel:"الغاء",icon_details:"تفاصيل",icon_edit:"تحرير",icon_delete:"حذف",confirm_closing:"التغييرات سوف تضيع, هل انت متأكد؟",confirm_deleting:"الحدث سيتم حذفها نهائيا ، هل أنت متأكد؟",section_description:"الوصف",section_time:"الفترة الزمنية",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years"}}; - -//# sourceMappingURL=../sources/locale/locale_ar.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_be.js b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_be.js deleted file mode 100755 index 6de9062792..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_be.js +++ /dev/null @@ -1,7 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale={date:{month_full:["Студзень","Люты","Сакавік","Красавік","Maй","Чэрвень","Ліпень","Жнівень","Верасень","Кастрычнік","Лістапад","Снежань"],month_short:["Студз","Лют","Сак","Крас","Maй","Чэр","Ліп","Жнів","Вер","Каст","Ліст","Снеж"],day_full:["Нядзеля","Панядзелак","Аўторак","Серада","Чацвер","Пятніца","Субота"],day_short:["Нд","Пн","Аўт","Ср","Чцв","Пт","Сб"]},labels:{dhx_cal_today_button:"Сёння",day_tab:"Дзень",week_tab:"Тыдзень",month_tab:"Месяц",new_event:"Новая падзея",icon_save:"Захаваць",icon_cancel:"Адмяніць",icon_details:"Дэталі",icon_edit:"Змяніць",icon_delete:"Выдаліць",confirm_closing:"",confirm_deleting:"Падзея будзе выдалена незваротна, працягнуць?",section_description:"Апісанне",section_time:"Перыяд часу",section_type:"Тып",column_text:"Задача",column_start_date:"Пачатак",column_duration:"Працяг",column_add:"",link:"Сувязь",confirm_link_deleting:"будзе выдалена",link_start:"(пачатак)",link_end:"(канец)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Хвiлiна",hours:"Гадзiна",days:"Дзень",weeks:"Тыдзень",months:"Месяц",years:"Год"}}; - -//# sourceMappingURL=../sources/locale/locale_be.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_ca.js b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_ca.js deleted file mode 100755 index f087979c7c..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_ca.js +++ /dev/null @@ -1,7 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale={date:{month_full:["Gener","Febrer","Març","Abril","Maig","Juny","Juliol","Agost","Setembre","Octubre","Novembre","Desembre"],month_short:["Gen","Feb","Mar","Abr","Mai","Jun","Jul","Ago","Set","Oct","Nov","Des"],day_full:["Diumenge","Dilluns","Dimarts","Dimecres","Dijous","Divendres","Dissabte"],day_short:["Dg","Dl","Dm","Dc","Dj","Dv","Ds"]},labels:{dhx_cal_today_button:"Hui",day_tab:"Dia",week_tab:"Setmana",month_tab:"Mes",new_event:"Nou esdeveniment",icon_save:"Guardar",icon_cancel:"Cancel·lar",icon_details:"Detalls",icon_edit:"Editar",icon_delete:"Esborrar",confirm_closing:"",confirm_deleting:"L'esdeveniment s'esborrarà definitivament, continuar ?",section_description:"Descripció",section_time:"Periode de temps",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years"}}; - -//# sourceMappingURL=../sources/locale/locale_ca.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_cn.js b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_cn.js deleted file mode 100755 index eb3cbb82ee..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_cn.js +++ /dev/null @@ -1,7 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.config.day_date="%M %d日 %D",gantt.config.default_date="%Y年 %M %d日",gantt.config.month_date="%Y年 %M",gantt.locale={date:{month_full:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],month_short:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],day_full:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],day_short:["日","一","二","三","四","五","六"]},labels:{dhx_cal_today_button:"今天",day_tab:"日",week_tab:"周",month_tab:"月",new_event:"新建日程",icon_save:"保存",icon_cancel:"关闭",icon_details:"详细",icon_edit:"编辑",icon_delete:"删除",confirm_closing:"请确认是否撤销修改!",confirm_deleting:"是否删除日程?",section_description:"描述",section_time:"时间范围",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years"}}; - -//# sourceMappingURL=../sources/locale/locale_cn.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_cs.js b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_cs.js deleted file mode 100755 index a5a193e31a..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_cs.js +++ /dev/null @@ -1,7 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale={date:{month_full:["Leden","Únor","Březen","Duben","Květen","Červen","Červenec","Srpen","Září","Říjen","Listopad","Prosinec"],month_short:["Led","Ún","Bře","Dub","Kvě","Čer","Čec","Srp","Září","Říj","List","Pro"],day_full:["Neděle","Pondělí","Úterý","Středa","Čtvrtek","Pátek","Sobota"],day_short:["Ne","Po","Út","St","Čt","Pá","So"]},labels:{dhx_cal_today_button:"Dnes",day_tab:"Den",week_tab:"Týden",month_tab:"Měsíc",new_event:"Nová událost",icon_save:"Uložit",icon_cancel:"Zpět",icon_details:"Detail",icon_edit:"Edituj",icon_delete:"Smazat",confirm_closing:"",confirm_deleting:"Událost bude trvale smazána, opravdu?",section_description:"Poznámky",section_time:"Doba platnosti",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years"}}; - -//# sourceMappingURL=../sources/locale/locale_cs.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_da.js b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_da.js deleted file mode 100755 index e4d0999329..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_da.js +++ /dev/null @@ -1,7 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale={date:{month_full:["Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December"],month_short:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],day_full:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],day_short:["Søn","Man","Tir","Ons","Tor","Fre","Lør"]},labels:{dhx_cal_today_button:"Idag",day_tab:"Dag",week_tab:"Uge",month_tab:"Måned",new_event:"Ny begivenhed",icon_save:"Gem",icon_cancel:"Fortryd",icon_details:"Detaljer",icon_edit:"Tilret",icon_delete:"Slet",confirm_closing:"Dine rettelser vil gå tabt.. Er dy sikker?",confirm_deleting:"Bigivenheden vil blive slettet permanent. Er du sikker?",section_description:"Beskrivelse",section_time:"Tidsperiode",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years"}}; - -//# sourceMappingURL=../sources/locale/locale_da.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_de.js b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_de.js deleted file mode 100755 index ab0e7c344c..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_de.js +++ /dev/null @@ -1,7 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale={date:{month_full:[" Januar"," Februar"," März "," April"," Mai"," Juni"," Juli"," August"," September "," Oktober"," November "," Dezember"],month_short:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],day_full:["Sonntag","Montag","Dienstag"," Mittwoch"," Donnerstag","Freitag","Samstag"],day_short:["So","Mo","Di","Mi","Do","Fr","Sa"]},labels:{dhx_cal_today_button:"Heute",day_tab:"Tag",week_tab:"Woche",month_tab:"Monat",new_event:"neuer Eintrag",icon_save:"Speichern",icon_cancel:"Abbrechen",icon_details:"Details",icon_edit:"Ändern",icon_delete:"Löschen",confirm_closing:"",confirm_deleting:"Der Eintrag wird gelöscht",section_description:"Beschreibung",section_time:"Zeitspanne",section_type:"Type",column_text:"Task-Namen",column_start_date:"Startzeit",column_duration:"Dauer",column_add:"",link:"Link",confirm_link_deleting:"werden gelöscht",link_start:"(starten)",link_end:"(ende)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minuten",hours:"Stunden",days:"Tage",weeks:"Wochen",months:"Monate",years:"Jahre"}}; - -//# sourceMappingURL=../sources/locale/locale_de.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_el.js b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_el.js deleted file mode 100755 index 903ae5f695..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_el.js +++ /dev/null @@ -1,7 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale={date:{month_full:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάϊος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],month_short:["ΙΑΝ","ΦΕΒ","ΜΑΡ","ΑΠΡ","ΜΑΙ","ΙΟΥΝ","ΙΟΥΛ","ΑΥΓ","ΣΕΠ","ΟΚΤ","ΝΟΕ","ΔΕΚ"],day_full:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Κυριακή"],day_short:["ΚΥ","ΔΕ","ΤΡ","ΤΕ","ΠΕ","ΠΑ","ΣΑ"]},labels:{dhx_cal_today_button:"Σήμερα",day_tab:"Ημέρα",week_tab:"Εβδομάδα",month_tab:"Μήνας",new_event:"Νέο έργο",icon_save:"Αποθήκευση",icon_cancel:"Άκυρο",icon_details:"Λεπτομέρειες",icon_edit:"Επεξεργασία",icon_delete:"Διαγραφή",confirm_closing:"",confirm_deleting:"Το έργο θα διαγραφεί οριστικά. Θέλετε να συνεχίσετε;",section_description:"Περιγραφή",section_time:"Χρονική περίοδος",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years"}}; - -//# sourceMappingURL=../sources/locale/locale_el.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_es.js b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_es.js deleted file mode 100755 index cf2267b41c..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_es.js +++ /dev/null @@ -1,7 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale={date:{month_full:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],month_short:["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"],day_full:["Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado"],day_short:["Dom","Lun","Mar","Mié","Jue","Vie","Sáb"]},labels:{dhx_cal_today_button:"Hoy",day_tab:"Día",week_tab:"Semana",month_tab:"Mes",new_event:"Nuevo evento",icon_save:"Guardar",icon_cancel:"Cancelar",icon_details:"Detalles",icon_edit:"Editar",icon_delete:"Eliminar",confirm_closing:"",confirm_deleting:"El evento se borrará definitivamente, ¿continuar?",section_description:"Descripción",section_time:"Período",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years"}}; - -//# sourceMappingURL=../sources/locale/locale_es.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_fi.js b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_fi.js deleted file mode 100755 index fcf87e19af..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_fi.js +++ /dev/null @@ -1,7 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale={date:{month_full:["Tammikuu","Helmikuu","Maaliskuu","Huhtikuu","Toukokuu","Kesäkuu","Heinäkuu","Elokuu","Syyskuu","Lokakuu","Marraskuu","Joulukuu"],month_short:["Tam","Hel","Maa","Huh","Tou","Kes","Hei","Elo","Syy","Lok","Mar","Jou"],day_full:["Sunnuntai","Maanantai","Tiistai","Keskiviikko","Torstai","Perjantai","Lauantai"],day_short:["Su","Ma","Ti","Ke","To","Pe","La"]},labels:{dhx_cal_today_button:"Tänään",day_tab:"Päivä",week_tab:"Viikko",month_tab:"Kuukausi",new_event:"Uusi tapahtuma",icon_save:"Tallenna",icon_cancel:"Peru",icon_details:"Tiedot",icon_edit:"Muokkaa",icon_delete:"Poista",confirm_closing:"",confirm_deleting:"Haluatko varmasti poistaa tapahtuman?",section_description:"Kuvaus",section_time:"Aikajakso",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years"}}; - -//# sourceMappingURL=../sources/locale/locale_fi.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_fr.js b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_fr.js deleted file mode 100755 index 6f9b2ea639..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_fr.js +++ /dev/null @@ -1,7 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale={date:{month_full:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"],month_short:["Jan","Fév","Mar","Avr","Mai","Juin","Juil","Aôu","Sep","Oct","Nov","Déc"],day_full:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],day_short:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"]},labels:{new_task:"Tâche neuve",icon_save:"Enregistrer",icon_cancel:"Annuler",icon_details:"Détails",icon_edit:"Modifier",icon_delete:"Effacer",confirm_closing:"",confirm_deleting:"L'événement sera effacé sans appel, êtes-vous sûr ?",section_description:"Description",section_time:"Période",section_type:"Type",column_text:"Tâche neuve",column_start_date:"Date initiale",column_duration:"Durée",column_add:"",confirm_link_deleting:"seront supprimées",link_start:"(début)",link_end:"(fin)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Heures",days:"Jours",weeks:"Semaine",months:"Mois",years:"Années"}}; - -//# sourceMappingURL=../sources/locale/locale_fr.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_he.js b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_he.js deleted file mode 100755 index 3d991b4a13..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_he.js +++ /dev/null @@ -1,7 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale={date:{month_full:["ינואר","פברואר","מרץ","אפריל","מאי","יוני","יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר"],month_short:["ינו","פבר","מרץ","אפר","מאי","יונ","יול","אוג","ספט","אוק","נוב","דצמ"],day_full:["ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת"],day_short:["א","ב","ג","ד","ה","ו","ש"]},labels:{dhx_cal_today_button:"היום",day_tab:"יום",week_tab:"שבוע",month_tab:"חודש",new_event:"ארוע חדש",icon_save:"שמור",icon_cancel:"בטל",icon_details:"פרטים",icon_edit:"ערוך",icon_delete:"מחק",confirm_closing:"",confirm_deleting:"ארוע ימחק סופית.להמשיך?",section_description:"הסבר",section_time:"תקופה",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years"}}; - -//# sourceMappingURL=../sources/locale/locale_he.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_hu.js b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_hu.js deleted file mode 100755 index 2b11bee283..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_hu.js +++ /dev/null @@ -1,7 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale={date:{month_full:["Január","Február","Március","Április","Május","Június","Július","Augusztus","Szeptember","Október","November","December"],month_short:["Jan","Feb","Már","Ápr","Máj","Jún","Júl","Aug","Sep","Okt","Nov","Dec"],day_full:["Vasárnap","Hétfõ","Kedd","Szerda","Csütörtök","Péntek","szombat"],day_short:["Va","Hé","Ke","Sze","Csü","Pé","Szo"]},labels:{dhx_cal_today_button:"Ma",day_tab:"Nap",week_tab:"Hét",month_tab:"Hónap",new_event:"Új esemény",icon_save:"Mentés",icon_cancel:"Mégse",icon_details:"Részletek",icon_edit:"Szerkesztés",icon_delete:"Törlés",confirm_closing:"",confirm_deleting:"Az esemény törölve lesz, biztosan folytatja?",section_description:"Leírás",section_time:"Idõszak",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years"}}; - -//# sourceMappingURL=../sources/locale/locale_hu.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_id.js b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_id.js deleted file mode 100755 index 1449540331..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_id.js +++ /dev/null @@ -1,7 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale={date:{month_full:["Januari","Februari","Maret","April","Mei","Juni","Juli","Agustus","September","Oktober","November","Desember"],month_short:["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Ags","Sep","Okt","Nov","Des"],day_full:["Minggu","Senin","Selasa","Rabu","Kamis","Jumat","Sabtu"],day_short:["Ming","Sen","Sel","Rab","Kam","Jum","Sab"]},labels:{dhx_cal_today_button:"Hari Ini",day_tab:"Hari",week_tab:"Minggu",month_tab:"Bulan",new_event:"Acara Baru",icon_save:"Simpan",icon_cancel:"Batal",icon_details:"Detail",icon_edit:"Edit",icon_delete:"Hapus",confirm_closing:"",confirm_deleting:"Acara akan dihapus",section_description:"Keterangan",section_time:"Periode",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years"}}; - -//# sourceMappingURL=../sources/locale/locale_id.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_it.js b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_it.js deleted file mode 100755 index c5ce336207..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_it.js +++ /dev/null @@ -1,7 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale={date:{month_full:["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"],month_short:["Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic"],day_full:["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],day_short:["Dom","Lun","Mar","Mer","Gio","Ven","Sab"]},labels:{dhx_cal_today_button:"Oggi",day_tab:"Giorno",week_tab:"Settimana",month_tab:"Mese",new_event:"Nuovo evento",icon_save:"Salva",icon_cancel:"Chiudi",icon_details:"Dettagli",icon_edit:"Modifica",icon_delete:"Elimina",confirm_closing:"",confirm_deleting:"L'evento sarà eliminato, siete sicuri?",section_description:"Descrizione",section_time:"Periodo di tempo",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years"}}; - -//# sourceMappingURL=../sources/locale/locale_it.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_jp.js b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_jp.js deleted file mode 100755 index 251ca403b2..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_jp.js +++ /dev/null @@ -1,7 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale={date:{month_full:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],month_short:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],day_full:["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"],day_short:["日","月","火","水","木","金","土"]},labels:{dhx_cal_today_button:"今日",day_tab:"日",week_tab:"週",month_tab:"月",new_event:"新イベント",icon_save:"保存",icon_cancel:"キャンセル",icon_details:"詳細",icon_edit:"編集",icon_delete:"削除",confirm_closing:"",confirm_deleting:"イベント完全に削除されます、宜しいですか?",section_description:"デスクリプション",section_time:"期間",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years"}}; - -//# sourceMappingURL=../sources/locale/locale_jp.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_nb.js b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_nb.js deleted file mode 100755 index 934915fbca..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_nb.js +++ /dev/null @@ -1,7 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale={date:{month_full:["Januar","Februar","Mars","April","Mai","Juni","Juli","August","September","Oktober","November","Desember"],month_short:["Jan","Feb","Mar","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Des"],day_full:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],day_short:["Søn","Mon","Tir","Ons","Tor","Fre","Lør"]},labels:{dhx_cal_today_button:"I dag",day_tab:"Dag",week_tab:"Uke",month_tab:"Måned",new_event:"Ny hendelse",icon_save:"Lagre",icon_cancel:"Avbryt",icon_details:"Detaljer",icon_edit:"Rediger",icon_delete:"Slett",confirm_closing:"",confirm_deleting:"Hendelsen vil bli slettet permanent. Er du sikker?",section_description:"Beskrivelse",section_time:"Tidsperiode",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years"}}; - -//# sourceMappingURL=../sources/locale/locale_nb.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_nl.js b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_nl.js deleted file mode 100755 index 8576684643..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_nl.js +++ /dev/null @@ -1,7 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale={date:{month_full:["Januari","Februari","Maart","April","Mei","Juni","Juli","Augustus","September","Oktober","November","December"],month_short:["Jan","Feb","mrt","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],day_full:["Zondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrijdag","Zaterdag"],day_short:["Zo","Ma","Di","Wo","Do","Vr","Za"]},labels:{dhx_cal_today_button:"Vandaag",day_tab:"Dag",week_tab:"Week",month_tab:"Maand",new_event:"Nieuw item",icon_save:"Opslaan",icon_cancel:"Annuleren",icon_details:"Details",icon_edit:"Bewerken",icon_delete:"Verwijderen",confirm_closing:"",confirm_deleting:"Item zal permanent worden verwijderd, doorgaan?",section_description:"Beschrijving",section_time:"Tijd periode",section_type:"Type",column_text:"Taak omschrijving",column_start_date:"Startdatum",column_duration:"Duur",column_add:"",link:"Koppeling",confirm_link_deleting:"zal worden verwijderd",link_start:" (start)",link_end:" (eind)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"minuten",hours:"uren",days:"dagen",weeks:"weken",months:"maanden",years:"jaren"}}; - -//# sourceMappingURL=../sources/locale/locale_nl.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_no.js b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_no.js deleted file mode 100755 index 33ace5e467..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_no.js +++ /dev/null @@ -1,7 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale={date:{month_full:["Januar","Februar","Mars","April","Mai","Juni","Juli","August","September","Oktober","November","Desember"],month_short:["Jan","Feb","Mar","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Des"],day_full:["Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag"],day_short:["Søn","Man","Tir","Ons","Tor","Fre","Lør"]},labels:{dhx_cal_today_button:"Idag",day_tab:"Dag",week_tab:"Uke",month_tab:"Måned",new_event:"Ny",icon_save:"Lagre",icon_cancel:"Avbryt",icon_details:"Detaljer",icon_edit:"Endre",icon_delete:"Slett",confirm_closing:"Endringer blir ikke lagret, er du sikker?",confirm_deleting:"Oppføringen vil bli slettet, er du sikker?",section_description:"Beskrivelse",section_time:"Tidsperiode",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years"}}; - -//# sourceMappingURL=../sources/locale/locale_no.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_pl.js b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_pl.js deleted file mode 100755 index 0e2119dae6..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_pl.js +++ /dev/null @@ -1,7 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale={date:{month_full:["Styczeń","Luty","Marzec","Kwiecień","Maj","Czerwiec","Lipiec","Sierpień","Wrzesień","Październik","Listopad","Grudzień"],month_short:["Sty","Lut","Mar","Kwi","Maj","Cze","Lip","Sie","Wrz","Paź","Lis","Gru"],day_full:["Niedziela","Poniedziałek","Wtorek","Środa","Czwartek","Piątek","Sobota"],day_short:["Nie","Pon","Wto","Śro","Czw","Pią","Sob"]},labels:{dhx_cal_today_button:"Dziś",day_tab:"Dzień",week_tab:"Tydzień",month_tab:"Miesiąc",new_event:"Nowe zdarzenie",icon_save:"Zapisz",icon_cancel:"Anuluj",icon_details:"Szczegóły",icon_edit:"Edytuj",icon_delete:"Usuń",confirm_closing:"",confirm_deleting:"Zdarzenie zostanie usunięte na zawsze, kontynuować?",section_description:"Opis",section_time:"Okres czasu",section_type:"Typ",column_text:"Nazwa zadania",column_start_date:"Początek",column_duration:"Czas trwania",column_add:"",link:"Link",confirm_link_deleting:"zostanie usunięty",link_start:" (początek)",link_end:" (koniec)",type_task:"Zadanie",type_project:"Projekt",type_milestone:"Milestone",minutes:"Minuty",hours:"Godziny",days:"Dni",weeks:"Tydzień",months:"Miesiące",years:"Lata"}}; - -//# sourceMappingURL=../sources/locale/locale_pl.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_pt.js b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_pt.js deleted file mode 100755 index a36c497ed7..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_pt.js +++ /dev/null @@ -1,7 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale={date:{month_full:["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],month_short:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],day_full:["Domingo","Segunda","Terça","Quarta","Quinta","Sexta","Sábado"],day_short:["Dom","Seg","Ter","Qua","Qui","Sex","Sab"]},labels:{dhx_cal_today_button:"Hoje",day_tab:"Dia",week_tab:"Semana",month_tab:"Mês",new_event:"Novo evento",icon_save:"Salvar",icon_cancel:"Cancelar",icon_details:"Detalhes",icon_edit:"Editar",icon_delete:"Deletar",confirm_closing:"Suas alterações serão perdidas. Você tem certeza?",confirm_deleting:"Tem certeza que deseja excluir?",section_description:"Descrição",section_time:"Período de tempo",section_type:"Type",column_text:"Nome tarefa",column_start_date:"Data início",column_duration:"Duração",column_add:"",link:"Link",confirm_link_deleting:"será apagado",link_start:" (início)",link_end:" (fim)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutos",hours:"Horas",days:"Dias",weeks:"Semanas",months:"Meses",years:"Anos"}}; - -//# sourceMappingURL=../sources/locale/locale_pt.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_ro.js b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_ro.js deleted file mode 100755 index e62d3f2228..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_ro.js +++ /dev/null @@ -1,7 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale={date:{month_full:["Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie","August","Septembrie","Octombrie","November","December"],month_short:["Ian","Feb","Mar","Apr","Mai","Iun","Iul","Aug","Sep","Oct","Nov","Dec"],day_full:["Duminica","Luni","Marti","Miercuri","Joi","Vineri","Sambata"],day_short:["Du","Lu","Ma","Mi","Jo","Vi","Sa"]},labels:{dhx_cal_today_button:"Astazi",day_tab:"Zi",week_tab:"Saptamana",month_tab:"Luna",new_event:"Eveniment nou",icon_save:"Salveaza",icon_cancel:"Anuleaza",icon_details:"Detalii",icon_edit:"Editeaza",icon_delete:"Sterge",confirm_closing:"Schimbarile nu vor fi salvate, esti sigur?",confirm_deleting:"Evenimentul va fi sters permanent, esti sigur?",section_description:"Descriere",section_time:"Interval",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years"}}; - -//# sourceMappingURL=../sources/locale/locale_ro.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_ru.js b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_ru.js deleted file mode 100755 index eddc78e969..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_ru.js +++ /dev/null @@ -1,7 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale={date:{month_full:["Январь","Февраль","Март","Апрель","Maй","Июнь","Июль","Август","Сентябрь","Oктябрь","Ноябрь","Декабрь"],month_short:["Янв","Фев","Maр","Aпр","Maй","Июн","Июл","Aвг","Сен","Окт","Ноя","Дек"],day_full:["Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота"],day_short:["Вс","Пн","Вт","Ср","Чт","Пт","Сб"]},labels:{dhx_cal_today_button:"Сегодня",day_tab:"День",week_tab:"Неделя",month_tab:"Месяц",new_event:"Новое событие",icon_save:"Сохранить",icon_cancel:"Отменить",icon_details:"Детали",icon_edit:"Изменить",icon_delete:"Удалить",confirm_closing:"",confirm_deleting:"Событие будет удалено безвозвратно, продолжить?",section_description:"Описание",section_time:"Период времени",section_type:"Тип",column_text:"Задача",column_start_date:"Начало",column_duration:"Длительность",column_add:"",link:"Связь",confirm_link_deleting:"будет удалена",link_start:" (начало)",link_end:" (конец)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Минута",hours:"Час",days:"День",weeks:"Неделя",months:"Месяц",years:"Год"}}; - -//# sourceMappingURL=../sources/locale/locale_ru.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_si.js b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_si.js deleted file mode 100755 index c52c078f8f..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_si.js +++ /dev/null @@ -1,7 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale={date:{month_full:["Januar","Februar","Marec","April","Maj","Junij","Julij","Avgust","September","Oktober","November","December"],month_short:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],day_full:["Nedelja","Ponedeljek","Torek","Sreda","Četrtek","Petek","Sobota"],day_short:["Ned","Pon","Tor","Sre","Čet","Pet","Sob"]},labels:{dhx_cal_today_button:"Danes",day_tab:"Dan",week_tab:"Teden",month_tab:"Mesec",new_event:"Nov dogodek",icon_save:"Shrani",icon_cancel:"Prekliči",icon_details:"Podrobnosti",icon_edit:"Uredi",icon_delete:"Izbriši",confirm_closing:"",confirm_deleting:"Dogodek bo izbrisan. Želite nadaljevati?",section_description:"Opis",section_time:"Časovni okvir",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years"}}; - -//# sourceMappingURL=../sources/locale/locale_si.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_sk.js b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_sk.js deleted file mode 100755 index 0eefa08b17..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_sk.js +++ /dev/null @@ -1,7 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale={date:{month_full:["Január","Február","Marec","Apríl","Máj","Jún","Júl","August","September","Október","November","December"],month_short:["Jan","Feb","Mar","Apr","Máj","Jún","Júl","Aug","Sept","Okt","Nov","Dec"],day_full:["Nedeľa","Pondelok","Utorok","Streda","Štvrtok","Piatok","Sobota"],day_short:["Ne","Po","Ut","St","Št","Pi","So"]},labels:{dhx_cal_today_button:"Dnes",day_tab:"Deň",week_tab:"Týždeň",month_tab:"Mesiac",new_event:"Nová udalosť",icon_save:"Uložiť",icon_cancel:"Späť",icon_details:"Detail",icon_edit:"Edituj",icon_delete:"Zmazať",confirm_closing:"Vaše zmeny nebudú uložené. Skutočne?",confirm_deleting:"Udalosť bude natrvalo vymazaná. Skutočne?",section_description:"Poznámky",section_time:"Doba platnosti",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years"}}; - -//# sourceMappingURL=../sources/locale/locale_sk.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_sv.js b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_sv.js deleted file mode 100755 index 365e2c8117..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_sv.js +++ /dev/null @@ -1,7 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale={date:{month_full:["Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"],month_short:["Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],day_full:["Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag"],day_short:["Sön","Mån","Tis","Ons","Tor","Fre","Lör"]},labels:{dhx_cal_today_button:"Idag",day_tab:"Dag",week_tab:"Vecka",month_tab:"Månad",new_event:"Ny händelse",icon_save:"Spara",icon_cancel:"Ångra",icon_details:"Detajer",icon_edit:"Ändra",icon_delete:"Ta bort",confirm_closing:"",confirm_deleting:"Är du säker på att du vill ta bort händelsen permanent?",section_description:"Beskrivning",section_time:"Tid",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years"}}; - -//# sourceMappingURL=../sources/locale/locale_sv.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_tr.js b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_tr.js deleted file mode 100755 index ceb3811dfb..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_tr.js +++ /dev/null @@ -1,7 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale={date:{month_full:["Ocak","Þubat","Mart","Nisan","Mayýs","Haziran","Temmuz","Aðustos","Eylül","Ekim","Kasým","Aralýk"],month_short:["Oca","Þub","Mar","Nis","May","Haz","Tem","Aðu","Eyl","Eki","Kas","Ara"],day_full:["Pazar","Pazartes,","Salý","Çarþamba","Perþembe","Cuma","Cumartesi"],day_short:["Paz","Pts","Sal","Çar","Per","Cum","Cts"]},labels:{dhx_cal_today_button:"Bugün",day_tab:"Gün",week_tab:"Hafta",month_tab:"Ay",new_event:"Uygun",icon_save:"Kaydet",icon_cancel:"Ýptal",icon_details:"Detaylar",icon_edit:"Düzenle",icon_delete:"Sil",confirm_closing:"",confirm_deleting:"Etkinlik silinecek, devam?",section_description:"Açýklama",section_time:"Zaman aralýðý",section_type:"Type",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years"}}; - -//# sourceMappingURL=../sources/locale/locale_tr.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_ua.js b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_ua.js deleted file mode 100755 index 336eef875d..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_ua.js +++ /dev/null @@ -1,7 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale={date:{month_full:["Січень","Лютий","Березень","Квітень","Травень","Червень","Липень","Серпень","Вересень","Жовтень","Листопад","Грудень"],month_short:["Січ","Лют","Бер","Кві","Тра","Чер","Лип","Сер","Вер","Жов","Лис","Гру"],day_full:["Неділя","Понеділок","Вівторок","Середа","Четвер","П'ятниця","Субота"],day_short:["Нед","Пон","Вів","Сер","Чет","Птн","Суб"]},labels:{dhx_cal_today_button:"Сьогодні",day_tab:"День",week_tab:"Тиждень",month_tab:"Місяць",new_event:"Нова подія",icon_save:"Зберегти",icon_cancel:"Відміна",icon_details:"Деталі",icon_edit:"Редагувати",icon_delete:"Вилучити",confirm_closing:"",confirm_deleting:"Подія вилучиться назавжди. Ви впевнені?",section_description:"Опис",section_time:"Часовий проміжок",section_type:"Тип",column_text:"Task name",column_start_date:"Start time",column_duration:"Duration",column_add:"",link:"Link",confirm_link_deleting:"will be deleted",link_start:" (start)",link_end:" (end)",type_task:"Task",type_project:"Project",type_milestone:"Milestone",minutes:"Minutes",hours:"Hours",days:"Days",weeks:"Week",months:"Months",years:"Years"}}; - -//# sourceMappingURL=../sources/locale/locale_ua.js.map \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/skins/dhtmlxgantt_broadway.css b/phpgwapi/js/dhtmlxGantt/codebase/skins/dhtmlxgantt_broadway.css deleted file mode 100755 index 06b8d25556..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/skins/dhtmlxgantt_broadway.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -.gantt_grid{background-color:#d6d6d6;border-right:1px solid #d6d6d6!important}.gantt_grid_scale{background-color:#4f4f4f;background-size:5px 5px;background-size:4px 4px;background-position:0 0,2px 2px;background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.05) 25%,transparent 25%,transparent 75%,rgba(255,255,255,.05) 75%,rgba(255,255,255,.05)),linear-gradient(45deg,rgba(255,255,255,.05) 25%,transparent 25%,transparent 75%,rgba(255,255,255,.05) 75%,rgba(255,255,255,.05));background-image:-moz-linear-gradient(45deg,rgba(255,255,255,.05) 25%,transparent 25%,transparent 75%,rgba(255,255,255,.05) 75%,rgba(255,255,255,.05)),linear-gradient(45deg,rgba(255,255,255,.05) 25%,transparent 25%,transparent 75%,rgba(255,255,255,.05) 75%,rgba(255,255,255,.05));background-image:linear-gradient(45deg,rgba(255,255,255,.05) 25%,transparent 25%,transparent 75%,rgba(255,255,255,.05) 75%,rgba(255,255,255,.05)),linear-gradient(45deg,rgba(255,255,255,.05) 25%,transparent 25%,transparent 75%,rgba(255,255,255,.05) 75%,rgba(255,255,255,.05));color:#e1e1e1;font-size:14px}.gantt_grid_scale .gantt_grid_head_cell{border-top:0!important;border-right:1px solid #4f4f4f!important;border-left:1px solid #5b5b5b!important}.gantt_grid_data .gantt_row,.gantt_grid_data .gantt_row.odd{background-color:#dbdbdb;border-top:1px solid #f6f6f6;border-bottom:1px solid #bababa}.gantt_grid_data .gantt_row .gantt_cell,.gantt_grid_data .gantt_row.odd .gantt_cell{border-right:0}.gridHoverStyle{border-top:1px solid #ededed;background-color:#ededed}.gridSelection{background-color:#fff3a1;border-top-color:#fff087}.timelineSelection{background-color:#fff3a1}.gantt_cell .gantt_tree_icon.gantt_folder_open{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAPCAYAAAACsSQRAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODhBMDIwQzhDRUI3MTFFMjg4RUJDNUMzQkZEREM2RDIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODhBMDIwQzlDRUI3MTFFMjg4RUJDNUMzQkZEREM2RDIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4OEEwMjBDNkNFQjcxMUUyODhFQkM1QzNCRkREQzZEMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4OEEwMjBDN0NFQjcxMUUyODhFQkM1QzNCRkREQzZEMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PntuzoIAAACySURBVHjaYmTAAjo6Ov4z4AAVFRWM6GJM6ALt7e0OUCYjFowsDwfIEjDbDRgZGSf8//8fUzEj4wGgeAGQeQFJ+CIj0IALQEl9BjIB0NADTJQYAHWdAxMDFQBVDGEB+ukgxYYAcQNSzCCnh4NY0o89VkOAAbMfV5gBNR0AytuDXAs01AEUxbhcwoAj1c4HaUTi9wMNwWnb/0ERO0xA/z6k0IyP4NgBGpRApgEfgHgBQIABAAcyQOF3e6FiAAAAAElFTkSuQmCC)}.gantt_cell .gantt_tree_icon.gantt_folder_closed{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAPCAYAAAACsSQRAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODhBMDIwQzhDRUI3MTFFMjg4RUJDNUMzQkZEREM2RDIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODhBMDIwQzlDRUI3MTFFMjg4RUJDNUMzQkZEREM2RDIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4OEEwMjBDNkNFQjcxMUUyODhFQkM1QzNCRkREQzZEMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4OEEwMjBDN0NFQjcxMUUyODhFQkM1QzNCRkREQzZEMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PntuzoIAAACySURBVHjaYmTAAjo6Ov4z4AAVFRWM6GJM6ALt7e0OUCYjFowsDwfIEjDbDRgZGSf8//8fUzEj4wGgeAGQeQFJ+CIj0IALQEl9BjIB0NADTJQYAHWdAxMDFQBVDGEB+ukgxYYAcQNSzCCnh4NY0o89VkOAAbMfV5gBNR0AytuDXAs01AEUxbhcwoAj1c4HaUTi9wMNwWnb/0ERO0xA/z6k0IyP4NgBGpRApgEfgHgBQIABAAcyQOF3e6FiAAAAAElFTkSuQmCC)}.gantt_cell .gantt_tree_icon.gantt_file{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkQ2NjJFM0ZDRUI3MTFFMkFGNzc4M0YxNUM2NzkwMTIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RkQ2NjJFNDBDRUI3MTFFMkFGNzc4M0YxNUM2NzkwMTIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGRDY2MkUzRENFQjcxMUUyQUY3NzgzRjE1QzY3OTAxMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpGRDY2MkUzRUNFQjcxMUUyQUY3NzgzRjE1QzY3OTAxMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PhnnqLUAAAExSURBVHjanFPtUcMwDI28AB0BJkg6AWEEJqAbxPxLJkh+phuUDdiAbtAwAYxAJ0jf60k51ecWDt3pZFtPn5akSKjv+3uIBlyLSMW3eZ4niD1423Xdt8dLYjzCqCluEJyNcPJq9+CMJzMGaAtet20rZJ7Bb+eIIhHYw0UGLvIRwBoRplx04CrgWModgwAXhTXj8Usjr73xMAwzJbNInBwU/8ASoqV9LbInYqwc2tJBrZdd8XcaVT4GpFOa52topL1Ks9CGVuGXL/vU40fqZPlGA7E5GX1NvQ7U4sSw1AWdMNIm07CfxIn1K6rcB2sI5yCXhXPyjPO7fuOLNfNikAAi+OnWILEUYFfLICWjXGptO12cyRk20G+sduiq/y7TOXJ2G906R13n0n0nmz2m63wSYAB0aMIyVTQbywAAAABJRU5ErkJggg==)}.chartHeaderBg{background-color:#dbdbdb}.gantt_task .gantt_task_scale .gantt_scale_cell{border-left:1px solid #f6f6f6;border-right:1px solid #bababa;color:#494949;font-size:14px}.taskProgressStyle{border-right:1px solid #1cb3fb;box-shadow:-1px 0 0 1px #04a1eb inset}.gantt_task_line{background-size:4px 4px;background-image:-webkit-linear-gradient(-45deg,rgba(255,255,255,.2) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.2) 50%,rgba(255,255,255,.2) 75%,transparent 75%,transparent);background-image:linear-gradient(135deg,rgba(255,255,255,.2) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.2) 50%,rgba(255,255,255,.2) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(0deg,transparent,transparent)}.gantt_task_line .gantt_task_content{text-align:left;font-weight:700;padding:0 8px;box-sizing:border-box}.gantt_task_link .gantt_link_arrow_right{border-width:5px;margin-top:-2px}.gantt_task_link .gantt_link_arrow_left{border-width:5px;margin-left:-7px;margin-top:-2px}.gantt_task_link .gantt_link_arrow_top{border-width:5px}.gantt_task_link .gantt_link_arrow_down{border-width:5px}.gantt_task_line .gantt_task_progress_drag{bottom:-4px;height:16px;margin-left:-8px;width:16px}.gantt_row.gantt_project,.gantt_row.odd.gantt_project{background-color:#edffef}.gantt_task_row.gantt_project,.gantt_task_row.odd.gantt_project{background-color:#f5fff6}.gantt_task_line.gantt_project{background-color:#65c16f;border:1px solid #3c9445}.gantt_task_line.gantt_project .gantt_task_progress{background-color:#46ad51;border-right:1px solid #5abc65;box-shadow:-1px 0 0 1px #45a94f inset}.dhx_cal_light{background-color:#fff;border:0!important}.dhx_cal_light .dhx_cal_lsection{color:#959595}.dhx_cal_light .dhx_cal_larea{border-bottom:0}.dhx_cal_light .dhx_cal_ltitle{background-color:#4f4f4f;background-size:5px 5px;background-size:4px 4px;background-position:0 0,2px 2px;background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.05) 25%,transparent 25%,transparent 75%,rgba(255,255,255,.05) 75%,rgba(255,255,255,.05)),linear-gradient(45deg,rgba(255,255,255,.05) 25%,transparent 25%,transparent 75%,rgba(255,255,255,.05) 75%,rgba(255,255,255,.05));background-image:-moz-linear-gradient(45deg,rgba(255,255,255,.05) 25%,transparent 25%,transparent 75%,rgba(255,255,255,.05) 75%,rgba(255,255,255,.05)),linear-gradient(45deg,rgba(255,255,255,.05) 25%,transparent 25%,transparent 75%,rgba(255,255,255,.05) 75%,rgba(255,255,255,.05));background-image:linear-gradient(45deg,rgba(255,255,255,.05) 25%,transparent 25%,transparent 75%,rgba(255,255,255,.05) 75%,rgba(255,255,255,.05)),linear-gradient(45deg,rgba(255,255,255,.05) 25%,transparent 25%,transparent 75%,rgba(255,255,255,.05) 75%,rgba(255,255,255,.05));font-size:14px;color:#e1e1e1;position:relative;padding-top:12px;padding-bottom:12px;font-weight:400}.dhx_cal_light .dhx_cal_ltitle .dhx_title{font-size:13px}.dhx_cal_light .dhx_btn_set{margin:5px 10px}.buttonBg{background:#fff}.dhx_btn_set.dhx_save_btn_set{background:#46ad51;text-shadow:0 -1px 0 #307738;color:#fff}.dhx_btn_set.dhx_delete_btn_set{margin-left:0;text-shadow:0 -1px 0 #6f6f6f;background:#ec8e00;text-shadow:0 -1px 0 #a60;color:#fff}.dhx_delete_btn{margin-top:2px;width:20px}.dhx_cal_light_wide{padding-left:0!important;padding-right:0!important}.dhx_cal_light_wide .dhx_cal_larea{border-left:0!important;border-right:0!important}.dhx_cal_ltitle .dhx_cancel_btn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAMCAYAAABbayygAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QYLEgAjh/DRnAAAAMdJREFUGNN1kcsNwjAQRF9iCkgJdJCUkBJQpDkDFUALdBAqAM6WQglQAlxzSglQgAUH1tIKgS9ezzztz0Vd18QYW0lXfpzsFeM49sAGOEpaf0FHYAnsS6evYoy9g3qDAB6Flb4BtYk568Huu6RmBhBCaFNKV4MPrso9hNAClABd1z2ABfB00BNYmEf5NeTrT/wBh2GogDNQOa8CzuZ9QOuvccPkgZqU0gXA7xFgL2nr1pP1ne/xlCEAi0/5nfc4lzT9+cK5pOkNX8hRT8hMyVwAAAAASUVORK5CYII=);width:30px;top:0;right:0;background-position:6px 12px;background-repeat:no-repeat;position:absolute;height:100%}.dhtmlx_popup_button.dhtmlx_ok_button{background:#46ad51;text-shadow:0 -1px 0 #307738;color:#fff;font-weight:700}.dhtmlx_popup_button.dhtmlx_cancel_button{font-weight:700}.dhx_qi_big_icon.icon_edit{color:#454544}.dhx_qi_big_icon.icon_delete{text-shadow:0 -1px 0 #6f6f6f;background:#ec8e00;text-shadow:0 -1px 0 #a60;color:#fff;font-weight:700}.gantt_container{font-family:Arial;font-size:13px;border:1px solid #bababa;position:relative;white-space:nowrap}.gantt_grid{border-right:1px solid #bababa}.gantt_task_scroll{overflow-x:scroll}.gantt_task{position:relative}.gantt_task,.gantt_grid{overflow-x:hidden;overflow-y:hidden;display:inline-block;vertical-align:top}.gantt_grid_scale,.gantt_task_scale{color:#494949;font-size:12px;border-bottom:1px solid #bababa}.gantt_grid_scale{background-color:#4f4f4f;background-size:5px 5px;background-size:4px 4px;background-position:0 0,2px 2px;background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.05) 25%,transparent 25%,transparent 75%,rgba(255,255,255,.05) 75%,rgba(255,255,255,.05)),linear-gradient(45deg,rgba(255,255,255,.05) 25%,transparent 25%,transparent 75%,rgba(255,255,255,.05) 75%,rgba(255,255,255,.05));background-image:-moz-linear-gradient(45deg,rgba(255,255,255,.05) 25%,transparent 25%,transparent 75%,rgba(255,255,255,.05) 75%,rgba(255,255,255,.05)),linear-gradient(45deg,rgba(255,255,255,.05) 25%,transparent 25%,transparent 75%,rgba(255,255,255,.05) 75%,rgba(255,255,255,.05));background-image:linear-gradient(45deg,rgba(255,255,255,.05) 25%,transparent 25%,transparent 75%,rgba(255,255,255,.05) 75%,rgba(255,255,255,.05)),linear-gradient(45deg,rgba(255,255,255,.05) 25%,transparent 25%,transparent 75%,rgba(255,255,255,.05) 75%,rgba(255,255,255,.05));color:#e1e1e1;font-size:14px}.gantt_task_scale{background-color:#dbdbdb}.gantt_scale_line{box-sizing:border-box;-moz-box-sizing:border-box;border-top:1px solid #bababa}.gantt_scale_line:first-child{border-top:0}.gantt_grid_head_cell{display:inline-block;vertical-align:top;border-right:1px solid #bababa;text-align:center;position:relative;cursor:default;height:100%;box-sizing:border-box;-moz-box-sizing:border-box;line-height:33px;-moz-user-select:-moz-none;-webkit-user-select:none;-user-select:none}.gantt_scale_line{clear:both}.gantt_grid_data{width:100%;overflow:hidden}.gantt_row{position:relative;-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_add,.gantt_grid_head_add{width:100%;height:100%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QYHCygkHejN0gAAAD1JREFUOMtjtN15mYESwIJLwvHo6v/I/P3WoYzY1DExUAiGgQGMtjsvYwQYsWC/dSjjcAmD0YREo0AkFgAASgkTQxnJ6ggAAAAASUVORK5CYII=);background-position:center center;background-repeat:no-repeat;cursor:pointer;position:relative;-moz-opacity:.3;opacity:.3}.gantt_grid_head_cell.gantt_grid_head_add{-moz-opacity:.6;opacity:.6;top:0}.gantt_grid_head_cell.gantt_grid_head_add:hover{-moz-opacity:1;opacity:1}.gantt_grid_data .gantt_row:hover,.gantt_grid_data .gantt_row.odd:hover{border-top:1px solid #ededed;background-color:#ededed}.gantt_grid_data .gantt_row:hover .gantt_add,.gantt_grid_data .gantt_row.odd:hover .gantt_add{-moz-opacity:1;opacity:1}.gantt_task_row,.gantt_row{border-bottom:1px solid #ebebeb}.gantt_row,.gantt_task_row{background-color:#fff}.gantt_row.odd,.gantt_task_row.odd{background-color:#fff}.gantt_row,.gantt_cell,.gantt_task_row,.gantt_task_cell,.gantt_grid_head_cell,.gantt_scale_cell{box-sizing:border-box;-moz-box-sizing:border-box}.gantt_grid_head_cell,.gantt_scale_cell{line-height:inherit}.gantt_cell{display:inline-block;vertical-align:top;border-right:1px solid #ebebeb;padding-left:6px;padding-right:6px;height:100%;overflow:hidden;white-space:nowrap;font-size:13px}.gantt_grid_scale .gantt_last_cell,.gantt_grid_data .gantt_last_cell,.gantt_task_scale .gantt_last_cell,.gantt_task_bg .gantt_last_cell{border-right-width:0}.gantt_task_bg{overflow:hidden}.gantt_scale_cell{display:inline-block;white-space:nowrap;overflow:hidden;border-right:1px solid #bababa;text-align:center;height:100%}.gantt_task_cell{display:inline-block;height:100%;border-right:1px solid #ebebeb}.gantt_ver_scroll{width:0;background-color:transparent;height:1px;overflow-x:hidden;overflow-y:scroll;display:none;position:absolute;right:0}.gantt_ver_scroll>div{width:1px;height:1px}.gantt_hor_scroll{height:0;background-color:transparent;width:100%;clear:both;overflow-x:scroll;overflow-y:hidden;display:none}.gantt_hor_scroll>div{width:5000px;height:1px}.gantt_tree_indent{width:15px;height:100%;display:inline-block}.gantt_tree_content,.gantt_tree_icon{vertical-align:top}.gantt_tree_icon{width:28px;height:100%;display:inline-block;background-repeat:no-repeat;background-position:center center}.gantt_tree_content{height:100%;display:inline-block}.gantt_tree_icon.gantt_open{background-image:url(data:image/gif;base64,R0lGODlhEgASAOMHAMrKyt3d3ejp6d7f3+/v75aWlvf39////wAAAP///////////////////////////yH5BAEKAA8ALAAAAAASABIAAAQt8MlJq704672L/x9WZKNVXieVIipKsVMaS0hdSzL+tuY+9yJXEAUCcY7IJCUCADs=);width:18px;cursor:pointer}.gantt_tree_icon.gantt_close{background-image:url(data:image/gif;base64,R0lGODlhEgASAOMIAMrKyt3d3ejp6d7f3+/v75aWlvf39wAAAP///////////////////////////////yH5BAEKAAYALAAAAAASABIAAAQp0MhJq704672L/x9WZKNVXieVVqvUTm95zLOLkreY7yqOgiCOcEikRAAAOw==);width:18px;cursor:pointer}.gantt_tree_icon.gantt_blank{width:18px}.gantt_tree_icon.gantt_folder_open{background-image:url(data:image/gif;base64,R0lGODlhEgASAJECAJeXl7Gvrf///wAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTdDRDM3QzVDMDZEMTFFMUJGMzhFMDhCN0RGRjBGQ0YiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTdDRDM3QzZDMDZEMTFFMUJGMzhFMDhCN0RGRjBGQ0YiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1N0NEMzdDM0MwNkQxMUUxQkYzOEUwOEI3REZGMEZDRiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMzdDNEMwNkQxMUUxQkYzOEUwOEI3REZGMEZDRiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAEAAAIALAAAAAASABIAAAIzlI+pywcPm3mhWgkCsjBOvVkimElG9ZlCBlXd+2XjjLKg5GqoeZXqvsOQXK/ijUZTKVUFADs=)}.gantt_tree_icon.gantt_folder_closed{background-image:url(data:image/gif;base64,R0lGODlhEgASAJECAJeXl7Gvrf///wAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTAyMTU1RTNDMDZEMTFFMUJGNzZCRThBRkFCRjg4MTIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTAyMTU1RTRDMDZEMTFFMUJGNzZCRThBRkFCRjg4MTIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MDIxNTVFMUMwNkQxMUUxQkY3NkJFOEFGQUJGODgxMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1MDIxNTVFMkMwNkQxMUUxQkY3NkJFOEFGQUJGODgxMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAEAAAIALAAAAAASABIAAAIwlI+pywcPm3mhWgkCsjBOvVkimElG9ZlCuYIY6TYs+6bmHDO4igfdD3GNhheV0VQAADs=)}.gantt_tree_icon.gantt_file{background-image:url(data:image/gif;base64,R0lGODlhEgASAJECAJeXl7Gvrf///wAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NzkxQzI4RjZDMDZEMTFFMTgwRjhBQURDQzI3NDU3QUEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NzkxQzI4RjdDMDZEMTFFMTgwRjhBQURDQzI3NDU3QUEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3OTFDMjhGNEMwNkQxMUUxODBGOEFBRENDMjc0NTdBQSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3OTFDMjhGNUMwNkQxMUUxODBGOEFBRENDMjc0NTdBQSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAEAAAIALAAAAAASABIAAAIylI+pwN16QJiUQiFThRlJm3RRFYSlR5qXMKmXaMDuuMoyOi8n/e6xn8NMHETgh5RaKQsAOw==)}.gantt_grid_head_cell .gantt_sort{position:absolute;right:5px;top:8px;width:7px;height:13px;background-repeat:no-repeat;background-position:center center}.gantt_grid_head_cell .gantt_sort.gantt_asc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR42mNgQAL1/VP/M2ADIIntF2/9x1AAlrh0C47hCmA60DFYwX88gIFGwNDY5D8uDFbg7hvwHx2jmIBTAlkB0e4BAEjlaNtBWJPnAAAAAElFTkSuQmCC)}.gantt_grid_head_cell .gantt_sort.gantt_desc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR4nGNgQAKGxib/GbABkIS7b8B/DAUwCRiGK0CXwFBAb1DfP/U/LszwHwi2X7qFgUEArBtdAVwCBmAKMCSQFSDzAWXXaOHsXeqkAAAAAElFTkSuQmCC)}.gantt_inserted,.gantt_updated{font-weight:700}.gantt_deleted{text-decoration:line-through}.gantt_invalid{background-color:FFE0E0}.gantt_error{color:red}.dhtmlx_message_area{position:fixed;right:5px;width:250px;z-index:1000}.dhtmlx-info{min-width:120px;padding:4px 4px 4px 20px;font-family:Arial;z-index:10000;margin:5px;margin-bottom:10px;-webkit-transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;transition:all .5s ease}.dhtmlx-info.hidden{height:0;padding:0;border-width:0;margin:0;overflow:hidden}.dhtmlx_modal_box{overflow:hidden;display:inline-block;min-width:250px;width:250px;text-align:center;position:fixed;z-index:20000;box-shadow:3px 3px 3px rgba(0,0,0,.07);font-family:Arial;border-radius:6px;border:1px solid #bababa;background:#fff}.dhtmlx_popup_title{border-top-left-radius:6px;border-top-right-radius:6px;border-width:0}.dhtmlx_button,.dhtmlx_popup_button{border:1px solid #bababa;height:30px;line-height:30px;display:inline-block;margin:0 5px;border-radius:4px;background:#fff}.dhtmlx-info,.dhtmlx_popup_button,.dhtmlx_button{user-select:none;-webkit-user-select:none;-moz-user-select:-moz-none;cursor:pointer}.dhtmlx_popup_text{overflow:hidden}.dhtmlx_popup_controls{border-radius:6px;padding:10px}.dhtmlx_popup_button{min-width:100px}div.dhx_modal_cover{background-color:#000;cursor:default;filter:alpha(opacity=20);opacity:.2;position:fixed;z-index:19999;left:0;top:0;width:100%;height:100%;border:0;zoom:1}.dhtmlx-info img,.dhtmlx_modal_box img{float:left;margin-right:20px}.dhtmlx-alert-error,.dhtmlx-confirm-error{border:1px solid red}.dhtmlx_button input,.dhtmlx_popup_button div{border-radius:4px;font-size:14px;-moz-box-sizing:content-box;box-sizing:content-box;padding:0;margin:0;vertical-align:top}.dhtmlx_popup_title{color:#fff;text-shadow:1px 1px #000;height:40px;line-height:40px;font-size:20px}.dhtmlx_popup_text{margin:15px 15px 5px;font-size:14px;color:#000;min-height:30px;border-radius:6px}.dhtmlx-info,.dhtmlx-error{font-size:14px;color:#000;box-shadow:3px 3px 3px rgba(0,0,0,.07);padding:0;background-color:#FFF;border-radius:3px;border:1px solid #fff}.dhtmlx-info div{padding:5px 10px;background-color:#fff;border-radius:3px;border:1px solid #bababa}.dhtmlx-error{background-color:#d81b1b;border:1px solid #ff3c3c;box-shadow:3px 3px 3px rgba(0,0,0,.07)}.dhtmlx-error div{background-color:#d81b1b;border:1px solid #940000;color:#FFF}.gantt_grid div,.gantt_data_area div{-ms-touch-action:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.gantt_data_area{position:relative;overflow-x:hidden;overflow-y:hidden;-moz-user-select:-moz-none;-webkit-user-select:none;-user-select:none}.gantt_links_area{position:absolute;left:0;top:0}.gantt_task_content,.gantt_task_progress,.gantt_side_content{line-height:inherit;overflow:hidden;height:100%}.gantt_task_content{font-size:13px;color:#fff;width:100%;position:absolute;white-space:nowrap;text-align:center}.gantt_task_progress{text-align:center;z-index:0;background:#04a4f0;border-right:1px solid #1cb3fb;box-shadow:-1px 0 0 1px #04a1eb inset}.gantt_task_line{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;position:absolute;-moz-box-sizing:border-box;box-sizing:border-box;background-color:#17b2fb;border:1px solid #049ae1;-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_task_line.gantt_drag_move div{cursor:move}.gantt_side_content{position:absolute;white-space:nowrap;color:#6e6e6e;bottom:7px;font-size:11px;font-size:12px}.gantt_side_content.gantt_left{right:100%;padding-right:15px}.gantt_side_content.gantt_right{left:100%;padding-left:15px}.gantt_side_content.gantt_link_crossing{bottom:8.75px}.gantt_task_link .gantt_line_wrapper,.gantt_link_arrow{position:absolute;cursor:pointer}.gantt_line_wrapper div{background-color:#ffa011}.gantt_task_link:hover .gantt_line_wrapper div{box-shadow:0 0 5px 0 #ffa011}.gantt_task_link div.gantt_link_arrow{background-color:transparent;border-style:solid;width:0;height:0}.gantt_link_control{position:absolute;width:13px;top:0}.gantt_link_control div{display:none;cursor:pointer;box-sizing:border-box;position:relative;top:50%;margin-top:-7.5px;vertical-align:middle;border:1px solid #929292;-webkit-border-radius:6.5px;-moz-border-radius:6.5px;border-radius:6.5px;height:13px;width:13px;background-color:#f0f0f0}.gantt_link_control div:hover{background-color:#fff}.gantt_link_control.task_left{left:-13px}.gantt_link_control.task_right{right:-13px}.gantt_task_line.gantt_selected .gantt_link_control div,.gantt_task_line:hover .gantt_link_control div{display:block}.gantt_link_target .gantt_link_control div{display:block}.gantt_link_source,.gantt_link_target{box-shadow:0 0 3px #04a4f0}.gantt_link_target.link_start_allow,.gantt_link_target.link_finish_allow{box-shadow:0 0 3px #ffbf5e}.gantt_link_target.link_start_deny,.gantt_link_target.link_finish_deny{box-shadow:0 0 3px #e87e7b}.link_start_allow .gantt_link_control.task_left div,.link_finish_allow .gantt_link_control.task_right div{background-color:#ffbf5e;border-color:#ffa011}.link_start_deny .gantt_link_control.task_left div,.link_finish_deny .gantt_link_control.task_right div{background-color:#e87e7b;border-color:#dd3e3a}.gantt_link_arrow_right{border-width:2.5px 0 2.5px 5px;border-color:transparent transparent transparent #ffa011;margin-top:-1px}.gantt_link_arrow_left{border-width:2.5px 5px 2.5px 0;margin-top:-1px;border-color:transparent #ffa011 transparent transparent}.gantt_link_arrow_top{border-width:0 2.5px 5px;border-color:transparent transparent #ffa011}.gantt_link_arrow_down{border-width:2.5px 5px 0 2.5px;border-color:#ffa011 transparent transparent}.gantt_task_drag,.gantt_task_progress_drag{cursor:w-resize;height:100%;display:none;position:absolute}.gantt_task_line.gantt_selected .gantt_task_progress_drag,.gantt_task_line:hover .gantt_task_progress_drag,.gantt_task_line.gantt_selected .gantt_task_drag,.gantt_task_line:hover .gantt_task_drag{display:block}.gantt_task_drag{width:6px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAACCAYAAAB7Xa1eAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QYDDjkw3UJvAwAAABRJREFUCNdj/P//PwM2wASl/6PTAKrrBf4+lD8LAAAAAElFTkSuQmCC);z-index:1;top:0}.gantt_task_drag.task_left{left:0}.gantt_task_drag.task_right{right:0}.gantt_task_progress_drag{height:8px;width:8px;bottom:-4px;margin-left:-4px;background-position:bottom;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MkY3Rjk0RUVDMkYzMTFFMkI1OThEQTA3ODU0OTkzMEEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MkY3Rjk0RUZDMkYzMTFFMkI1OThEQTA3ODU0OTkzMEEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyRjdGOTRFQ0MyRjMxMUUyQjU5OERBMDc4NTQ5OTMwQSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyRjdGOTRFREMyRjMxMUUyQjU5OERBMDc4NTQ5OTMwQSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PobPBzIAAADkSURBVHjaYpk2bRoDDsAExL1QdjEQ/8OmiAWHZk4gXqymqhQM4ty6fU8OSMUA8XdiDBAB4k0a6iqWRga6EKcwMQXduHlnL5DpB8Rv0J2JDFSA+JiOtgZcMwiA2CAxkBxUDVYDLEAKgIpV9XQ0MZwFEgPJAZnHoWpRDAgC4n2W5saiQKfjClQGkBxQDciL+6B6wAbkA/EqJwdrTkUFOQZCAKQGpBbIXA3SCzJggo+XK7OEuBgDsQCkFqgHrBfsBT5eHgZSAUwP2IBfv36TbABMDygdtK1Zv6UESLORaAbIhG6AAAMAKN8wE24DXWcAAAAASUVORK5CYII=);background-repeat:no-repeat;z-index:2}.gantt_link_tooltip{box-shadow:3px 3px 3px #888;background-color:#fff;border-left:1px dotted #cecece;border-top:1px dotted #cecece;font-family:Tahoma;font-size:8pt;color:#444;padding:6px;line-height:20px}.gantt_link_direction{height:0;border:0 none #ffa011;border-bottom-style:dashed;border-bottom-width:2px;transform-origin:0 0;-ms-transform-origin:0 0;-webkit-transform-origin:0 0;z-index:2;margin-left:1px;position:absolute}.gantt_grid_data .gantt_row.gantt_selected,.gantt_grid_data .gantt_row.odd.gantt_selected{background-color:#fff3a1;border-top-color:#fff087}.gantt_task_row.gantt_selected{background-color:#fff3a1}.gantt_task_row.gantt_selected .gantt_task_cell{border-right-color:#ffec6e}.gantt_task_line.gantt_selected{box-shadow:0 0 5px #04a4f0}.gantt_task_line.gantt_project.gantt_selected{box-shadow:0 0 5px #46ad51}.gantt_task_line.gantt_milestone{visibility:hidden;background-color:#db7dc5;border:0 solid #cd49ae;box-sizing:content-box;-moz-box-sizing:content-box}.gantt_task_line.gantt_milestone div{visibility:visible}.gantt_task_line.gantt_milestone .gantt_task_content{background:inherit;border:inherit;border-width:1px;border-radius:inherit;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.dhx_unselectable,.dhx_unselectable div{-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.dhx_cal_light{-webkit-tap-highlight-color:transparent;border-radius:6px;font-family:Arial;font-size:13px;border:1px solid #bababa;color:#494949;font-size:12px;position:absolute;z-index:10001;width:550px;height:250px;box-shadow:3px 3px 3px rgba(0,0,0,.07)}.dhx_cal_light_wide{width:650px}.dhx_cal_light select{font-family:Arial;border:1px solid #bababa;font-size:13px;padding:2px;margin:0}.dhx_cal_ltitle{padding:7px 10px;overflow:hidden;white-space:nowrap;-webkit-border-top-left-radius:6px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:6px;-webkit-border-bottom-right-radius:0;-moz-border-radius-topleft:6px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:0;border-top-left-radius:6px;border-bottom-left-radius:0;border-top-right-radius:6px;border-bottom-right-radius:0}.dhx_cal_ltitle span{white-space:nowrap}.dhx_cal_lsection{color:#727272;font-weight:700;padding:12px 0 5px 10px}.dhx_cal_lsection .dhx_fullday{float:right;margin-right:5px;font-size:12px;font-weight:400;line-height:20px;vertical-align:top;cursor:pointer}.dhx_cal_lsection{font-size:13px}.dhx_cal_ltext{padding:2px 10px;overflow:hidden}.dhx_cal_ltext textarea{overflow:auto;font-family:Arial;font-size:13px;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #bababa;height:100%;width:100%;outline:0!important;resize:none}.dhx_time{font-weight:700}.dhx_cal_light .dhx_title{padding-left:10px}.dhx_cal_larea{border:1px solid #bababa;border-left:0;border-right:0;background-color:#fff;overflow:hidden;height:1px}.dhx_btn_set{margin:10px 7px 5px 10px;padding:5px 15px 5px 10px;float:left;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border-width:0;border-color:#bababa;border-style:solid;height:32px;font-weight:700;background:#fff;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.dhx_btn_set div{float:left;font-size:13px;height:22px;line-height:22px;background-repeat:no-repeat;vertical-align:middle}.dhx_save_btn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAPCAYAAAACsSQRAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTBBQUI0RDhDRUJEMTFFMjhFM0ZENTlERUM1OEQzRTYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTBBQUI0RDlDRUJEMTFFMjhFM0ZENTlERUM1OEQzRTYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBMEFBQjRENkNFQkQxMUUyOEUzRkQ1OURFQzU4RDNFNiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBMEFBQjREN0NFQkQxMUUyOEUzRkQ1OURFQzU4RDNFNiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PjdPZV0AAACtSURBVHjanJPbDYUgEESvtwJKoQRLoRNL0RK0ArUCS9AOpAMclDVkw0s2mQ9XcpwJY2OM+VWMgDQ9/CsAEtoh9W6skw+S0Akd5hl1J6kADJBwADs9j9MmIszQ5GJo793qf2nwLUYc0E7xONbaBmloZKAsgCCLW0p2qCsBEEQ6F33gcBbg304I1JYA+BWHQFlAqCcclAXEykaguQSQaiyBVEmbm8RfLFgzo3MJMACZSGxiH8QaMAAAAABJRU5ErkJggg==);margin-top:2px;width:21px}.dhx_cancel_btn{margin-top:2px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDkzMDA3MzlDMzA0MTFFMjg2QTVFMzFEQzgwRkJERDYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDkzMDA3M0FDMzA0MTFFMjg2QTVFMzFEQzgwRkJERDYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowOTMwMDczN0MzMDQxMUUyODZBNUUzMURDODBGQkRENiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowOTMwMDczOEMzMDQxMUUyODZBNUUzMURDODBGQkRENiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmYuYOUAAAEdSURBVHjaYvz//z8DJYAFXWDlypU8QKoIiD2A2AwqfAqIdwBxX3h4+Bdk9YzILgBqtgdS84FYEYeF94E4EWjIQZgAE5LmQCB1AKoZZKMPEAtAMYh9GSp3AKjWD8UFQAEhIPshEIOc3wHENUBb/qJ57SyQMoJyPwKxElDNO1gYFEE17wMKVmIJlzNQzeegrjaA6qmBecEbSvfh0GwMxGeBhoPoemQ9MAO0kEIbl2YTqPAFKK2IbMB3AjabYIkRZmQD7kNpMyI0G0PpO8gGbIUFJj7NQDk2INWIrIcJKfBAKcwJqvkcDs0TgFgXGo19KCkRmpDWQdWDEk0NUoCBoq0FqhkE/IEWbKJKUmZEz43QzFSKIzN1481M5ACAAAMAlfl/lCwRpagAAAAASUVORK5CYII=);width:20px}.dhx_delete_btn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAYAAAAmlE46AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzQzRjMxM0NDRUJEMTFFMjlCNDZDQzhFQUM0ODRCMEIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzQzRjMxM0RDRUJEMTFFMjlCNDZDQzhFQUM0ODRCMEIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDNDNGMzEzQUNFQkQxMUUyOUI0NkNDOEVBQzQ4NEIwQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDNDNGMzEzQkNFQkQxMUUyOUI0NkNDOEVBQzQ4NEIwQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PoU+5FoAAACMSURBVHja7JPdDYAgDIQLE+gmjuAIbOIKjMRIbAAb1BZLUozgz7OXfIbWKxeCAiKCwmNfXnsNP5S4mIkMrSYiEaY2LOFloO6QVF1JamPGc2IvpaeSbqXY4LkOLwU6OTyvgzBasxwnBnivYOGj/sEXg27gbd/JpWZiOf0pV7Anlq9UGqs07hTFC7sAAwCbSNs8SyqFMAAAAABJRU5ErkJggg==);margin-top:2px;width:20px}.dhx_cal_cover{width:100%;height:100%;position:absolute;z-index:10000;top:0;left:0;background-color:#000;opacity:.1;filter:alpha(opacity=10)}.dhx_custom_button{padding:0 3px;font-family:Arial;font-size:13px;font-weight:400;margin-right:5px;margin-top:0;cursor:pointer}.dhx_custom_button div{cursor:pointer;float:left;height:21px;line-height:21px;vertical-align:middle}.dhx_cal_light_wide{width:580px;padding:2px 4px}.dhx_cal_light_wide .dhx_cal_larea{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #bababa}.dhx_cal_light_wide .dhx_cal_lsection{border:0;float:left;text-align:right;width:80px;height:20px;padding:5px 10px 0 0}.dhx_cal_light_wide .dhx_wrap_section{position:relative;padding:10px 0;overflow:hidden;border-bottom:1px solid #ebebeb}.dhx_cal_light_wide .dhx_section_time{overflow:hidden;padding-top:2px!important;padding-right:0;height:20px!important}.dhx_cal_light_wide .dhx_cal_ltext{padding-right:0}.dhx_cal_light_wide .dhx_cal_larea{padding:0 10px;width:100%}.dhx_cal_light_wide .dhx_section_time{background:transparent}.dhx_cal_light_wide .dhx_cal_checkbox label{padding-left:0}.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday{float:none;margin-right:0;font-weight:700;cursor:pointer}.dhx_cal_light_wide .dhx_custom_button{position:absolute;top:0;right:0;margin-top:2px}.dhx_cal_light_wide .dhx_repeat_right{margin-right:55px}.dhx_cal_light_wide.dhx_cal_light_full{width:738px}.dhx_cal_wide_checkbox input{margin-top:8px;margin-left:14px}.dhx_cal_light input{font-size:13px}.dhx_custom_button{float:right;height:21px;width:90px;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px}.dhx_section_time{background-color:#fff;white-space:nowrap;padding:2px 10px 5px;padding-top:2px!important}.dhx_section_time .dhx_time_selects{float:left;height:25px}.dhx_section_time .dhx_time_selects select{height:23px;padding:2px;border:1px solid #bababa}.dhx_gantt_duration{width:100px;height:23px;float:left;white-space:nowrap;margin-left:20px;line-height:23px}.dhx_gantt_duration .dhx_gantt_duration_value,.dhx_gantt_duration .dhx_gantt_duration_dec,.dhx_gantt_duration .dhx_gantt_duration_inc{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;vertical-align:top;height:100%;border:1px solid #bababa}.dhx_gantt_duration .dhx_gantt_duration_value{width:40px;padding:3px 4px;border-left-width:0;border-right-width:0}.dhx_gantt_duration .dhx_gantt_duration_dec,.dhx_gantt_duration .dhx_gantt_duration_inc{width:20px;padding:1px;padding-bottom:3px;background:#fff}.dhx_gantt_duration .dhx_gantt_duration_dec{-moz-border-top-left-radius:4px;-moz-border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.dhx_gantt_duration .dhx_gantt_duration_inc{margin-right:4px;-moz-border-top-right-radius:4px;-moz-border-bottom-right-radius:4px;-webkit-border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:4px}.dhx_cal_quick_info{border:1px solid #bababa;border-radius:6px;position:absolute;z-index:300;box-shadow:3px 3px 3px rgba(0,0,0,.07);background-color:#fff;width:300px;transition:left .5s ease,right .5s;-moz-transition:left .5s ease,right .5s;-webkit-transition:left .5s ease,right .5s;-o-transition:left .5s ease,right .5s}.dhx_no_animate{transition:none;-moz-transition:none;-webkit-transition:none;-o-transition:none}.dhx_cal_quick_info.dhx_qi_left .dhx_qi_big_icon{float:right}.dhx_cal_qi_title{-webkit-border-top-left-radius:6px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:6px;-webkit-border-bottom-right-radius:0;-moz-border-radius-topleft:6px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:0;border-top-left-radius:6px;border-bottom-left-radius:0;border-top-right-radius:6px;border-bottom-right-radius:0;padding:5px 0 8px 12px;color:#494949;background-color:#dbdbdb;border-bottom:1px solid #bababa}.dhx_cal_qi_tdate{font-size:14px;font-weight:700}.dhx_cal_qi_tcontent{font-size:13px}.dhx_cal_qi_content{padding:16px 8px;font-size:13px;color:#494949;overflow:hidden}.dhx_cal_qi_controls{-webkit-border-top-left-radius:0;-webkit-border-bottom-left-radius:6px;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:6px;-moz-border-radius-topleft:0;-moz-border-radius-bottomleft:6px;-moz-border-radius-topright:0;-moz-border-radius-bottomright:6px;border-top-left-radius:0;border-bottom-left-radius:6px;border-top-right-radius:0;border-bottom-right-radius:6px;padding-left:7px}.dhx_cal_qi_controls .dhx_menu_icon{margin-top:6px;background-repeat:no-repeat}.dhx_cal_qi_controls .dhx_menu_icon.icon_edit{width:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH3QYFCjI5ZQj5bAAAAFNJREFUOMvt0zEOACAIA0DkwTymH8bJTRTKZGJXyaWEKPKTCQAH4Ls37cItcDUzsxHNDLZNhCq7Gt1wh9ErV7EjyGAhyGLphlnsClWuS32rn0czAV+vNGrM/LBtAAAAAElFTkSuQmCC)}.dhx_cal_qi_controls .dhx_menu_icon.icon_delete{width:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAYAAAAmlE46AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzQzRjMxM0NDRUJEMTFFMjlCNDZDQzhFQUM0ODRCMEIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzQzRjMxM0RDRUJEMTFFMjlCNDZDQzhFQUM0ODRCMEIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDNDNGMzEzQUNFQkQxMUUyOUI0NkNDOEVBQzQ4NEIwQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDNDNGMzEzQkNFQkQxMUUyOUI0NkNDOEVBQzQ4NEIwQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PoU+5FoAAACMSURBVHja7JPdDYAgDIQLE+gmjuAIbOIKjMRIbAAb1BZLUozgz7OXfIbWKxeCAiKCwmNfXnsNP5S4mIkMrSYiEaY2LOFloO6QVF1JamPGc2IvpaeSbqXY4LkOLwU6OTyvgzBasxwnBnivYOGj/sEXg27gbd/JpWZiOf0pV7Anlq9UGqs07hTFC7sAAwCbSNs8SyqFMAAAAABJRU5ErkJggg==)}.dhx_qi_big_icon{font-size:13px;border-radius:4px;font-weight:700;background:#fff;margin:5px 9px 8px 0;min-width:60px;line-height:32px;vertical-align:middle;padding:0 10px 0 5px;cursor:pointer;border:1px solid #bababa}.dhx_cal_qi_controls div{float:left;height:32px;text-align:center;line-height:32px}.gantt_tooltip{box-shadow:3px 3px 3px rgba(0,0,0,.07);background-color:#fff;border-left:1px solid rgba(0,0,0,.07);border-top:1px solid rgba(0,0,0,.07);font-family:Arial;font-size:8pt;color:#494949;padding:10px;position:absolute;z-index:500}.gantt_noselect{-moz-user-select:-moz-none;-webkit-user-select:none;-user-select:none}.gantt_drag_marker{position:absolute;font-family:Arial;font-size:13px}.gantt_drag_marker .gantt_tree_indent,.gantt_drag_marker .gantt_tree_icon.gantt_blank,.gantt_drag_marker .gantt_tree_icon.gantt_open,.gantt_drag_marker .gantt_tree_icon.gantt_close{display:none}.gantt_drag_marker,.gantt_drag_marker .gantt_row.odd{background-color:#fff}.gantt_drag_marker .gantt_row{border-left:1px solid #d2d2d2;border-top:1px solid #d2d2d2}.gantt_drag_marker .gantt_cell{border-color:#d2d2d2}.gantt_row.gantt_over,.gantt_task_row.gantt_over{background-color:#0070fe}.gantt_row.gantt_transparent .gantt_cell{opacity:.7}.gantt_task_row.gantt_transparent{background-color:#dbf3fe}.dhtmlx_popup_button.dhtmlx_delete_button{background:#46ad51;text-shadow:0 -1px 0 #307738;color:#fff;font-weight:700} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/skins/dhtmlxgantt_meadow.css b/phpgwapi/js/dhtmlxGantt/codebase/skins/dhtmlxgantt_meadow.css deleted file mode 100755 index c54baed87c..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/skins/dhtmlxgantt_meadow.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -.chartHeaderBg{background-color:#f4f2ea}.gridHoverStyle{background-color:#ffebbc!important}.gantt_grid_scale .gantt_grid_head_cell{border-top:0!important;border-right:0!important}.gantt_grid_data .gantt_cell{border-right:0}.gridSelection{background-color:#ffebbc!important}.timelineSelection{background-color:#ffebbc!important}.gantt_task_line .gantt_task_progress_drag{bottom:-4px;height:16px;margin-left:-8px;width:16px}.gantt_task .gantt_task_scale .gantt_scale_cell{border-right:1px solid #cac8bd}.gantt_row.gantt_project .gantt_cell,.gantt_row.odd.gantt_project .gantt_cell{background-color:#edf3ff}.gantt_task_row.gantt_project .gantt_task_cell,.gantt_task_row.odd.gantt_project .gantt_task_cell{background-color:#f5f8ff}.gantt_task_line.gantt_project{background-color:#c7d8f7;border:1px solid #7ba3ed}.gantt_task_line.gantt_project .gantt_task_progress{background-color:#9ab9f1}.dhx_cal_light .dhx_cal_ltitle{padding:7px 10px}.dhx_cal_light .dhx_cal_ltext textarea{border:1px solid #d8d6ce}.dhx_cal_light .dhx_cal_larea{border-color:#d8d6ce!important;background-color:#fcfaf3}.dhx_cal_light .dhx_cal_larea .dhx_section_time{background-color:#fcfaf3}.buttonBg{background:#e0ded7}.dhx_cal_light .dhx_btn_set{height:27px;margin:5px 10px;padding:0 15px 0 10px}.dhx_cal_light .dhx_btn_set div{height:25px;margin-top:0;background-position:center center;line-height:25px}.dhx_btn_set.dhx_save_btn_set{border:1px solid #98d27e;background:#a7d991}.dhx_btn_set.dhx_cancel_btn_set{background:#e0ded7;border:1px solid #cac8bd}.dhx_btn_set.dhx_delete_btn_set{border:1px solid #ffad54;background:#ffb96d}.dhx_cal_light_wide{padding:0!important}.dhx_cal_light_wide .dhx_cal_larea{border-left:0!important;border-right:0!important}.dhx_cal_light_wide .dhx_cal_larea .dhx_cal_lsection{width:90px}.dhx_cal_light_wide .dhx_btn_set{margin:7px 10px}.dhtmlx_popup_button.dhtmlx_ok_button{border:1px solid #98d27e;background:#a7d991}.gantt_data_area .dhx_cal_quick_info{background-color:#f4f2ea}.gantt_data_area .dhx_cal_qi_content{background:#fcfaf3;border-bottom:1px solid #cac8bd}.dhx_qi_big_icon.icon_delete{border-color:#ffad54;background:#ffb96d}.gantt_container{font-family:Verdana;font-size:11px;border:1px solid #cac8bd;position:relative;white-space:nowrap}.gantt_grid{border-right:1px solid #cac8bd}.gantt_task_scroll{overflow-x:scroll}.gantt_task{position:relative}.gantt_task,.gantt_grid{overflow-x:hidden;overflow-y:hidden;display:inline-block;vertical-align:top}.gantt_grid_scale,.gantt_task_scale{color:#3f3f3f;font-size:8pt;border-bottom:1px solid #cac8bd}.gantt_grid_scale{background-color:#f4f2ea}.gantt_task_scale{background-color:#f4f2ea}.gantt_scale_line{box-sizing:border-box;-moz-box-sizing:border-box;border-top:1px solid #cac8bd}.gantt_scale_line:first-child{border-top:0}.gantt_grid_head_cell{display:inline-block;vertical-align:top;border-right:1px solid #cac8bd;text-align:center;position:relative;cursor:default;height:100%;box-sizing:border-box;-moz-box-sizing:border-box;line-height:28px;-moz-user-select:-moz-none;-webkit-user-select:none;-user-select:none}.gantt_scale_line{clear:both}.gantt_grid_data{width:100%;overflow:hidden}.gantt_row{position:relative;-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_add,.gantt_grid_head_add{width:100%;height:100%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDAzOTZDREFDN0FGMTFFMkE1MDhCNkFCRDk3RkY4NTkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDAzOTZDREJDN0FGMTFFMkE1MDhCNkFCRDk3RkY4NTkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowMDM5NkNEOEM3QUYxMUUyQTUwOEI2QUJEOTdGRjg1OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowMDM5NkNEOUM3QUYxMUUyQTUwOEI2QUJEOTdGRjg1OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PnzqpNoAAAEFSURBVHjapJPPDsFAEMbHZqXSi1ZC3Dg7O9bbeA7v4czZE4hLSRwkbiI4cCAN4Uyqs/pPs1vbrTDJHL7Mb77sbr8WeuMu/FOEMQaStplYdgYHFBnKjK1atZqI8+ViZZ2AMmS5x1QxFNHLNVAx1EPMNVAxBBFtvxnfuq4LUKDTTLwXXsFqNprKE1RMM2y+9oe9FV3Bw5++/3svfMRWpS0MV7fFx0Ka2e62kQEhBEbzoTA0DAPqtXqinbMD643IFGkR3KcL1Cib0yA4/DBY4A2u15ug45oFHD05x44sO+kc+FwhI0j4RZBQlUT5kH+0JS4VBpKfqaSVYDDpJ1rz9eNxlxq8BBgAcMHBu6BPeX8AAAAASUVORK5CYII=);background-position:center center;background-repeat:no-repeat;cursor:pointer;position:relative;-moz-opacity:.3;opacity:.3}.gantt_grid_head_cell.gantt_grid_head_add{-moz-opacity:.6;opacity:.6;top:0}.gantt_grid_head_cell.gantt_grid_head_add:hover{-moz-opacity:1;opacity:1}.gantt_grid_data .gantt_row:hover,.gantt_grid_data .gantt_row.odd:hover{background-color:#ffebbc!important}.gantt_grid_data .gantt_row:hover .gantt_add,.gantt_grid_data .gantt_row.odd:hover .gantt_add{-moz-opacity:1;opacity:1}.gantt_task_row,.gantt_row{border-bottom:1px solid #eae9e5}.gantt_row,.gantt_task_row{background-color:#fff}.gantt_row.odd,.gantt_task_row.odd{background-color:#fff}.gantt_row,.gantt_cell,.gantt_task_row,.gantt_task_cell,.gantt_grid_head_cell,.gantt_scale_cell{box-sizing:border-box;-moz-box-sizing:border-box}.gantt_grid_head_cell,.gantt_scale_cell{line-height:inherit}.gantt_cell{display:inline-block;vertical-align:top;border-right:1px solid #eae9e5;padding-left:6px;padding-right:6px;height:100%;overflow:hidden;white-space:nowrap;font-size:8pt}.gantt_grid_scale .gantt_last_cell,.gantt_grid_data .gantt_last_cell,.gantt_task_scale .gantt_last_cell,.gantt_task_bg .gantt_last_cell{border-right-width:0}.gantt_task_bg{overflow:hidden}.gantt_scale_cell{display:inline-block;white-space:nowrap;overflow:hidden;border-right:1px solid #cac8bd;text-align:center;height:100%}.gantt_task_cell{display:inline-block;height:100%;border-right:1px solid #eae9e5}.gantt_ver_scroll{width:0;background-color:transparent;height:1px;overflow-x:hidden;overflow-y:scroll;display:none;position:absolute;right:0}.gantt_ver_scroll>div{width:1px;height:1px}.gantt_hor_scroll{height:0;background-color:transparent;width:100%;clear:both;overflow-x:scroll;overflow-y:hidden;display:none}.gantt_hor_scroll>div{width:5000px;height:1px}.gantt_tree_indent{width:15px;height:100%;display:inline-block}.gantt_tree_content,.gantt_tree_icon{vertical-align:top}.gantt_tree_icon{width:28px;height:100%;display:inline-block;background-repeat:no-repeat;background-position:center center}.gantt_tree_content{height:100%;display:inline-block}.gantt_tree_icon.gantt_open{background-image:url(data:image/gif;base64,R0lGODlhEgASAJEAAP///4SEhAAAAP///yH5BAUUAAMALAAAAAASABIAAAIqnI+py+0Powq01haA3iDgLWwek2mhNi6ZwLLdZ4owcL4kJ5OWJfX+DykAADs=);width:18px;cursor:pointer}.gantt_tree_icon.gantt_close{background-image:url(data:image/gif;base64,R0lGODlhEgASAJEAAP///4SEhAAAAP///yH5BAUUAAMALAAAAAASABIAAAImnI+py+0Powq01haA3iBgvnlMBnafgKLmWK4LCYpvK0+WJeX6DhUAOw==);width:18px;cursor:pointer}.gantt_tree_icon.gantt_blank{width:18px}.gantt_tree_icon.gantt_folder_open{background-image:url(data:image/gif;base64,R0lGODlhEgASAMQfAPXMWPK9N/fipOzLbPrVaP/89frqwv3tuvvprfLES+7PdP7xyP7z0vPAQfvtyMuaIv/32/735OSqFv3de+7ReP7lmf7gh/nv0v/67unFXfb29vK/PenFSaGEPfLnyv///yH5BAEAAB8ALAAAAAASABIAAAWS4Cc+ZGk+YvqZRVtgGiag6sNBThlFWnTQqQcE4sqRFj/VashsYR6HZI0JWSAjDwQCOGIgERULg/EQzJRQsGVCYHTK51qYTQDkFPj4iA4AJHIUgQoGQA8EdX4NhHgKAxeFfQkJGwGLeI6Fkg2UlQ8Dn5hBCZuchKChIxKkGw05Ga8DHlwkqg2tJ1xBtDlKvTUkviEAOw==)}.gantt_tree_icon.gantt_folder_closed{background-image:url(data:image/gif;base64,R0lGODlhEgASAMQfAPvjpP/24fPHVvnUdvzotdSiKv/23vvrw/LCS/C+RfnelvPMaf/88/nbi/rsyerYq/TLYv7y1v7wzeCsLO+8P86dJfvv0MuaIsydKPPOc+SqGKGEPe/AS+zVneWwLf///yH5BAEAAB8ALAAAAAASABIAAAWZ4CdeZGleYvpdA+O+zNUBqHoZOB4EceHUqVtuF+n9VCtdQCI5BC6FA3BkCEQkBALAACVMV9eDVhGJQGnIixigaAwiG6jie2G7BxDLpVJozG13EAICPxUeGRleQQMLgggJUhiHC3pBggKPFJETGZRAF5gJCRSaFxgTC55BCByioz+nEKojGgmtHBwPJAUCELo2J8FfSMTFxsUhADs=)}.gantt_tree_icon.gantt_file{background-image:url(data:image/gif;base64,R0lGODlhEgASAMQVAPv7+2RkZPf39/r6+vj4+Pn5+fT09Pb29vX19fHx8fDw8Onp6fLy8u7u7uzs7PPz8+vr6+rq6uXl5ejo6O/v7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABUALAAAAAASABIAAAV4YCWOZGkGaKqaVSAMQCwLQnAOj6ErzUTXpQDgQDgcGJTFDzgSEp4HRCKytDUBMKzAoIAsJACrSCjTGhINR5hELg8ECEZifS3HCgQEgj62xwZPAnwtbgMDBQU0g21Yh4iIi3aGkzBihH52lgEEmDIEli0qoigspSYhADs=)}.gantt_grid_head_cell .gantt_sort{position:absolute;right:5px;top:8px;width:7px;height:13px;background-repeat:no-repeat;background-position:center center}.gantt_grid_head_cell .gantt_sort.gantt_asc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR42mNgQAL1/VP/M2ADIIntF2/9x1AAlrh0C47hCmA60DFYwX88gIFGwNDY5D8uDFbg7hvwHx2jmIBTAlkB0e4BAEjlaNtBWJPnAAAAAElFTkSuQmCC)}.gantt_grid_head_cell .gantt_sort.gantt_desc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR4nGNgQAKGxib/GbABkIS7b8B/DAUwCRiGK0CXwFBAb1DfP/U/LszwHwi2X7qFgUEArBtdAVwCBmAKMCSQFSDzAWXXaOHsXeqkAAAAAElFTkSuQmCC)}.gantt_inserted,.gantt_updated{font-weight:700}.gantt_deleted{text-decoration:line-through}.gantt_invalid{background-color:FFE0E0}.gantt_error{color:red}.dhtmlx_message_area{position:fixed;right:5px;width:250px;z-index:1000}.dhtmlx-info{min-width:120px;padding:4px 4px 4px 20px;font-family:Verdana;z-index:10000;margin:5px;margin-bottom:10px;-webkit-transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;transition:all .5s ease}.dhtmlx-info.hidden{height:0;padding:0;border-width:0;margin:0;overflow:hidden}.dhtmlx_modal_box{overflow:hidden;display:inline-block;min-width:250px;width:250px;text-align:center;position:fixed;z-index:20000;box-shadow:3px 3px 3px rgba(0,0,0,.07);font-family:Verdana;border-radius:6px;border:1px solid #cac8bd;background:#fcfaf3}.dhtmlx_popup_title{border-top-left-radius:6px;border-top-right-radius:6px;border-width:0}.dhtmlx_button,.dhtmlx_popup_button{border:1px solid #cac8bd;height:25px;line-height:25px;display:inline-block;margin:0 5px;border-radius:4px;background:#e0ded7}.dhtmlx-info,.dhtmlx_popup_button,.dhtmlx_button{user-select:none;-webkit-user-select:none;-moz-user-select:-moz-none;cursor:pointer}.dhtmlx_popup_text{overflow:hidden}.dhtmlx_popup_controls{border-radius:6px;padding:10px}.dhtmlx_popup_button{min-width:100px}div.dhx_modal_cover{background-color:#000;cursor:default;filter:alpha(opacity=20);opacity:.2;position:fixed;z-index:19999;left:0;top:0;width:100%;height:100%;border:0;zoom:1}.dhtmlx-info img,.dhtmlx_modal_box img{float:left;margin-right:20px}.dhtmlx-alert-error,.dhtmlx-confirm-error{border:1px solid red}.dhtmlx_button input,.dhtmlx_popup_button div{border-radius:4px;font-size:14px;-moz-box-sizing:content-box;box-sizing:content-box;padding:0;margin:0;vertical-align:top}.dhtmlx_popup_title{color:#fff;text-shadow:1px 1px #000;height:40px;line-height:40px;font-size:20px}.dhtmlx_popup_text{margin:15px 15px 5px;font-size:14px;color:#000;min-height:30px;border-radius:6px}.dhtmlx-info,.dhtmlx-error{font-size:14px;color:#000;box-shadow:3px 3px 3px rgba(0,0,0,.07);padding:0;background-color:#FFF;border-radius:3px;border:1px solid #fff}.dhtmlx-info div{padding:5px 10px;background-color:#fff;border-radius:3px;border:1px solid #cac8bd}.dhtmlx-error{background-color:#d81b1b;border:1px solid #ff3c3c;box-shadow:3px 3px 3px rgba(0,0,0,.07)}.dhtmlx-error div{background-color:#d81b1b;border:1px solid #940000;color:#FFF}.gantt_grid div,.gantt_data_area div{-ms-touch-action:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.gantt_data_area{position:relative;overflow-x:hidden;overflow-y:hidden;-moz-user-select:-moz-none;-webkit-user-select:none;-user-select:none}.gantt_links_area{position:absolute;left:0;top:0}.gantt_task_content,.gantt_task_progress,.gantt_side_content{line-height:inherit;overflow:hidden;height:100%}.gantt_task_content{font-size:11px;color:#3f3f3f;width:100%;position:absolute;white-space:nowrap;text-align:center}.gantt_task_progress{text-align:center;z-index:0;background:#a7d991}.gantt_task_line{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;position:absolute;-moz-box-sizing:border-box;box-sizing:border-box;background-color:#e1ffd4;border:1px solid #7fbc64;-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_task_line.gantt_drag_move div{cursor:move}.gantt_side_content{position:absolute;white-space:nowrap;color:#6e6e6e;bottom:7px;font-size:11px;font-size:10px}.gantt_side_content.gantt_left{right:100%;padding-right:15px}.gantt_side_content.gantt_right{left:100%;padding-left:15px}.gantt_side_content.gantt_link_crossing{bottom:6.75px}.gantt_task_link .gantt_line_wrapper,.gantt_link_arrow{position:absolute;cursor:pointer}.gantt_line_wrapper div{background-color:#ffb96d}.gantt_task_link:hover .gantt_line_wrapper div{box-shadow:0 0 5px 0 #ffb96d}.gantt_task_link div.gantt_link_arrow{background-color:transparent;border-style:solid;width:0;height:0}.gantt_link_control{position:absolute;width:13px;top:0}.gantt_link_control div{display:none;cursor:pointer;box-sizing:border-box;position:relative;top:50%;margin-top:-7.5px;vertical-align:middle;border:1px solid #929292;-webkit-border-radius:6.5px;-moz-border-radius:6.5px;border-radius:6.5px;height:13px;width:13px;background-color:#f0f0f0}.gantt_link_control div:hover{background-color:#fff}.gantt_link_control.task_left{left:-13px}.gantt_link_control.task_right{right:-13px}.gantt_task_line.gantt_selected .gantt_link_control div,.gantt_task_line:hover .gantt_link_control div{display:block}.gantt_link_target .gantt_link_control div{display:block}.gantt_link_source,.gantt_link_target{box-shadow:0 0 3px #a7d991}.gantt_link_target.link_start_allow,.gantt_link_target.link_finish_allow{box-shadow:0 0 3px #ffdeba}.gantt_link_target.link_start_deny,.gantt_link_target.link_finish_deny{box-shadow:0 0 3px #e87e7b}.link_start_allow .gantt_link_control.task_left div,.link_finish_allow .gantt_link_control.task_right div{background-color:#ffdeba;border-color:#ffb96d}.link_start_deny .gantt_link_control.task_left div,.link_finish_deny .gantt_link_control.task_right div{background-color:#e87e7b;border-color:#dd3e3a}.gantt_link_arrow_right{border-width:4px 0 4px 6px;border-color:transparent transparent transparent #ffb96d;margin-top:-1px}.gantt_link_arrow_left{border-width:4px 6px 4px 0;margin-top:-1px;border-color:transparent #ffb96d transparent transparent}.gantt_link_arrow_top{border-width:0 4px 6px;border-color:transparent transparent #ffb96d}.gantt_link_arrow_down{border-width:4px 6px 0 4px;border-color:#ffb96d transparent transparent}.gantt_task_drag,.gantt_task_progress_drag{cursor:w-resize;height:100%;display:none;position:absolute}.gantt_task_line.gantt_selected .gantt_task_progress_drag,.gantt_task_line:hover .gantt_task_progress_drag,.gantt_task_line.gantt_selected .gantt_task_drag,.gantt_task_line:hover .gantt_task_drag{display:block}.gantt_task_drag{width:6px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAACCAYAAACUn8ZgAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTgyOEUzQzJDODQ3MTFFMjg3NDRCMUFBMTM1M0U1OTYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OTgyOEUzQzNDODQ3MTFFMjg3NDRCMUFBMTM1M0U1OTYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo5ODI4RTNDMEM4NDcxMUUyODc0NEIxQUExMzUzRTU5NiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo5ODI4RTNDMUM4NDcxMUUyODc0NEIxQUExMzUzRTU5NiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pj3qIQcAAAAaSURBVHjaYvz//z8DLsAEIhoaGv5jowECDAASbgp+4xzYLgAAAABJRU5ErkJggg==);z-index:1;top:0}.gantt_task_drag.task_left{left:0}.gantt_task_drag.task_right{right:0}.gantt_task_progress_drag{height:8px;width:8px;bottom:-4px;margin-left:-4px;background-position:bottom;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAJCAYAAAAGuM1UAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Q0JCMkQyRDhDOTFDMTFFMjg3RTFCNUEzNUQwRDMxNjEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Q0JCMkQyRDlDOTFDMTFFMjg3RTFCNUEzNUQwRDMxNjEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDQkIyRDJENkM5MUMxMUUyODdFMUI1QTM1RDBEMzE2MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDQkIyRDJEN0M5MUMxMUUyODdFMUI1QTM1RDBEMzE2MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Ppy3ICwAAADsSURBVHjafFBbaoNQEB1vghtIPlJX4Z/iX/cSsoZQGl80JZvIAvxVf1yNX6EFH+ADK8Y6nblQaGzagXNnmHPODHMVRIR5+L7/Sqm2bfv0i2TDT3ied4zjGBlU7+f8XPzCwrZtsSzLb9PTXQMRfhRFWFUVdl0nURQFco+45xsDNdwwDOVUNuR5LlHXNWZZhsyR5sDahRDC1XXdsSwLFCHgo+/hc5okhusVVFUFTdNgHMfHIAhQ0N2OaZowkbtpGhiG4Qa0RX6OYRicvCU9b2maPqzWa/grKtpE93D5zoZtkiRnyhv4Py6E3ZcAAwDb89Sl5rtPtAAAAABJRU5ErkJggg==);background-repeat:no-repeat;z-index:2}.gantt_link_tooltip{box-shadow:3px 3px 3px #888;background-color:#fff;border-left:1px dotted #cecece;border-top:1px dotted #cecece;font-family:Tahoma;font-size:8pt;color:#444;padding:6px;line-height:20px}.gantt_link_direction{height:0;border:0 none #ffb96d;border-bottom-style:dashed;border-bottom-width:2px;transform-origin:0 0;-ms-transform-origin:0 0;-webkit-transform-origin:0 0;z-index:2;margin-left:1px;position:absolute}.gantt_grid_data .gantt_row.gantt_selected,.gantt_grid_data .gantt_row.odd.gantt_selected{background-color:#ffebbc!important}.gantt_task_row.gantt_selected{background-color:#ffebbc!important}.gantt_task_row.gantt_selected .gantt_task_cell{border-right-color:#ffdc89}.gantt_task_line.gantt_selected{box-shadow:0 0 5px #a7d991}.gantt_task_line.gantt_project.gantt_selected{box-shadow:0 0 5px #9ab9f1}.gantt_task_line.gantt_milestone{visibility:hidden;background-color:#db7dc5;border:0 solid #cd49ae;box-sizing:content-box;-moz-box-sizing:content-box}.gantt_task_line.gantt_milestone div{visibility:visible}.gantt_task_line.gantt_milestone .gantt_task_content{background:inherit;border:inherit;border-width:1px;border-radius:inherit;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.dhx_unselectable,.dhx_unselectable div{-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.dhx_cal_light{-webkit-tap-highlight-color:transparent;background:#f4f2ea;border-radius:6px;font-family:Verdana;font-size:11px;border:1px solid #cac8bd;color:#3f3f3f;font-size:8pt;position:absolute;z-index:10001;width:550px;height:250px;box-shadow:3px 3px 3px rgba(0,0,0,.07)}.dhx_cal_light_wide{width:650px}.dhx_cal_light select{font-family:Verdana;border:1px solid #cac8bd;font-size:11px;padding:2px;margin:0}.dhx_cal_ltitle{padding:7px 10px;overflow:hidden;white-space:nowrap;-webkit-border-top-left-radius:6px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:6px;-webkit-border-bottom-right-radius:0;-moz-border-radius-topleft:6px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:0;border-top-left-radius:6px;border-bottom-left-radius:0;border-top-right-radius:6px;border-bottom-right-radius:0}.dhx_cal_ltitle span{white-space:nowrap}.dhx_cal_lsection{color:#727272;font-weight:700;padding:12px 0 5px 10px}.dhx_cal_lsection .dhx_fullday{float:right;margin-right:5px;font-size:12px;font-weight:400;line-height:20px;vertical-align:top;cursor:pointer}.dhx_cal_lsection{font-size:13px}.dhx_cal_ltext{padding:2px 10px;overflow:hidden}.dhx_cal_ltext textarea{overflow:auto;font-family:Verdana;font-size:11px;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #cac8bd;height:100%;width:100%;outline:0!important;resize:none}.dhx_time{font-weight:700}.dhx_cal_light .dhx_title{padding-left:10px}.dhx_cal_larea{border:1px solid #cac8bd;border-left:0;border-right:0;background-color:#fff;overflow:hidden;height:1px}.dhx_btn_set{margin:10px 7px 5px 10px;padding:5px 15px 5px 10px;float:left;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border-width:0;border-color:#cac8bd;border-style:solid;height:27px;color:#4f4f4f;background:#e0ded7;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.dhx_btn_set div{float:left;font-size:13px;height:17px;line-height:17px;background-repeat:no-repeat;vertical-align:middle}.dhx_save_btn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUUzMDA3NzlDOTFEMTFFMkJBQTNFMTU1NTdFNUNFMTMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUUzMDA3N0FDOTFEMTFFMkJBQTNFMTU1NTdFNUNFMTMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBRTMwMDc3N0M5MUQxMUUyQkFBM0UxNTU1N0U1Q0UxMyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBRTMwMDc3OEM5MUQxMUUyQkFBM0UxNTU1N0U1Q0UxMyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PtHrmoUAAAF4SURBVHjaYvr//z8DNTATA5UA1QxiIUdTQEAAG5CaA8S6QGyyYcOGvyzkGMLIyLgSGC4BHBwcr1RUVBhJdhHQEGagIctAhjAzM/9OSkrqd3Nz+ws3CKjAA0hNA+JcoDO34jIESC0FGhIM4tvb2y8FGjIbyPwPD2wNDQ1RIKUItG09UIM3LkOAOBzEB3rnaF5eXieQ+RYl1jo6Og4oKCicAtrGCjXMA82Q+TBD+Pj4HtfU1NQDmTewRf/jjIyMNmDgfYAatgnJMFDsxIIYrKysX7Ozs9sFBAT240xHQO/t8PT0BGliQHLZdiA3AabGz89vlrm5+RIg8x++BPkzPj5+Msj/UMM4gBTciwYGBttiY2MnAJmfiUnZj4CB2MzFxfUGWVBcXPx6WVlZE0ie6CwiJye3D+il6UCvgZ0PCreCggKQ4adIzWu/w8LCpoO8wsLC8j0yMnKipqbmelh6wQUYQUUADmACxDpADArwl4RSPT6DBqYYAQgwANyusz7jloxAAAAAAElFTkSuQmCC);margin-top:2px;width:21px}.dhx_cancel_btn{margin-top:2px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjQxN0VEOUZDOTFEMTFFMkFFMjE4MDI4MUJDNDQ1NDkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjQxN0VEQTBDOTFEMTFFMkFFMjE4MDI4MUJDNDQ1NDkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCNDE3RUQ5REM5MUQxMUUyQUUyMTgwMjgxQkM0NDU0OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCNDE3RUQ5RUM5MUQxMUUyQUUyMTgwMjgxQkM0NDU0OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pq9E2PUAAAH/SURBVHjaYvz//z8DNQAjTQ0KCAjgAVJFQOwBxGZQ4VNAvAOI+zZs2PCFoEFAQ+wZGRkXAMUVsNrMyPgAKJcANOwgToOAhgQCqXUgtqCg4ANXV9ctzs7Od0D8vXv3quzYsSPw06dP0lDl/kDDNmEYBDRECGjbYyCfS09Pb0dNTc1sNja2M0CpF1C1EjExMfu/fPmiBHXZZ5CrgYa9A/FZYCaysLCU/vnzh0tUVPRGU1NTPVDoNBD/R3ItyKVKAgICj/79+8cIdJksSA9QrBIkz4RkUBCINjU1XQUNWGRDQC4zBhrycMGCBYW2trbLkPWgGPTz50+wk6WlpTegBT6yIaCYXMfJybkRJPf7928ZDIOYmZl/g+jjx4+/xmcISPz27dsfYNowDOLi4gIb8PDhQ1N8hkDVGIBobm7ulxgGAb0EClyGX79+leAzBCjH9vXr13pkPSgGhYeHTwd6DxhUP62ghjzCZggw2icCw0YdGNDfQXrgkQVjGBgYHPHx8Zm9cePGHGhA/gdq/ANkysGUAHELMO3ogji+vr6zQXpwZREFkEErV66M//btmwi2LAIMyzdAlyz09/efDAoufJlW8tWrVx7Tp08PevDggc779+8VYFlGQUHhSmZm5joxMTFQ5n1OTDHCCsT6QAxKJ2JQsVdA/ASIL4J8TrPyCCDAAK8E80CvM3cMAAAAAElFTkSuQmCC);width:20px}.dhx_delete_btn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjkzQUQ0MjVDOTFEMTFFMkEwRERFNzQ5NzZCRjlBODgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjkzQUQ0MjZDOTFEMTFFMkEwRERFNzQ5NzZCRjlBODgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCOTNBRDQyM0M5MUQxMUUyQTBEREU3NDk3NkJGOUE4OCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCOTNBRDQyNEM5MUQxMUUyQTBEREU3NDk3NkJGOUE4OCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pmbo+yIAAAB9SURBVHjaYvz//z8DNQALPsmAgAC4LRs2bGDEaxLIRdiwv78/kPqfBsNQPk71jDCvIdtOLEB2JRMDlQAjUmCnkaF/FtYwgoUDsTQypprXRg0a0QYhp2yGpqamzefOnfMhpMnIyGhLXV2dL06DgMAYigmBs1CM0yCyAUCAAQAlK4lJjSOjGQAAAABJRU5ErkJggg==);margin-top:2px;width:20px}.dhx_cal_cover{width:100%;height:100%;position:absolute;z-index:10000;top:0;left:0;background-color:#000;opacity:.1;filter:alpha(opacity=10)}.dhx_custom_button{padding:0 3px;font-family:Verdana;font-size:11px;font-weight:400;margin-right:5px;margin-top:0;cursor:pointer}.dhx_custom_button div{cursor:pointer;float:left;height:21px;line-height:21px;vertical-align:middle}.dhx_cal_light_wide{width:580px;padding:2px 4px}.dhx_cal_light_wide .dhx_cal_larea{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #cac8bd}.dhx_cal_light_wide .dhx_cal_lsection{border:0;float:left;text-align:right;width:80px;height:20px;padding:5px 10px 0 0}.dhx_cal_light_wide .dhx_wrap_section{position:relative;padding:10px 0;overflow:hidden;border-bottom:1px solid #eae9e5}.dhx_cal_light_wide .dhx_section_time{overflow:hidden;padding-top:2px!important;padding-right:0;height:20px!important}.dhx_cal_light_wide .dhx_cal_ltext{padding-right:0}.dhx_cal_light_wide .dhx_cal_larea{padding:0 10px;width:100%}.dhx_cal_light_wide .dhx_section_time{background:transparent}.dhx_cal_light_wide .dhx_cal_checkbox label{padding-left:0}.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday{float:none;margin-right:0;font-weight:700;cursor:pointer}.dhx_cal_light_wide .dhx_custom_button{position:absolute;top:0;right:0;margin-top:2px}.dhx_cal_light_wide .dhx_repeat_right{margin-right:55px}.dhx_cal_light_wide.dhx_cal_light_full{width:738px}.dhx_cal_wide_checkbox input{margin-top:8px;margin-left:14px}.dhx_cal_light input{font-size:11px}.dhx_custom_button{float:right;height:21px;width:90px;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px}.dhx_section_time{background-color:#fff;white-space:nowrap;padding:2px 10px 5px;padding-top:2px!important}.dhx_section_time .dhx_time_selects{float:left;height:25px}.dhx_section_time .dhx_time_selects select{height:23px;padding:2px;border:1px solid #cac8bd}.dhx_gantt_duration{width:100px;height:23px;float:left;white-space:nowrap;margin-left:20px;line-height:23px}.dhx_gantt_duration .dhx_gantt_duration_value,.dhx_gantt_duration .dhx_gantt_duration_dec,.dhx_gantt_duration .dhx_gantt_duration_inc{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;vertical-align:top;height:100%;border:1px solid #cac8bd}.dhx_gantt_duration .dhx_gantt_duration_value{width:40px;padding:3px 4px;border-left-width:0;border-right-width:0}.dhx_gantt_duration .dhx_gantt_duration_dec,.dhx_gantt_duration .dhx_gantt_duration_inc{width:20px;padding:1px;padding-bottom:3px;background:#e0ded7}.dhx_gantt_duration .dhx_gantt_duration_dec{-moz-border-top-left-radius:4px;-moz-border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.dhx_gantt_duration .dhx_gantt_duration_inc{margin-right:4px;-moz-border-top-right-radius:4px;-moz-border-bottom-right-radius:4px;-webkit-border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:4px}.dhx_cal_quick_info{border:1px solid #cac8bd;border-radius:6px;position:absolute;z-index:300;box-shadow:3px 3px 3px rgba(0,0,0,.07);background-color:#fcfaf3;width:300px;transition:left .5s ease,right .5s;-moz-transition:left .5s ease,right .5s;-webkit-transition:left .5s ease,right .5s;-o-transition:left .5s ease,right .5s}.dhx_no_animate{transition:none;-moz-transition:none;-webkit-transition:none;-o-transition:none}.dhx_cal_quick_info.dhx_qi_left .dhx_qi_big_icon{float:right}.dhx_cal_qi_title{-webkit-border-top-left-radius:6px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:6px;-webkit-border-bottom-right-radius:0;-moz-border-radius-topleft:6px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:0;border-top-left-radius:6px;border-bottom-left-radius:0;border-top-right-radius:6px;border-bottom-right-radius:0;padding:5px 0 8px 12px;color:#3f3f3f;background-color:#f4f2ea;border-bottom:1px solid #cac8bd}.dhx_cal_qi_tdate{font-size:14px;font-weight:700}.dhx_cal_qi_tcontent{font-size:11px}.dhx_cal_qi_content{padding:16px 8px;font-size:13px;color:#3f3f3f;overflow:hidden}.dhx_cal_qi_controls{-webkit-border-top-left-radius:0;-webkit-border-bottom-left-radius:6px;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:6px;-moz-border-radius-topleft:0;-moz-border-radius-bottomleft:6px;-moz-border-radius-topright:0;-moz-border-radius-bottomright:6px;border-top-left-radius:0;border-bottom-left-radius:6px;border-top-right-radius:0;border-bottom-right-radius:6px;padding-left:7px}.dhx_cal_qi_controls .dhx_menu_icon{margin-top:3.5px;background-repeat:no-repeat}.dhx_cal_qi_controls .dhx_menu_icon.icon_edit{width:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH3QYFDgcMloNXJQAAAFNJREFUOMvt0zEOACAIA0Dkg30rL8TJTRTKZGJXyaWEKPKTCQAH4Ls37cItcDUzsxHNDLZNhCq7Gt1wh9ErV7EjyGAhyGLphlnsClWuS32rn0czAT/KLVk9yshBAAAAAElFTkSuQmCC)}.dhx_cal_qi_controls .dhx_menu_icon.icon_delete{width:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjkzQUQ0MjVDOTFEMTFFMkEwRERFNzQ5NzZCRjlBODgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjkzQUQ0MjZDOTFEMTFFMkEwRERFNzQ5NzZCRjlBODgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCOTNBRDQyM0M5MUQxMUUyQTBEREU3NDk3NkJGOUE4OCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCOTNBRDQyNEM5MUQxMUUyQTBEREU3NDk3NkJGOUE4OCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pmbo+yIAAAB9SURBVHjaYvz//z8DNQALPsmAgAC4LRs2bGDEaxLIRdiwv78/kPqfBsNQPk71jDCvIdtOLEB2JRMDlQAjUmCnkaF/FtYwgoUDsTQypprXRg0a0QYhp2yGpqamzefOnfMhpMnIyGhLXV2dL06DgMAYigmBs1CM0yCyAUCAAQAlK4lJjSOjGQAAAABJRU5ErkJggg==)}.dhx_qi_big_icon{font-size:13px;border-radius:4px;color:#4f4f4f;background:#e0ded7;margin:5px 9px 8px 0;min-width:60px;line-height:27px;vertical-align:middle;padding:0 10px 0 5px;cursor:pointer;border:1px solid #cac8bd}.dhx_cal_qi_controls div{float:left;height:27px;text-align:center;line-height:27px}.gantt_tooltip{box-shadow:3px 3px 3px rgba(0,0,0,.07);background-color:#fff;border-left:1px solid rgba(0,0,0,.07);border-top:1px solid rgba(0,0,0,.07);font-family:Verdana;font-size:8pt;color:#3f3f3f;padding:10px;position:absolute;z-index:500}.gantt_noselect{-moz-user-select:-moz-none;-webkit-user-select:none;-user-select:none}.gantt_drag_marker{position:absolute;font-family:Verdana;font-size:11px}.gantt_drag_marker .gantt_tree_indent,.gantt_drag_marker .gantt_tree_icon.gantt_blank,.gantt_drag_marker .gantt_tree_icon.gantt_open,.gantt_drag_marker .gantt_tree_icon.gantt_close{display:none}.gantt_drag_marker,.gantt_drag_marker .gantt_row.odd{background-color:#fff}.gantt_drag_marker .gantt_row{border-left:1px solid #d3d1c8;border-top:1px solid #d3d1c8}.gantt_drag_marker .gantt_cell{border-color:#d3d1c8}.gantt_row.gantt_over,.gantt_task_row.gantt_over{background-color:#0070fe}.gantt_row.gantt_transparent .gantt_cell{opacity:.7}.gantt_task_row.gantt_transparent{background-color:#fff}.dhtmlx_popup_button.dhtmlx_delete_button{border:1px solid #98d27e;background:#a7d991} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/skins/dhtmlxgantt_skyblue.css b/phpgwapi/js/dhtmlxGantt/codebase/skins/dhtmlxgantt_skyblue.css deleted file mode 100755 index 6c7aeafbd0..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/skins/dhtmlxgantt_skyblue.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -.gridHoverStyle{background-color:#ffe6b1!important;background-color:#ffebc1;background-image:-webkit-linear-gradient(top,#ffe09d 0,#ffeabb 100%);background-image:-moz-linear-gradient(top,#ffe09d 0,#ffeabb 100%);background-image:-ms-linear-gradient(top,#ffe09d 0,#ffeabb 100%);background-image:linear-gradient(to top,#ffe09d 0,#ffeabb 100%);border-top-color:#ffc341;border-bottom-color:#ffc341}.gridSelection{background-color:#ffe6b1!important;border-bottom-color:#ffc341}.timelineSelection{background-color:#ffe6b1!important;background-color:#ffebc1;background-image:-webkit-linear-gradient(top,#ffe09d 0,#ffeabb 100%);background-image:-moz-linear-gradient(top,#ffe09d 0,#ffeabb 100%);background-image:-ms-linear-gradient(top,#ffe09d 0,#ffeabb 100%);background-image:linear-gradient(to top,#ffe09d 0,#ffeabb 100%);border-top-color:#ffc341;border-bottom-color:#ffc341}.timelineSelection .gantt_task_cell{border-right-color:#ffce65}.dhx_cal_quick_info .dhx_cal_qi_title{background:#fff}.dhx_cal_qi_controls .dhx_qi_big_icon .dhx_menu_icon.icon_delete{margin-top:5px}.gantt_container{font-family:Tahoma;font-size:11px;border:1px solid #a4bed4;position:relative;white-space:nowrap}.gantt_grid{border-right:1px solid #a4bed4}.gantt_task_scroll{overflow-x:scroll}.gantt_task{position:relative}.gantt_task,.gantt_grid{overflow-x:hidden;overflow-y:hidden;display:inline-block;vertical-align:top}.gantt_grid_scale,.gantt_task_scale{color:#42464b;border-bottom:1px solid #a4bed4}.gantt_grid_scale{box-shadow:0 1px 1px #fff inset;background-color:#dfedff;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#e4f0ff),color-stop(50%,#dfedff),color-stop(100%,#d5e8ff));background-image:-webkit-linear-gradient(top,#e4f0ff 0,#dfedff 50%,#d5e8ff 100%);background-image:-moz-linear-gradient(top,#e4f0ff 0,#dfedff 60%,#d5e8ff 100%);background-image:-ms-linear-gradient(top,#e4f0ff 0,#dfedff 60%,#d5e8ff 100%);background-image:-o-linear-gradient(top,#e4f0ff 0,#dfedff 60%,#d5e8ff 100%);background-position:0 1px;background-repeat:repeat-x}.gantt_task_scale{box-shadow:0 1px 1px #fff inset;background-color:#dfedff;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#e4f0ff),color-stop(50%,#dfedff),color-stop(100%,#d5e8ff));background-image:-webkit-linear-gradient(top,#e4f0ff 0,#dfedff 50%,#d5e8ff 100%);background-image:-moz-linear-gradient(top,#e4f0ff 0,#dfedff 60%,#d5e8ff 100%);background-image:-ms-linear-gradient(top,#e4f0ff 0,#dfedff 60%,#d5e8ff 100%);background-image:-o-linear-gradient(top,#e4f0ff 0,#dfedff 60%,#d5e8ff 100%);background-position:0 1px;background-repeat:repeat-x}.gantt_scale_line{box-sizing:border-box;-moz-box-sizing:border-box;border-top:1px solid #a4bed4}.gantt_scale_line:first-child{border-top:0}.gantt_grid_head_cell{display:inline-block;vertical-align:top;border-right:1px solid #a4bed4;text-align:center;position:relative;cursor:default;height:100%;box-sizing:border-box;-moz-box-sizing:border-box;line-height:25px;-moz-user-select:-moz-none;-webkit-user-select:none;-user-select:none}.gantt_scale_line{clear:both}.gantt_grid_data{width:100%;overflow:hidden}.gantt_row{position:relative;-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_add,.gantt_grid_head_add{width:100%;height:100%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NzZCMThBRUFCRTQ0MTFFMkFFMEFGMEFBMzJEN0RBRTIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NzZCMThBRUJCRTQ0MTFFMkFFMEFGMEFBMzJEN0RBRTIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NkIxOEFFOEJFNDQxMUUyQUUwQUYwQUEzMkQ3REFFMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NkIxOEFFOUJFNDQxMUUyQUUwQUYwQUEzMkQ3REFFMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PkVHygEAAAEpSURBVHjaYgzeGcyABfxnwA4Y0QVY/v79i1VlsUMxCr/3QC9WdTgN+P//P8Ohr4fAbDtuOwZc6lj+/PmDVeLfv39wTSA2LnU4DQC5AGYAiI1LHRNQ4j861pfSZ3j36x1YEwiD2CAxbGoZbRbZ/K/3qUcx9cPvDwzXv11n+PL3C5jPw8zDoMmlySDAKoCirnFLI8QLID/ufLOTARf48OcDw/Gfx1HE3EXcwa5j+f37N95AwgVAekB64QaATISB97/fM1z5dIXh85/PYD4vCy+DDp8OgyCrIIYBjFoTtDBSnYWyBYO9rj3DsbfHwHwrYSuGg5cPMpy4ewIzFoCmMKLjwzcOMwiwCMBjAcQGiWFTizchweRompDwuiBANoCgCxjFasQoys4AAQYARt4I/K036xQAAAAASUVORK5CYII=);background-position:center center;background-repeat:no-repeat;cursor:pointer;position:relative;-moz-opacity:.3;opacity:.3}.gantt_grid_head_cell.gantt_grid_head_add{-moz-opacity:.6;opacity:.6;top:0}.gantt_grid_head_cell.gantt_grid_head_add:hover{-moz-opacity:1;opacity:1}.gantt_grid_data .gantt_row:hover,.gantt_grid_data .gantt_row.odd:hover{background-color:#ffe6b1!important;background-color:#ffebc1;background-image:-webkit-linear-gradient(top,#ffe09d 0,#ffeabb 100%);background-image:-moz-linear-gradient(top,#ffe09d 0,#ffeabb 100%);background-image:-ms-linear-gradient(top,#ffe09d 0,#ffeabb 100%);background-image:linear-gradient(to top,#ffe09d 0,#ffeabb 100%);border-top-color:#ffc341;border-bottom-color:#ffc341}.gantt_grid_data .gantt_row:hover .gantt_add,.gantt_grid_data .gantt_row.odd:hover .gantt_add{-moz-opacity:1;opacity:1}.gantt_task_row,.gantt_row{border-bottom:1px solid #ebebeb}.gantt_row,.gantt_task_row{background-color:#fff}.gantt_row.odd,.gantt_task_row.odd{background-color:#fff}.gantt_row,.gantt_cell,.gantt_task_row,.gantt_task_cell,.gantt_grid_head_cell,.gantt_scale_cell{box-sizing:border-box;-moz-box-sizing:border-box}.gantt_grid_head_cell,.gantt_scale_cell{line-height:inherit}.gantt_cell{display:inline-block;vertical-align:top;border-right:1px solid #ebebeb;padding-left:6px;padding-right:6px;height:100%;overflow:hidden;white-space:nowrap}.gantt_grid_scale .gantt_last_cell,.gantt_grid_data .gantt_last_cell,.gantt_task_scale .gantt_last_cell,.gantt_task_bg .gantt_last_cell{border-right-width:0}.gantt_task_bg{overflow:hidden}.gantt_scale_cell{display:inline-block;white-space:nowrap;overflow:hidden;border-right:1px solid #a4bed4;text-align:center;height:100%}.gantt_task_cell{display:inline-block;height:100%;border-right:1px solid #ebebeb}.gantt_ver_scroll{width:0;background-color:transparent;height:1px;overflow-x:hidden;overflow-y:scroll;display:none;position:absolute;right:0}.gantt_ver_scroll>div{width:1px;height:1px}.gantt_hor_scroll{height:0;background-color:transparent;width:100%;clear:both;overflow-x:scroll;overflow-y:hidden;display:none}.gantt_hor_scroll>div{width:5000px;height:1px}.gantt_tree_indent{width:15px;height:100%;display:inline-block}.gantt_tree_content,.gantt_tree_icon{vertical-align:top}.gantt_tree_icon{width:28px;height:100%;display:inline-block;background-repeat:no-repeat;background-position:center center}.gantt_tree_content{height:100%;display:inline-block}.gantt_tree_icon.gantt_open{background-image:url(data:image/gif;base64,R0lGODlhEgASAJEAAP///4SEhAAAAP///yH5BAUUAAMALAAAAAASABIAAAIqnI+py+0Powq01haA3iDgLWwek2mhNi6ZwLLdZ4owcL4kJ5OWJfX+DykAADs=);width:18px;cursor:pointer}.gantt_tree_icon.gantt_close{background-image:url(data:image/gif;base64,R0lGODlhEgASAJEAAP///4SEhAAAAP///yH5BAUUAAMALAAAAAASABIAAAImnI+py+0Powq01haA3iBgvnlMBnafgKLmWK4LCYpvK0+WJeX6DhUAOw==);width:18px;cursor:pointer}.gantt_tree_icon.gantt_blank{width:18px}.gantt_tree_icon.gantt_folder_open{background-image:url(data:image/gif;base64,R0lGODlhEgASAMQfAPXMWPK9N/fipOzLbPrVaP/89frqwv3tuvvprfLES+7PdP7xyP7z0vPAQfvtyMuaIv/32/735OSqFv3de+7ReP7lmf7gh/nv0v/67unFXfb29vK/PenFSaGEPfLnyv///yH5BAEAAB8ALAAAAAASABIAAAWS4Cc+ZGk+YvqZRVtgGiag6sNBThlFWnTQqQcE4sqRFj/VashsYR6HZI0JWSAjDwQCOGIgERULg/EQzJRQsGVCYHTK51qYTQDkFPj4iA4AJHIUgQoGQA8EdX4NhHgKAxeFfQkJGwGLeI6Fkg2UlQ8Dn5hBCZuchKChIxKkGw05Ga8DHlwkqg2tJ1xBtDlKvTUkviEAOw==)}.gantt_tree_icon.gantt_folder_closed{background-image:url(data:image/gif;base64,R0lGODlhEgASAMQfAPvjpP/24fPHVvnUdvzotdSiKv/23vvrw/LCS/C+RfnelvPMaf/88/nbi/rsyerYq/TLYv7y1v7wzeCsLO+8P86dJfvv0MuaIsydKPPOc+SqGKGEPe/AS+zVneWwLf///yH5BAEAAB8ALAAAAAASABIAAAWZ4CdeZGleYvpdA+O+zNUBqHoZOB4EceHUqVtuF+n9VCtdQCI5BC6FA3BkCEQkBALAACVMV9eDVhGJQGnIixigaAwiG6jie2G7BxDLpVJozG13EAICPxUeGRleQQMLgggJUhiHC3pBggKPFJETGZRAF5gJCRSaFxgTC55BCByioz+nEKojGgmtHBwPJAUCELo2J8FfSMTFxsUhADs=)}.gantt_tree_icon.gantt_file{background-image:url(data:image/gif;base64,R0lGODlhEgASAMQVAPv7+2RkZPf39/r6+vj4+Pn5+fT09Pb29vX19fHx8fDw8Onp6fLy8u7u7uzs7PPz8+vr6+rq6uXl5ejo6O/v7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABUALAAAAAASABIAAAV4YCWOZGkGaKqaVSAMQCwLQnAOj6ErzUTXpQDgQDgcGJTFDzgSEp4HRCKytDUBMKzAoIAsJACrSCjTGhINR5hELg8ECEZifS3HCgQEgj62xwZPAnwtbgMDBQU0g21Yh4iIi3aGkzBihH52lgEEmDIEli0qoigspSYhADs=)}.gantt_grid_head_cell .gantt_sort{position:absolute;right:5px;top:8px;width:7px;height:13px;background-repeat:no-repeat;background-position:center center}.gantt_grid_head_cell .gantt_sort.gantt_asc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR4nGNgQAKGxib/GbABkIS7b8B/DAUwCRiGK0CXwFBAb1DfP/U/LszwHwi2X7qFgUEArBtdAVwCBmAKMCSQFSDzAWXXaOHsXeqkAAAAAElFTkSuQmCC)}.gantt_grid_head_cell .gantt_sort.gantt_desc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR42mNgQAL1/VP/M2ADIIntF2/9x1AAlrh0C47hCmA60DFYwX88gIFGwNDY5D8uDFbg7hvwHx2jmIBTAlkB0e4BAEjlaNtBWJPnAAAAAElFTkSuQmCC)}.gantt_inserted,.gantt_updated{font-weight:700}.gantt_deleted{text-decoration:line-through}.gantt_invalid{background-color:FFE0E0}.gantt_error{color:red}.dhtmlx_message_area{position:fixed;right:5px;width:250px;z-index:1000}.dhtmlx-info{min-width:120px;padding:4px 4px 4px 20px;font-family:Tahoma;z-index:10000;margin:5px;margin-bottom:10px;-webkit-transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;transition:all .5s ease}.dhtmlx-info.hidden{height:0;padding:0;border-width:0;margin:0;overflow:hidden}.dhtmlx_modal_box{overflow:hidden;display:inline-block;min-width:250px;width:250px;text-align:center;position:fixed;z-index:20000;box-shadow:3px 3px 3px rgba(0,0,0,.07);font-family:Tahoma;border-radius:0;border:1px solid #a4bed4;background:#fff}.dhtmlx_popup_title{border-top-left-radius:0;border-top-right-radius:0;border-width:0}.dhtmlx_button,.dhtmlx_popup_button{border:1px solid #a4bed4;height:24px;line-height:24px;display:inline-block;margin:0 5px;border-radius:4px;background-color:#f8f8f8;background-image:-webkit-linear-gradient(top,#e6e6e6 0,#fff 100%);background-image:-moz-linear-gradient(top,#e6e6e6 0,#fff 100%);background-image:-ms-linear-gradient(top,#e6e6e6 0,#fff 100%);background-image:linear-gradient(to top,#e6e6e6 0,#fff 100%)}.dhtmlx-info,.dhtmlx_popup_button,.dhtmlx_button{user-select:none;-webkit-user-select:none;-moz-user-select:-moz-none;cursor:pointer}.dhtmlx_popup_text{overflow:hidden}.dhtmlx_popup_controls{border-radius:6px;padding:10px}.dhtmlx_popup_button{min-width:100px}div.dhx_modal_cover{background-color:#000;cursor:default;filter:alpha(opacity=20);opacity:.2;position:fixed;z-index:19999;left:0;top:0;width:100%;height:100%;border:0;zoom:1}.dhtmlx-info img,.dhtmlx_modal_box img{float:left;margin-right:20px}.dhtmlx-alert-error,.dhtmlx-confirm-error{border:1px solid red}.dhtmlx_button input,.dhtmlx_popup_button div{border-radius:4px;font-size:15px;-moz-box-sizing:content-box;box-sizing:content-box;padding:0;margin:0;vertical-align:top}.dhtmlx_popup_title{color:#fff;text-shadow:1px 1px #000;height:40px;line-height:40px;font-size:20px}.dhtmlx_popup_text{margin:15px 15px 5px;font-size:14px;color:#000;min-height:30px;border-radius:0}.dhtmlx-info,.dhtmlx-error{font-size:14px;color:#000;box-shadow:3px 3px 3px rgba(0,0,0,.07);padding:0;background-color:#FFF;border-radius:3px;border:1px solid #fff}.dhtmlx-info div{padding:5px 10px;background-color:#fff;border-radius:3px;border:1px solid #a4bed4}.dhtmlx-error{background-color:#d81b1b;border:1px solid #ff3c3c;box-shadow:3px 3px 3px rgba(0,0,0,.07)}.dhtmlx-error div{background-color:#d81b1b;border:1px solid #940000;color:#FFF}.gantt_grid div,.gantt_data_area div{-ms-touch-action:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.gantt_data_area{position:relative;overflow-x:hidden;overflow-y:hidden;-moz-user-select:-moz-none;-webkit-user-select:none;-user-select:none}.gantt_links_area{position:absolute;left:0;top:0}.gantt_task_content,.gantt_task_progress,.gantt_side_content{line-height:inherit;overflow:hidden;height:100%}.gantt_task_content{font-size:12px;color:#1e2022;width:100%;position:absolute;white-space:nowrap;text-align:center}.gantt_task_progress{text-align:center;z-index:0;background:#5aa0d3;background-color:#82b7de;background-image:-webkit-linear-gradient(top,#abcee8 0,#5aa0d3 36%,#bfdaee 100%);background-image:-moz-linear-gradient(top,#abcee8 0,#5aa0d3 36%,#bfdaee 100%);background-image:-ms-linear-gradient(top,#abcee8 0,#5aa0d3 36%,#bfdaee 100%);background-image:linear-gradient(to top,#abcee8 0,#5aa0d3 36%,#bfdaee 100%)}.gantt_task_line{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;position:absolute;-moz-box-sizing:border-box;box-sizing:border-box;background-color:#eff6fb;border:1px solid #3588c5;-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_task_line.gantt_drag_move div{cursor:move}.gantt_side_content{position:absolute;white-space:nowrap;color:#6e6e6e;bottom:7px;font-size:11px}.gantt_side_content.gantt_left{right:100%;padding-right:15px}.gantt_side_content.gantt_right{left:100%;padding-left:15px}.gantt_side_content.gantt_link_crossing{bottom:6.75px}.gantt_task_link .gantt_line_wrapper,.gantt_link_arrow{position:absolute;cursor:pointer}.gantt_line_wrapper div{background-color:#4a8f43}.gantt_task_link:hover .gantt_line_wrapper div{box-shadow:0 0 5px 0 #4a8f43}.gantt_task_link div.gantt_link_arrow{background-color:transparent;border-style:solid;width:0;height:0}.gantt_link_control{position:absolute;width:13px;top:0}.gantt_link_control div{display:none;cursor:pointer;box-sizing:border-box;position:relative;top:50%;margin-top:-7.5px;vertical-align:middle;border:1px solid #929292;-webkit-border-radius:6.5px;-moz-border-radius:6.5px;border-radius:6.5px;height:13px;width:13px;background-color:#f0f0f0}.gantt_link_control div:hover{background-color:#fff}.gantt_link_control.task_left{left:-13px}.gantt_link_control.task_right{right:-13px}.gantt_task_line.gantt_selected .gantt_link_control div,.gantt_task_line:hover .gantt_link_control div{display:block}.gantt_link_target .gantt_link_control div{display:block}.gantt_link_source,.gantt_link_target{box-shadow:0 0 3px #0070fe}.gantt_link_target.link_start_allow,.gantt_link_target.link_finish_allow{box-shadow:0 0 3px #6eb867}.gantt_link_target.link_start_deny,.gantt_link_target.link_finish_deny{box-shadow:0 0 3px #e87e7b}.link_start_allow .gantt_link_control.task_left div,.link_finish_allow .gantt_link_control.task_right div{background-color:#6eb867;border-color:#4a8f43}.link_start_deny .gantt_link_control.task_left div,.link_finish_deny .gantt_link_control.task_right div{background-color:#e87e7b;border-color:#dd3e3a}.gantt_link_arrow_right{border-width:4px 0 4px 8px;border-color:transparent transparent transparent #4a8f43;margin-top:-1px}.gantt_link_arrow_left{border-width:4px 8px 4px 0;margin-top:-1px;border-color:transparent #4a8f43 transparent transparent}.gantt_link_arrow_top{border-width:0 4px 8px;border-color:transparent transparent #4a8f43}.gantt_link_arrow_down{border-width:4px 8px 0 4px;border-color:#4a8f43 transparent transparent}.gantt_task_drag,.gantt_task_progress_drag{cursor:w-resize;height:100%;display:none;position:absolute}.gantt_task_line.gantt_selected .gantt_task_progress_drag,.gantt_task_line:hover .gantt_task_progress_drag,.gantt_task_line.gantt_selected .gantt_task_drag,.gantt_task_line:hover .gantt_task_drag{display:block}.gantt_task_drag{width:6px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAACCAYAAACUn8ZgAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDEyNDQ5RDdCRTQ5MTFFMjhBQzlGRDA2RDIyNDc5NzEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDEyNDQ5RDhCRTQ5MTFFMjhBQzlGRDA2RDIyNDc5NzEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowMTI0NDlENUJFNDkxMUUyOEFDOUZEMDZEMjI0Nzk3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowMTI0NDlENkJFNDkxMUUyOEFDOUZEMDZEMjI0Nzk3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pv8NECcAAAAaSURBVHjaYvz//z8DLsAEIsw6j/3HRgMEGAARnwqNiuFmdQAAAABJRU5ErkJggg==);z-index:1;top:0}.gantt_task_drag.task_left{left:0}.gantt_task_drag.task_right{right:0}.gantt_task_progress_drag{height:8px;width:8px;bottom:-4px;margin-left:-4px;background-position:bottom;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDNGNzQ1MTZCQkRBMTFFMjlBMjRBRkU0RkNCMTUzNkUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDNGNzQ1MTdCQkRBMTFFMjlBMjRBRkU0RkNCMTUzNkUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0M0Y3NDUxNEJCREExMUUyOUEyNEFGRTRGQ0IxNTM2RSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0M0Y3NDUxNUJCREExMUUyOUEyNEFGRTRGQ0IxNTM2RSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PrBLI3EAAACISURBVHjafE07DkMhDAuftQdgYuCWbZ9a0WtwGJC4BgMbYmVGaZLpqWpryZFjOwrACSmlSLzCN1DwrLUik/TtM3yUUnDOiWMMZE3enTNF4gghRO89KKXkABGh9w6ttcPSHp1zsNaCvbcUjDHAHhVemg1rrVxprYWs2ZOMR84ZfoGfXuAP3gIMABorQUvC1invAAAAAElFTkSuQmCC);background-repeat:no-repeat;z-index:2}.gantt_link_tooltip{box-shadow:3px 3px 3px #888;background-color:#fff;border-left:1px dotted #cecece;border-top:1px dotted #cecece;font-family:Tahoma;font-size:8pt;color:#444;padding:6px;line-height:20px}.gantt_link_direction{height:0;border:0 none #4a8f43;border-bottom-style:dashed;border-bottom-width:2px;transform-origin:0 0;-ms-transform-origin:0 0;-webkit-transform-origin:0 0;z-index:2;margin-left:1px;position:absolute}.gantt_grid_data .gantt_row.gantt_selected,.gantt_grid_data .gantt_row.odd.gantt_selected{background-color:#ffe6b1!important;border-bottom-color:#ffc341}.gantt_task_row.gantt_selected{background-color:#ffe6b1!important;background-color:#ffebc1;background-image:-webkit-linear-gradient(top,#ffe09d 0,#ffeabb 100%);background-image:-moz-linear-gradient(top,#ffe09d 0,#ffeabb 100%);background-image:-ms-linear-gradient(top,#ffe09d 0,#ffeabb 100%);background-image:linear-gradient(to top,#ffe09d 0,#ffeabb 100%);border-top-color:#ffc341;border-bottom-color:#ffc341}.gantt_task_row.gantt_selected .gantt_task_cell{border-right-color:#ffb30e}.gantt_task_row.gantt_selected .gantt_task_cell{border-right-color:#ffce65}.gantt_task_line.gantt_selected{box-shadow:0 0 5px #5aa0d3}.gantt_task_line.gantt_project.gantt_selected{box-shadow:0 0 5px #9ab9f1}.gantt_task_line.gantt_milestone{visibility:hidden;background-color:#db7dc5;border:0 solid #cd49ae;box-sizing:content-box;-moz-box-sizing:content-box}.gantt_task_line.gantt_milestone div{visibility:visible}.gantt_task_line.gantt_milestone .gantt_task_content{background:inherit;border:inherit;border-width:1px;border-radius:inherit;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.dhx_unselectable,.dhx_unselectable div{-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.dhx_cal_light{-webkit-tap-highlight-color:transparent;background-color:#eff6fb;border-radius:0;font-family:Tahoma;font-size:11px;border:1px solid #a4bed4;color:#42464b;position:absolute;z-index:10001;width:550px;height:250px;box-shadow:3px 3px 3px rgba(0,0,0,.07)}.dhx_cal_light_wide{width:650px}.dhx_cal_light select{font-family:Tahoma;border:1px solid #a4bed4;font-size:11px;padding:2px;margin:0}.dhx_cal_ltitle{padding:7px 10px;overflow:hidden;white-space:nowrap;-webkit-border-top-left-radius:0;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:0;-moz-border-radius-topleft:0;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0;border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0}.dhx_cal_ltitle span{white-space:nowrap}.dhx_cal_lsection{color:#727272;font-weight:700;padding:12px 0 5px 10px}.dhx_cal_lsection .dhx_fullday{float:right;margin-right:5px;font-size:12px;font-weight:400;line-height:20px;vertical-align:top;cursor:pointer}.dhx_cal_lsection{font-size:13px}.dhx_cal_ltext{padding:2px 10px;overflow:hidden}.dhx_cal_ltext textarea{overflow:auto;font-family:Tahoma;font-size:11px;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #a4bed4;height:100%;width:100%;outline:0!important;resize:none}.dhx_time{font-weight:700}.dhx_cal_light .dhx_title{padding-left:10px}.dhx_cal_larea{border:1px solid #a4bed4;border-left:0;border-right:0;background-color:#fff;overflow:hidden;height:1px}.dhx_btn_set{margin:10px 7px 5px 10px;padding:2px 25px 2px 10px;float:left;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border-width:1px;border-color:#a4bed4;border-style:solid;height:26px;color:#42464b;background-color:#f8f8f8;background-image:-webkit-linear-gradient(top,#e6e6e6 0,#fff 100%);background-image:-moz-linear-gradient(top,#e6e6e6 0,#fff 100%);background-image:-ms-linear-gradient(top,#e6e6e6 0,#fff 100%);background-image:linear-gradient(to top,#e6e6e6 0,#fff 100%);-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.dhx_btn_set div{float:left;font-size:13px;height:20px;line-height:20px;background-repeat:no-repeat;vertical-align:middle}.dhx_save_btn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QkE5Nzc4RENDMzAzMTFFMjk4QjNBODhDMUM4QUUwNEQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QkE5Nzc4RERDMzAzMTFFMjk4QjNBODhDMUM4QUUwNEQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCQTk3NzhEQUMzMDMxMUUyOThCM0E4OEMxQzhBRTA0RCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCQTk3NzhEQkMzMDMxMUUyOThCM0E4OEMxQzhBRTA0RCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pr5Ot2UAAAFoSURBVHjapFO7SgNRED0rxkjEELbcQksLBUMg4EfkG7YV/AFTpBAUfNQisVDQD7CQlBaWwoZ8gNEiFttmg3GTfbF6JtzFTUJYyIHhDnfOnJm5Dy2OYywDjQJnF5ex/dXDweENNtaAzT/jur46IY1D4McHvv3J+nZ7BGNrG436sSaU3ucHqtUqzP1sVcflMizLEl8EwjBEFEXwomwC5DInEeDGaDSC62cTIJc5iUAQBGJukE1A8YkVNYLv++h232WMRUYOuakRlOLTwzU8z1tYPZ/Po1QqJR0kAgQDWTEjwLaIWq0GwzDmJtm2jVarNSvAeeQQXVe6ME1Tgs1mMyXA2GAwQKFQmH8G/X4fjuOgWCxKkP40yMnlcukO1MNgAivoui5B+tMgh3H1DuQa66fnaLfbGA6HMgY7oNGfNnL+v0RN/cbnl9f46qSBSqUiM9J4ZQSvVgl0Oh1pf2d3D4/3d5q27Hf+FWAAc90EKSR5k78AAAAASUVORK5CYII=);margin-top:2px;width:21px}.dhx_cancel_btn{margin-top:2px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzU4NTQ3NUZDMzAzMTFFMkE0MjRGNTQzQjE0MTNDQkIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzU4NTQ3NjBDMzAzMTFFMkE0MjRGNTQzQjE0MTNDQkIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDNTg1NDc1REMzMDMxMUUyQTQyNEY1NDNCMTQxM0NCQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDNTg1NDc1RUMzMDMxMUUyQTQyNEY1NDNCMTQxM0NCQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PkVB3hoAAAEYSURBVHjapJM9CsJAEIUTFStbQRA8gKCNKSIIeohUVraC9oKiGBRsBDvBylbwEkJQCys9gJUgeIOAxDfwEpYNpsmDL7PZ+cn+TMwgCIw0yhgplZPH3bbVuRqYgiYogxe4ABc8wqD69RpbQR6MwQ04TDZoHc6LP/tvC2uw4Fi+Vgcmrct58W9iW4BaYAB80OGSQ8my7xz7jDsAT11Bn3alJYvUa1pp8VGBNu0uIVm2s9fiowJF8OWJ/0sWPRlX1At8eLqlhGRRhXEfvcCJtpeQLOpq8VGBLe04Ibmh+Ld6AY8HWOBVzUCVvio780z/LrxCtQ9EQ+5tBOZElRzeUmmqWCfKlyfAAkfw5vyb7xb9vlrATPs7/wQYAISgQGDaq6hUAAAAAElFTkSuQmCC);width:20px}.dhx_delete_btn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTA3M0M1MzJDMzAzMTFFMkE5ODZDRjhENzQ2MUZFNzkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTA3M0M1MzNDMzAzMTFFMkE5ODZDRjhENzQ2MUZFNzkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpFMDczQzUzMEMzMDMxMUUyQTk4NkNGOEQ3NDYxRkU3OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFMDczQzUzMUMzMDMxMUUyQTk4NkNGOEQ3NDYxRkU3OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pplu0sEAAAErSURBVHja3FOxboMwED0nIQNbJoaOZM0YyMhGqwz8BOQ3mm5I/AHwCayoGVlhZUSMHTIhsSCEhOtzawRIlZDY+qTTs893z6fzmVBKYQ12YhEEweB0HAf3tCxLUFUVXWSeiDGIzW/ynRE9HA7coihCBtd1AVn40TCO2X1ewbthGCBJEiiKAtvtFggh0HUdWJYFfd9zez6f3JckiS1EhEDmeZ623+9BlmWejCaAfWqahou0bQumab7MK9DP5zM9nU5c4Hg8ch4nF0XBOc9zuF6vg/pm3pw0TSdNDcPwp8QsG2LiOIY/BZagqqp1AmP8M4Gvuq5B1/XJqNq2zVnTNMBzjBsLEHxnHBrf91/Z/nPBpW+32+0hPuFODAt79wtbfiwQuLD4x6SCNfgWYAAfQYJFsOV+5AAAAABJRU5ErkJggg==);margin-top:2px;width:20px}.dhx_cal_cover{width:100%;height:100%;position:absolute;z-index:10000;top:0;left:0;background-color:#000;opacity:.1;filter:alpha(opacity=10)}.dhx_custom_button{padding:0 3px;font-family:Tahoma;font-size:11px;font-weight:400;margin-right:5px;margin-top:0;cursor:pointer}.dhx_custom_button div{cursor:pointer;float:left;height:21px;line-height:21px;vertical-align:middle}.dhx_cal_light_wide{width:580px;padding:2px 4px}.dhx_cal_light_wide .dhx_cal_larea{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #a4bed4}.dhx_cal_light_wide .dhx_cal_lsection{border:0;float:left;text-align:right;width:80px;height:20px;padding:5px 10px 0 0}.dhx_cal_light_wide .dhx_wrap_section{position:relative;padding:10px 0;overflow:hidden;border-bottom:1px solid #ebebeb}.dhx_cal_light_wide .dhx_section_time{overflow:hidden;padding-top:2px!important;padding-right:0;height:20px!important}.dhx_cal_light_wide .dhx_cal_ltext{padding-right:0}.dhx_cal_light_wide .dhx_cal_larea{padding:0 10px;width:100%}.dhx_cal_light_wide .dhx_section_time{background:transparent}.dhx_cal_light_wide .dhx_cal_checkbox label{padding-left:0}.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday{float:none;margin-right:0;font-weight:700;cursor:pointer}.dhx_cal_light_wide .dhx_custom_button{position:absolute;top:0;right:0;margin-top:2px}.dhx_cal_light_wide .dhx_repeat_right{margin-right:55px}.dhx_cal_light_wide.dhx_cal_light_full{width:738px}.dhx_cal_wide_checkbox input{margin-top:8px;margin-left:14px}.dhx_cal_light input{font-size:11px}.dhx_custom_button{float:right;height:21px;width:90px;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px}.dhx_section_time{background-color:#fff;white-space:nowrap;padding:2px 10px 5px;padding-top:2px!important}.dhx_section_time .dhx_time_selects{float:left;height:25px}.dhx_section_time .dhx_time_selects select{height:23px;padding:2px;border:1px solid #a4bed4}.dhx_gantt_duration{width:100px;height:23px;float:left;white-space:nowrap;margin-left:20px;line-height:23px}.dhx_gantt_duration .dhx_gantt_duration_value,.dhx_gantt_duration .dhx_gantt_duration_dec,.dhx_gantt_duration .dhx_gantt_duration_inc{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;vertical-align:top;height:100%;border:1px solid #a4bed4}.dhx_gantt_duration .dhx_gantt_duration_value{width:40px;padding:3px 4px;border-left-width:0;border-right-width:0}.dhx_gantt_duration .dhx_gantt_duration_dec,.dhx_gantt_duration .dhx_gantt_duration_inc{width:20px;padding:1px;padding-bottom:3px;background-color:#f8f8f8;background-image:-webkit-linear-gradient(top,#e6e6e6 0,#fff 100%);background-image:-moz-linear-gradient(top,#e6e6e6 0,#fff 100%);background-image:-ms-linear-gradient(top,#e6e6e6 0,#fff 100%);background-image:linear-gradient(to top,#e6e6e6 0,#fff 100%)}.dhx_gantt_duration .dhx_gantt_duration_dec{-moz-border-top-left-radius:4px;-moz-border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.dhx_gantt_duration .dhx_gantt_duration_inc{margin-right:4px;-moz-border-top-right-radius:4px;-moz-border-bottom-right-radius:4px;-webkit-border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:4px}.dhx_cal_quick_info{border:1px solid #a4bed4;border-radius:0;position:absolute;z-index:300;box-shadow:3px 3px 3px rgba(0,0,0,.07);background-color:#fff;width:300px;transition:left .5s ease,right .5s;-moz-transition:left .5s ease,right .5s;-webkit-transition:left .5s ease,right .5s;-o-transition:left .5s ease,right .5s}.dhx_no_animate{transition:none;-moz-transition:none;-webkit-transition:none;-o-transition:none}.dhx_cal_quick_info.dhx_qi_left .dhx_qi_big_icon{float:right}.dhx_cal_qi_title{-webkit-border-top-left-radius:0;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:0;-moz-border-radius-topleft:0;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0;border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;padding:5px 0 8px 12px;color:#1e2022;box-shadow:0 1px 1px #fff inset;background-color:#dfedff;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#e4f0ff),color-stop(50%,#dfedff),color-stop(100%,#d5e8ff));background-image:-webkit-linear-gradient(top,#e4f0ff 0,#dfedff 50%,#d5e8ff 100%);background-image:-moz-linear-gradient(top,#e4f0ff 0,#dfedff 60%,#d5e8ff 100%);background-image:-ms-linear-gradient(top,#e4f0ff 0,#dfedff 60%,#d5e8ff 100%);background-image:-o-linear-gradient(top,#e4f0ff 0,#dfedff 60%,#d5e8ff 100%);background-position:0 1px;background-repeat:repeat-x;border-bottom:1px solid #a4bed4}.dhx_cal_qi_tdate{font-size:14px;font-weight:700}.dhx_cal_qi_tcontent{font-size:11px}.dhx_cal_qi_content{padding:16px 8px;font-size:13px;color:#1e2022;overflow:hidden}.dhx_cal_qi_controls{-webkit-border-top-left-radius:0;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:0;-moz-border-radius-topleft:0;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0;border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;padding-left:7px}.dhx_cal_qi_controls .dhx_menu_icon{margin-top:3px;background-repeat:no-repeat}.dhx_cal_qi_controls .dhx_menu_icon.icon_edit{width:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH3QYFDhEuX3ujFgAAAFNJREFUOMvt0zEOACAIA0DksTyqn8XJTRTKZGJXyaWEKPKTCQAH4Ls37cItcDUzsxHNDLZNhCq7Gt1wh9ErV7EjyGAhyGLphlnsClWuS32rn0czAV+sNUIROnQoAAAAAElFTkSuQmCC)}.dhx_cal_qi_controls .dhx_menu_icon.icon_delete{width:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTA3M0M1MzJDMzAzMTFFMkE5ODZDRjhENzQ2MUZFNzkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTA3M0M1MzNDMzAzMTFFMkE5ODZDRjhENzQ2MUZFNzkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpFMDczQzUzMEMzMDMxMUUyQTk4NkNGOEQ3NDYxRkU3OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFMDczQzUzMUMzMDMxMUUyQTk4NkNGOEQ3NDYxRkU3OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pplu0sEAAAErSURBVHja3FOxboMwED0nIQNbJoaOZM0YyMhGqwz8BOQ3mm5I/AHwCayoGVlhZUSMHTIhsSCEhOtzawRIlZDY+qTTs893z6fzmVBKYQ12YhEEweB0HAf3tCxLUFUVXWSeiDGIzW/ynRE9HA7coihCBtd1AVn40TCO2X1ewbthGCBJEiiKAtvtFggh0HUdWJYFfd9zez6f3JckiS1EhEDmeZ623+9BlmWejCaAfWqahou0bQumab7MK9DP5zM9nU5c4Hg8ch4nF0XBOc9zuF6vg/pm3pw0TSdNDcPwp8QsG2LiOIY/BZagqqp1AmP8M4Gvuq5B1/XJqNq2zVnTNMBzjBsLEHxnHBrf91/Z/nPBpW+32+0hPuFODAt79wtbfiwQuLD4x6SCNfgWYAAfQYJFsOV+5AAAAABJRU5ErkJggg==)}.dhx_qi_big_icon{font-size:13px;border-radius:4px;color:#42464b;background-color:#f8f8f8;background-image:-webkit-linear-gradient(top,#e6e6e6 0,#fff 100%);background-image:-moz-linear-gradient(top,#e6e6e6 0,#fff 100%);background-image:-ms-linear-gradient(top,#e6e6e6 0,#fff 100%);background-image:linear-gradient(to top,#e6e6e6 0,#fff 100%);margin:5px 9px 8px 0;min-width:60px;line-height:26px;vertical-align:middle;padding:0 10px 0 5px;cursor:pointer;border:1px solid #a4bed4}.dhx_cal_qi_controls div{float:left;height:26px;text-align:center;line-height:26px}.gantt_tooltip{box-shadow:3px 3px 3px rgba(0,0,0,.07);background-color:#fff;border-left:1px solid rgba(0,0,0,.07);border-top:1px solid rgba(0,0,0,.07);font-family:Tahoma;font-size:8pt;color:#1e2022;padding:10px;position:absolute;z-index:500}.gantt_noselect{-moz-user-select:-moz-none;-webkit-user-select:none;-user-select:none}.gantt_drag_marker{position:absolute;font-family:Tahoma;font-size:11px}.gantt_drag_marker .gantt_tree_indent,.gantt_drag_marker .gantt_tree_icon.gantt_blank,.gantt_drag_marker .gantt_tree_icon.gantt_open,.gantt_drag_marker .gantt_tree_icon.gantt_close{display:none}.gantt_drag_marker,.gantt_drag_marker .gantt_row.odd{background-color:#fff}.gantt_drag_marker .gantt_row{border-left:1px solid #d2d2d2;border-top:1px solid #d2d2d2}.gantt_drag_marker .gantt_cell{border-color:#d2d2d2}.gantt_row.gantt_over,.gantt_task_row.gantt_over{background-color:#0070fe}.gantt_row.gantt_transparent .gantt_cell{opacity:.7}.gantt_task_row.gantt_transparent{background-color:#e4f0ff} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/skins/dhtmlxgantt_terrace.css b/phpgwapi/js/dhtmlxGantt/codebase/skins/dhtmlxgantt_terrace.css deleted file mode 100755 index 5a2e2b6203..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/skins/dhtmlxgantt_terrace.css +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -.gridHoverStyle{background-color:#fff3a1}.gridSelection{background-color:#fff3a1}.timelineSelection{background-color:#fff3a1}.gantt_grid_scale .gantt_grid_head_cell{color:#a6a6a6;border-top:0!important;border-right:0!important}.gantt_grid_data .gantt_cell{border-right:0;color:#454545}.gantt_task_link .gantt_link_arrow_right{border-width:6px;margin-top:-3px}.gantt_task_link .gantt_link_arrow_left{border-width:6px;margin-left:-6px;margin-top:-3px}.gantt_task_link .gantt_link_arrow_top{border-width:6px}.gantt_task_link .gantt_link_arrow_down{border-width:6px}.gantt_task_line .gantt_task_progress_drag{bottom:-4px;height:16px;margin-left:-8px;width:16px}.chartHeaderBg{background-color:#fff}.gantt_task .gantt_task_scale .gantt_scale_cell{color:#a6a6a6;border-right:1px solid #ebebeb}.gantt_row.gantt_project,.gantt_row.odd.gantt_project{background-color:#edffef}.gantt_task_row.gantt_project,.gantt_task_row.odd.gantt_project{background-color:#f5fff6}.gantt_task_line.gantt_project{background-color:#65c16f;border:1px solid #3c9445}.gantt_task_line.gantt_project .gantt_task_progress{background-color:#46ad51}.buttonBg{background:#fff}.dhx_cal_light .dhx_btn_set{margin:5px 10px}.dhx_btn_set.dhx_cancel_btn_set{background:#fff;color:#454545;border:1px solid #cecece}.dhx_btn_set.dhx_save_btn_set{background:#3db9d3;text-shadow:0 -1px 0 #248a9f;color:#fff}.dhx_btn_set.dhx_delete_btn_set{text-shadow:0 -1px 0 #6f6f6f;background:#ec8e00;text-shadow:0 -1px 0 #a60;color:#fff}.dhx_delete_btn{margin-top:2px;width:20px}.dhx_cal_light_wide{padding-left:0!important;padding-right:0!important}.dhx_cal_light_wide .dhx_cal_larea{border-left:0!important;border-right:0!important}.dhtmlx_popup_button.dhtmlx_ok_button{background:#3db9d3;text-shadow:0 -1px 0 #248a9f;color:#fff;font-weight:700;border-width:0}.dhtmlx_popup_button.dhtmlx_cancel_button{font-weight:700;color:#454544}.dhx_qi_big_icon.icon_edit{color:#454545;background:#fff}.dhx_qi_big_icon.icon_delete{text-shadow:0 -1px 0 #a60;background:#ec8e00;color:#fff;border-width:0}.gantt_container{font-family:Arial;font-size:13px;border:1px solid #cecece;position:relative;white-space:nowrap}.gantt_grid{border-right:1px solid #cecece}.gantt_task_scroll{overflow-x:scroll}.gantt_task{position:relative}.gantt_task,.gantt_grid{overflow-x:hidden;overflow-y:hidden;display:inline-block;vertical-align:top}.gantt_grid_scale,.gantt_task_scale{color:#6b6b6b;font-size:12px;border-bottom:1px solid #cecece}.gantt_grid_scale{background-color:#fff}.gantt_task_scale{background-color:#fff}.gantt_scale_line{box-sizing:border-box;-moz-box-sizing:border-box;border-top:1px solid #cecece}.gantt_scale_line:first-child{border-top:0}.gantt_grid_head_cell{display:inline-block;vertical-align:top;border-right:1px solid #cecece;text-align:center;position:relative;cursor:default;height:100%;box-sizing:border-box;-moz-box-sizing:border-box;line-height:33px;-moz-user-select:-moz-none;-webkit-user-select:none;-user-select:none}.gantt_scale_line{clear:both}.gantt_grid_data{width:100%;overflow:hidden}.gantt_row{position:relative;-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_add,.gantt_grid_head_add{width:100%;height:100%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTQ3MjMyMENDNkI0MTFFMjk4MTI5QTg3MDhFNDVDQTkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTQ3MjMyMERDNkI0MTFFMjk4MTI5QTg3MDhFNDVDQTkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1NDcyMzIwQUM2QjQxMUUyOTgxMjlBODcwOEU0NUNBOSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1NDcyMzIwQkM2QjQxMUUyOTgxMjlBODcwOEU0NUNBOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PshZT8UAAABbSURBVHjaYrTdeZmBEsCER+4wEP+H4sPkGGCDg020ARR7gb4GIAcYDKMDdPnDyAbYkGG5DVW9cIQMvUdBBAuUY4vDz8iAcZinA2zgCHqAYQMseAywJcYFAAEGAM+UFGuohFczAAAAAElFTkSuQmCC);background-position:center center;background-repeat:no-repeat;cursor:pointer;position:relative;-moz-opacity:.3;opacity:.3}.gantt_grid_head_cell.gantt_grid_head_add{-moz-opacity:.6;opacity:.6;top:0}.gantt_grid_head_cell.gantt_grid_head_add:hover{-moz-opacity:1;opacity:1}.gantt_grid_data .gantt_row:hover,.gantt_grid_data .gantt_row.odd:hover{background-color:#fff3a1}.gantt_grid_data .gantt_row:hover .gantt_add,.gantt_grid_data .gantt_row.odd:hover .gantt_add{-moz-opacity:1;opacity:1}.gantt_task_row,.gantt_row{border-bottom:1px solid #ebebeb}.gantt_row,.gantt_task_row{background-color:#fff}.gantt_row.odd,.gantt_task_row.odd{background-color:#fff}.gantt_row,.gantt_cell,.gantt_task_row,.gantt_task_cell,.gantt_grid_head_cell,.gantt_scale_cell{box-sizing:border-box;-moz-box-sizing:border-box}.gantt_grid_head_cell,.gantt_scale_cell{line-height:inherit}.gantt_cell{display:inline-block;vertical-align:top;border-right:1px solid #ebebeb;padding-left:6px;padding-right:6px;height:100%;overflow:hidden;white-space:nowrap;font-size:13px}.gantt_grid_scale .gantt_last_cell,.gantt_grid_data .gantt_last_cell,.gantt_task_scale .gantt_last_cell,.gantt_task_bg .gantt_last_cell{border-right-width:0}.gantt_task_bg{overflow:hidden}.gantt_scale_cell{display:inline-block;white-space:nowrap;overflow:hidden;border-right:1px solid #cecece;text-align:center;height:100%}.gantt_task_cell{display:inline-block;height:100%;border-right:1px solid #ebebeb}.gantt_ver_scroll{width:0;background-color:transparent;height:1px;overflow-x:hidden;overflow-y:scroll;display:none;position:absolute;right:0}.gantt_ver_scroll>div{width:1px;height:1px}.gantt_hor_scroll{height:0;background-color:transparent;width:100%;clear:both;overflow-x:scroll;overflow-y:hidden;display:none}.gantt_hor_scroll>div{width:5000px;height:1px}.gantt_tree_indent{width:15px;height:100%;display:inline-block}.gantt_tree_content,.gantt_tree_icon{vertical-align:top}.gantt_tree_icon{width:28px;height:100%;display:inline-block;background-repeat:no-repeat;background-position:center center}.gantt_tree_content{height:100%;display:inline-block}.gantt_tree_icon.gantt_open{background-image:url(data:image/gif;base64,R0lGODlhEgASALMJAMrKyt3d3ejp6d7f3+/v75aWlvf39////wAAAP///wAAAAAAAAAAAAAAAAAAAAAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6M0I5RTczQjVDMDdBMTFFMTgxRjc4Mzk4M0Q3MjVFQzAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6M0I5RTczQjZDMDdBMTFFMTgxRjc4Mzk4M0Q3MjVFQzAiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozQjlFNzNCM0MwN0ExMUUxODFGNzgzOTgzRDcyNUVDMCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDozQjlFNzNCNEMwN0ExMUUxODFGNzgzOTgzRDcyNUVDMCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAEAAAkALAAAAAASABIAAARJMMlJq704661B+SAIXAVhnKhBFKSZnmuLImhslXPN3ibi+6pdBXc4IIpB2YkGE1IKAoL0ICUInJNCYMDtDgJYiScUGnHO6LQkAgA7);width:18px;cursor:pointer}.gantt_tree_icon.gantt_close{background-image:url(data:image/gif;base64,R0lGODlhEgASALMJAMrKyt3d3ejp6d7f3+/v75aWlvf39wAAAP///////wAAAAAAAAAAAAAAAAAAAAAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzY0QzNGM0VDMDdBMTFFMUE3MDlCNUM2QjU1NDA5RjgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzY0QzNGM0ZDMDdBMTFFMUE3MDlCNUM2QjU1NDA5RjgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozNjRDM0YzQ0MwN0ExMUUxQTcwOUI1QzZCNTU0MDlGOCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDozNjRDM0YzREMwN0ExMUUxQTcwOUI1QzZCNTU0MDlGOCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAEAAAkALAAAAAASABIAAARDMMlJq704661B+SAIXAVhnKhBFKSZnmv7wqxVzmpd3Uff5zKEUAi0uV4xm4DAbBIEOkohMKhaB4HoxBMKjTjgsFgSAQA7);width:18px;cursor:pointer}.gantt_tree_icon.gantt_blank{width:18px}.gantt_tree_icon.gantt_folder_open{background-image:url(data:image/gif;base64,R0lGODlhEgASAJECAJeXl7Gvrf///wAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTdDRDM3QzVDMDZEMTFFMUJGMzhFMDhCN0RGRjBGQ0YiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTdDRDM3QzZDMDZEMTFFMUJGMzhFMDhCN0RGRjBGQ0YiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1N0NEMzdDM0MwNkQxMUUxQkYzOEUwOEI3REZGMEZDRiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMzdDNEMwNkQxMUUxQkYzOEUwOEI3REZGMEZDRiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAEAAAIALAAAAAASABIAAAIzlI+pywcPm3mhWgkCsjBOvVkimElG9ZlCBlXd+2XjjLKg5GqoeZXqvsOQXK/ijUZTKVUFADs=)}.gantt_tree_icon.gantt_folder_closed{background-image:url(data:image/gif;base64,R0lGODlhEgASAJECAJeXl7Gvrf///wAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTAyMTU1RTNDMDZEMTFFMUJGNzZCRThBRkFCRjg4MTIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTAyMTU1RTRDMDZEMTFFMUJGNzZCRThBRkFCRjg4MTIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MDIxNTVFMUMwNkQxMUUxQkY3NkJFOEFGQUJGODgxMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1MDIxNTVFMkMwNkQxMUUxQkY3NkJFOEFGQUJGODgxMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAEAAAIALAAAAAASABIAAAIwlI+pywcPm3mhWgkCsjBOvVkimElG9ZlCuYIY6TYs+6bmHDO4igfdD3GNhheV0VQAADs=)}.gantt_tree_icon.gantt_file{background-image:url(data:image/gif;base64,R0lGODlhEgASAJECAJeXl7Gvrf///wAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NzkxQzI4RjZDMDZEMTFFMTgwRjhBQURDQzI3NDU3QUEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NzkxQzI4RjdDMDZEMTFFMTgwRjhBQURDQzI3NDU3QUEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3OTFDMjhGNEMwNkQxMUUxODBGOEFBRENDMjc0NTdBQSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3OTFDMjhGNUMwNkQxMUUxODBGOEFBRENDMjc0NTdBQSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAEAAAIALAAAAAASABIAAAIylI+pwN16QJiUQiFThRlJm3RRFYSlR5qXMKmXaMDuuMoyOi8n/e6xn8NMHETgh5RaKQsAOw==)}.gantt_grid_head_cell .gantt_sort{position:absolute;right:5px;top:8px;width:7px;height:13px;background-repeat:no-repeat;background-position:center center}.gantt_grid_head_cell .gantt_sort.gantt_asc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR4nGNgQAKGxib/GbABkIS7b8B/DAUwCRiGK0CXwFBAb1DfP/U/LszwHwi2X7qFgUEArBtdAVwCBmAKMCSQFSDzAWXXaOHsXeqkAAAAAElFTkSuQmCC)}.gantt_grid_head_cell .gantt_sort.gantt_desc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR42mNgQAL1/VP/M2ADIIntF2/9x1AAlrh0C47hCmA60DFYwX88gIFGwNDY5D8uDFbg7hvwHx2jmIBTAlkB0e4BAEjlaNtBWJPnAAAAAElFTkSuQmCC)}.gantt_inserted,.gantt_updated{font-weight:700}.gantt_deleted{text-decoration:line-through}.gantt_invalid{background-color:FFE0E0}.gantt_error{color:red}.dhtmlx_message_area{position:fixed;right:5px;width:250px;z-index:1000}.dhtmlx-info{min-width:120px;padding:4px 4px 4px 20px;font-family:Arial;z-index:10000;margin:5px;margin-bottom:10px;-webkit-transition:all .5s ease;-moz-transition:all .5s ease;-o-transition:all .5s ease;transition:all .5s ease}.dhtmlx-info.hidden{height:0;padding:0;border-width:0;margin:0;overflow:hidden}.dhtmlx_modal_box{overflow:hidden;display:inline-block;min-width:250px;width:250px;text-align:center;position:fixed;z-index:20000;box-shadow:3px 3px 3px rgba(0,0,0,.07);font-family:Arial;border-radius:6px;border:1px solid #cecece;background:#fff}.dhtmlx_popup_title{border-top-left-radius:6px;border-top-right-radius:6px;border-width:0}.dhtmlx_button,.dhtmlx_popup_button{border:1px solid #cecece;height:30px;line-height:30px;display:inline-block;margin:0 5px;border-radius:4px;background:#fff}.dhtmlx-info,.dhtmlx_popup_button,.dhtmlx_button{user-select:none;-webkit-user-select:none;-moz-user-select:-moz-none;cursor:pointer}.dhtmlx_popup_text{overflow:hidden}.dhtmlx_popup_controls{border-radius:6px;padding:10px}.dhtmlx_popup_button{min-width:100px}div.dhx_modal_cover{background-color:#000;cursor:default;filter:alpha(opacity=20);opacity:.2;position:fixed;z-index:19999;left:0;top:0;width:100%;height:100%;border:0;zoom:1}.dhtmlx-info img,.dhtmlx_modal_box img{float:left;margin-right:20px}.dhtmlx-alert-error,.dhtmlx-confirm-error{border:1px solid red}.dhtmlx_button input,.dhtmlx_popup_button div{border-radius:4px;font-size:14px;-moz-box-sizing:content-box;box-sizing:content-box;padding:0;margin:0;vertical-align:top}.dhtmlx_popup_title{color:#fff;text-shadow:1px 1px #000;height:40px;line-height:40px;font-size:20px}.dhtmlx_popup_text{margin:15px 15px 5px;font-size:14px;color:#000;min-height:30px;border-radius:6px}.dhtmlx-info,.dhtmlx-error{font-size:14px;color:#000;box-shadow:3px 3px 3px rgba(0,0,0,.07);padding:0;background-color:#FFF;border-radius:3px;border:1px solid #fff}.dhtmlx-info div{padding:5px 10px;background-color:#fff;border-radius:3px;border:1px solid #cecece}.dhtmlx-error{background-color:#d81b1b;border:1px solid #ff3c3c;box-shadow:3px 3px 3px rgba(0,0,0,.07)}.dhtmlx-error div{background-color:#d81b1b;border:1px solid #940000;color:#FFF}.gantt_grid div,.gantt_data_area div{-ms-touch-action:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.gantt_data_area{position:relative;overflow-x:hidden;overflow-y:hidden;-moz-user-select:-moz-none;-webkit-user-select:none;-user-select:none}.gantt_links_area{position:absolute;left:0;top:0}.gantt_task_content,.gantt_task_progress,.gantt_side_content{line-height:inherit;overflow:hidden;height:100%}.gantt_task_content{font-size:12px;color:#fff;width:100%;position:absolute;white-space:nowrap;text-align:center}.gantt_task_progress{text-align:center;z-index:0;background:#299cb4}.gantt_task_line{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;position:absolute;-moz-box-sizing:border-box;box-sizing:border-box;background-color:#3db9d3;border:1px solid #2898b0;-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.gantt_task_line.gantt_drag_move div{cursor:move}.gantt_side_content{position:absolute;white-space:nowrap;color:#6e6e6e;bottom:7px;font-size:11px}.gantt_side_content.gantt_left{right:100%;padding-right:15px}.gantt_side_content.gantt_right{left:100%;padding-left:15px}.gantt_side_content.gantt_link_crossing{bottom:8.75px}.gantt_task_link .gantt_line_wrapper,.gantt_link_arrow{position:absolute;cursor:pointer}.gantt_line_wrapper div{background-color:#ffa011}.gantt_task_link:hover .gantt_line_wrapper div{box-shadow:0 0 5px 0 #ffa011}.gantt_task_link div.gantt_link_arrow{background-color:transparent;border-style:solid;width:0;height:0}.gantt_link_control{position:absolute;width:13px;top:0}.gantt_link_control div{display:none;cursor:pointer;box-sizing:border-box;position:relative;top:50%;margin-top:-7.5px;vertical-align:middle;border:1px solid #929292;-webkit-border-radius:6.5px;-moz-border-radius:6.5px;border-radius:6.5px;height:13px;width:13px;background-color:#f0f0f0}.gantt_link_control div:hover{background-color:#fff}.gantt_link_control.task_left{left:-13px}.gantt_link_control.task_right{right:-13px}.gantt_task_line.gantt_selected .gantt_link_control div,.gantt_task_line:hover .gantt_link_control div{display:block}.gantt_link_target .gantt_link_control div{display:block}.gantt_link_source,.gantt_link_target{box-shadow:0 0 3px #3db9d3}.gantt_link_target.link_start_allow,.gantt_link_target.link_finish_allow{box-shadow:0 0 3px #ffbf5e}.gantt_link_target.link_start_deny,.gantt_link_target.link_finish_deny{box-shadow:0 0 3px #e87e7b}.link_start_allow .gantt_link_control.task_left div,.link_finish_allow .gantt_link_control.task_right div{background-color:#ffbf5e;border-color:#ffa011}.link_start_deny .gantt_link_control.task_left div,.link_finish_deny .gantt_link_control.task_right div{background-color:#e87e7b;border-color:#dd3e3a}.gantt_link_arrow_right{border-width:4px 0 4px 6px;border-color:transparent transparent transparent #ffa011;margin-top:-1px}.gantt_link_arrow_left{border-width:4px 6px 4px 0;margin-top:-1px;border-color:transparent #ffa011 transparent transparent}.gantt_link_arrow_top{border-width:0 4px 6px;border-color:transparent transparent #ffa011}.gantt_link_arrow_down{border-width:4px 6px 0 4px;border-color:#ffa011 transparent transparent}.gantt_task_drag,.gantt_task_progress_drag{cursor:w-resize;height:100%;display:none;position:absolute}.gantt_task_line.gantt_selected .gantt_task_progress_drag,.gantt_task_line:hover .gantt_task_progress_drag,.gantt_task_line.gantt_selected .gantt_task_drag,.gantt_task_line:hover .gantt_task_drag{display:block}.gantt_task_drag{width:6px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAACCAYAAAB7Xa1eAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QYDDjkw3UJvAwAAABRJREFUCNdj/P//PwM2wASl/6PTAKrrBf4+lD8LAAAAAElFTkSuQmCC);z-index:1;top:0}.gantt_task_drag.task_left{left:0}.gantt_task_drag.task_right{right:0}.gantt_task_progress_drag{height:8px;width:8px;bottom:-4px;margin-left:-4px;background-position:bottom;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MkY3Rjk0RUVDMkYzMTFFMkI1OThEQTA3ODU0OTkzMEEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MkY3Rjk0RUZDMkYzMTFFMkI1OThEQTA3ODU0OTkzMEEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyRjdGOTRFQ0MyRjMxMUUyQjU5OERBMDc4NTQ5OTMwQSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyRjdGOTRFREMyRjMxMUUyQjU5OERBMDc4NTQ5OTMwQSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PobPBzIAAADkSURBVHjaYpk2bRoDDsAExL1QdjEQ/8OmiAWHZk4gXqymqhQM4ty6fU8OSMUA8XdiDBAB4k0a6iqWRga6EKcwMQXduHlnL5DpB8Rv0J2JDFSA+JiOtgZcMwiA2CAxkBxUDVYDLEAKgIpV9XQ0MZwFEgPJAZnHoWpRDAgC4n2W5saiQKfjClQGkBxQDciL+6B6wAbkA/EqJwdrTkUFOQZCAKQGpBbIXA3SCzJggo+XK7OEuBgDsQCkFqgHrBfsBT5eHgZSAUwP2IBfv36TbABMDygdtK1Zv6UESLORaAbIhG6AAAMAKN8wE24DXWcAAAAASUVORK5CYII=);background-repeat:no-repeat;z-index:2}.gantt_link_tooltip{box-shadow:3px 3px 3px #888;background-color:#fff;border-left:1px dotted #cecece;border-top:1px dotted #cecece;font-family:Tahoma;font-size:8pt;color:#444;padding:6px;line-height:20px}.gantt_link_direction{height:0;border:0 none #ffa011;border-bottom-style:dashed;border-bottom-width:2px;transform-origin:0 0;-ms-transform-origin:0 0;-webkit-transform-origin:0 0;z-index:2;margin-left:1px;position:absolute}.gantt_grid_data .gantt_row.gantt_selected,.gantt_grid_data .gantt_row.odd.gantt_selected{background-color:#fff3a1}.gantt_task_row.gantt_selected{background-color:#fff3a1}.gantt_task_row.gantt_selected .gantt_task_cell{border-right-color:#ffec6e}.gantt_task_line.gantt_selected{box-shadow:0 0 5px #299cb4}.gantt_task_line.gantt_project.gantt_selected{box-shadow:0 0 5px #46ad51}.gantt_task_line.gantt_milestone{visibility:hidden;background-color:#d33daf;border:0 solid #61164f;box-sizing:content-box;-moz-box-sizing:content-box}.gantt_task_line.gantt_milestone div{visibility:visible}.gantt_task_line.gantt_milestone .gantt_task_content{background:inherit;border:inherit;border-width:1px;border-radius:inherit;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.dhx_unselectable,.dhx_unselectable div{-webkit-user-select:none;-moz-user-select:none;-moz-user-select:-moz-none}.dhx_cal_light{-webkit-tap-highlight-color:transparent;background:#fff;border-radius:6px;font-family:Arial;font-size:13px;border:1px solid #cecece;color:#6b6b6b;font-size:12px;position:absolute;z-index:10001;width:550px;height:250px;box-shadow:3px 3px 3px rgba(0,0,0,.07)}.dhx_cal_light_wide{width:650px}.dhx_cal_light select{font-family:Arial;border:1px solid #cecece;font-size:13px;padding:2px;margin:0}.dhx_cal_ltitle{padding:7px 10px;overflow:hidden;white-space:nowrap;-webkit-border-top-left-radius:6px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:6px;-webkit-border-bottom-right-radius:0;-moz-border-radius-topleft:6px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:0;border-top-left-radius:6px;border-bottom-left-radius:0;border-top-right-radius:6px;border-bottom-right-radius:0}.dhx_cal_ltitle span{white-space:nowrap}.dhx_cal_lsection{color:#727272;font-weight:700;padding:12px 0 5px 10px}.dhx_cal_lsection .dhx_fullday{float:right;margin-right:5px;font-size:12px;font-weight:400;line-height:20px;vertical-align:top;cursor:pointer}.dhx_cal_lsection{font-size:13px}.dhx_cal_ltext{padding:2px 10px;overflow:hidden}.dhx_cal_ltext textarea{overflow:auto;font-family:Arial;font-size:13px;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #cecece;height:100%;width:100%;outline:0!important;resize:none}.dhx_time{font-weight:700}.dhx_cal_light .dhx_title{padding-left:10px}.dhx_cal_larea{border:1px solid #cecece;border-left:0;border-right:0;background-color:#fff;overflow:hidden;height:1px}.dhx_btn_set{margin:10px 7px 5px 10px;padding:5px 15px 5px 10px;float:left;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border-width:0;border-color:#cecece;border-style:solid;height:32px;font-weight:700;background:#fff;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.dhx_btn_set div{float:left;font-size:13px;height:22px;line-height:22px;background-repeat:no-repeat;vertical-align:middle}.dhx_save_btn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTk1OUU5RDFDMzA0MTFFMkExMUZBQTdDNDAzOUE5RjMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTk1OUU5RDJDMzA0MTFFMkExMUZBQTdDNDAzOUE5RjMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxOTU5RTlDRkMzMDQxMUUyQTExRkFBN0M0MDM5QTlGMyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoxOTU5RTlEMEMzMDQxMUUyQTExRkFBN0M0MDM5QTlGMyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PjDroXYAAAEXSURBVHjaYvz//z8DJYCRUgPIAUxAbAnEHiAHMIBcQCwGaRYXF3e6evXqoffv39/dv38/CymaGSUkJBzv3LlzCsj///fv3wdAihkkIQnEvkAshU8zLy+v7a1bt06ANP/79+87kDIAy505cybq06dPr3p7ezuwGQLTfOPGjWP/ESAZLg8kPKBO+g01RBJNszWyZqC6uSgWgIg/f/4shxnS2dnZBjMEqNkSFGBImi8CKTYMA4BYCGjIczRDHC5dunQQSfN7IKWI4UUkjjdMMdCwnw8ePLjwHxV4Yw1gZA5Q47z/2EELzhhCE+ABGvIQWSeQvwcU38QaAML2wHj+C/X3MyAlijeB4ZBoBOIPQGxJKIVSnBsBAgwABddBclWfcZUAAAAASUVORK5CYII=);margin-top:2px;width:21px}.dhx_cancel_btn{margin-top:2px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDkzMDA3MzlDMzA0MTFFMjg2QTVFMzFEQzgwRkJERDYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDkzMDA3M0FDMzA0MTFFMjg2QTVFMzFEQzgwRkJERDYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowOTMwMDczN0MzMDQxMUUyODZBNUUzMURDODBGQkRENiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowOTMwMDczOEMzMDQxMUUyODZBNUUzMURDODBGQkRENiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmYuYOUAAAEdSURBVHjaYvz//z8DJYAFXWDlypU8QKoIiD2A2AwqfAqIdwBxX3h4+Bdk9YzILgBqtgdS84FYEYeF94E4EWjIQZgAE5LmQCB1AKoZZKMPEAtAMYh9GSp3AKjWD8UFQAEhIPshEIOc3wHENUBb/qJ57SyQMoJyPwKxElDNO1gYFEE17wMKVmIJlzNQzeegrjaA6qmBecEbSvfh0GwMxGeBhoPoemQ9MAO0kEIbl2YTqPAFKK2IbMB3AjabYIkRZmQD7kNpMyI0G0PpO8gGbIUFJj7NQDk2INWIrIcJKfBAKcwJqvkcDs0TgFgXGo19KCkRmpDWQdWDEk0NUoCBoq0FqhkE/IEWbKJKUmZEz43QzFSKIzN1481M5ACAAAMAlfl/lCwRpagAAAAASUVORK5CYII=);width:20px}.dhx_delete_btn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjFENzI3NUNDMzA0MTFFMjhBNjJGQTc3MUIyQzYzNEYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjFENzI3NURDMzA0MTFFMjhBNjJGQTc3MUIyQzYzNEYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyMUQ3Mjc1QUMzMDQxMUUyOEE2MkZBNzcxQjJDNjM0RiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyMUQ3Mjc1QkMzMDQxMUUyOEE2MkZBNzcxQjJDNjM0RiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmUD0gAAAABvSURBVHjaYvz//z8DIyMjAxYQicReji4J0ofKQNP8HwmgGQbXB8IsWGwDSSwDuioKjY9uBthVjFAXYHUGAQA2kYmBUoAUBpGk0LAwgBvwH+YX4mkwptgLowYMRgOITUyYKRFIN/wnDjQgJySAAAMApryKzL8wjfUAAAAASUVORK5CYII=);margin-top:2px;width:20px}.dhx_cal_cover{width:100%;height:100%;position:absolute;z-index:10000;top:0;left:0;background-color:#000;opacity:.1;filter:alpha(opacity=10)}.dhx_custom_button{padding:0 3px;font-family:Arial;font-size:13px;font-weight:400;margin-right:5px;margin-top:0;cursor:pointer}.dhx_custom_button div{cursor:pointer;float:left;height:21px;line-height:21px;vertical-align:middle}.dhx_cal_light_wide{width:580px;padding:2px 4px}.dhx_cal_light_wide .dhx_cal_larea{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #cecece}.dhx_cal_light_wide .dhx_cal_lsection{border:0;float:left;text-align:right;width:80px;height:20px;padding:5px 10px 0 0}.dhx_cal_light_wide .dhx_wrap_section{position:relative;padding:10px 0;overflow:hidden;border-bottom:1px solid #ebebeb}.dhx_cal_light_wide .dhx_section_time{overflow:hidden;padding-top:2px!important;padding-right:0;height:20px!important}.dhx_cal_light_wide .dhx_cal_ltext{padding-right:0}.dhx_cal_light_wide .dhx_cal_larea{padding:0 10px;width:100%}.dhx_cal_light_wide .dhx_section_time{background:transparent}.dhx_cal_light_wide .dhx_cal_checkbox label{padding-left:0}.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday{float:none;margin-right:0;font-weight:700;cursor:pointer}.dhx_cal_light_wide .dhx_custom_button{position:absolute;top:0;right:0;margin-top:2px}.dhx_cal_light_wide .dhx_repeat_right{margin-right:55px}.dhx_cal_light_wide.dhx_cal_light_full{width:738px}.dhx_cal_wide_checkbox input{margin-top:8px;margin-left:14px}.dhx_cal_light input{font-size:13px}.dhx_custom_button{float:right;height:21px;width:90px;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px}.dhx_section_time{background-color:#fff;white-space:nowrap;padding:2px 10px 5px;padding-top:2px!important}.dhx_section_time .dhx_time_selects{float:left;height:25px}.dhx_section_time .dhx_time_selects select{height:23px;padding:2px;border:1px solid #cecece}.dhx_gantt_duration{width:100px;height:23px;float:left;white-space:nowrap;margin-left:20px;line-height:23px}.dhx_gantt_duration .dhx_gantt_duration_value,.dhx_gantt_duration .dhx_gantt_duration_dec,.dhx_gantt_duration .dhx_gantt_duration_inc{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;vertical-align:top;height:100%;border:1px solid #cecece}.dhx_gantt_duration .dhx_gantt_duration_value{width:40px;padding:3px 4px;border-left-width:0;border-right-width:0}.dhx_gantt_duration .dhx_gantt_duration_dec,.dhx_gantt_duration .dhx_gantt_duration_inc{width:20px;padding:1px;padding-bottom:3px;background:#fff}.dhx_gantt_duration .dhx_gantt_duration_dec{-moz-border-top-left-radius:4px;-moz-border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.dhx_gantt_duration .dhx_gantt_duration_inc{margin-right:4px;-moz-border-top-right-radius:4px;-moz-border-bottom-right-radius:4px;-webkit-border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:4px}.dhx_cal_quick_info{border:1px solid #cecece;border-radius:6px;position:absolute;z-index:300;box-shadow:3px 3px 3px rgba(0,0,0,.07);background-color:#fff;width:300px;transition:left .5s ease,right .5s;-moz-transition:left .5s ease,right .5s;-webkit-transition:left .5s ease,right .5s;-o-transition:left .5s ease,right .5s}.dhx_no_animate{transition:none;-moz-transition:none;-webkit-transition:none;-o-transition:none}.dhx_cal_quick_info.dhx_qi_left .dhx_qi_big_icon{float:right}.dhx_cal_qi_title{-webkit-border-top-left-radius:6px;-webkit-border-bottom-left-radius:0;-webkit-border-top-right-radius:6px;-webkit-border-bottom-right-radius:0;-moz-border-radius-topleft:6px;-moz-border-radius-bottomleft:0;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:0;border-top-left-radius:6px;border-bottom-left-radius:0;border-top-right-radius:6px;border-bottom-right-radius:0;padding:5px 0 8px 12px;color:#454545;background-color:#fff;border-bottom:1px solid #cecece}.dhx_cal_qi_tdate{font-size:14px;font-weight:700}.dhx_cal_qi_tcontent{font-size:13px}.dhx_cal_qi_content{padding:16px 8px;font-size:13px;color:#454545;overflow:hidden}.dhx_cal_qi_controls{-webkit-border-top-left-radius:0;-webkit-border-bottom-left-radius:6px;-webkit-border-top-right-radius:0;-webkit-border-bottom-right-radius:6px;-moz-border-radius-topleft:0;-moz-border-radius-bottomleft:6px;-moz-border-radius-topright:0;-moz-border-radius-bottomright:6px;border-top-left-radius:0;border-bottom-left-radius:6px;border-top-right-radius:0;border-bottom-right-radius:6px;padding-left:7px}.dhx_cal_qi_controls .dhx_menu_icon{margin-top:6px;background-repeat:no-repeat}.dhx_cal_qi_controls .dhx_menu_icon.icon_edit{width:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH3QYFCjI5ZQj5bAAAAFNJREFUOMvt0zEOACAIA0DkwTymH8bJTRTKZGJXyaWEKPKTCQAH4Ls37cItcDUzsxHNDLZNhCq7Gt1wh9ErV7EjyGAhyGLphlnsClWuS32rn0czAV+vNGrM/LBtAAAAAElFTkSuQmCC)}.dhx_cal_qi_controls .dhx_menu_icon.icon_delete{width:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjFENzI3NUNDMzA0MTFFMjhBNjJGQTc3MUIyQzYzNEYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjFENzI3NURDMzA0MTFFMjhBNjJGQTc3MUIyQzYzNEYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyMUQ3Mjc1QUMzMDQxMUUyOEE2MkZBNzcxQjJDNjM0RiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyMUQ3Mjc1QkMzMDQxMUUyOEE2MkZBNzcxQjJDNjM0RiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmUD0gAAAABvSURBVHjaYvz//z8DIyMjAxYQicReji4J0ofKQNP8HwmgGQbXB8IsWGwDSSwDuioKjY9uBthVjFAXYHUGAQA2kYmBUoAUBpGk0LAwgBvwH+YX4mkwptgLowYMRgOITUyYKRFIN/wnDjQgJySAAAMApryKzL8wjfUAAAAASUVORK5CYII=)}.dhx_qi_big_icon{font-size:13px;border-radius:4px;font-weight:700;background:#fff;margin:5px 9px 8px 0;min-width:60px;line-height:32px;vertical-align:middle;padding:0 10px 0 5px;cursor:pointer;border:1px solid #cecece}.dhx_cal_qi_controls div{float:left;height:32px;text-align:center;line-height:32px}.gantt_tooltip{box-shadow:3px 3px 3px rgba(0,0,0,.07);background-color:#fff;border-left:1px solid rgba(0,0,0,.07);border-top:1px solid rgba(0,0,0,.07);font-family:Arial;font-size:8pt;color:#454545;padding:10px;position:absolute;z-index:500}.gantt_noselect{-moz-user-select:-moz-none;-webkit-user-select:none;-user-select:none}.gantt_drag_marker{position:absolute;font-family:Arial;font-size:13px}.gantt_drag_marker .gantt_tree_indent,.gantt_drag_marker .gantt_tree_icon.gantt_blank,.gantt_drag_marker .gantt_tree_icon.gantt_open,.gantt_drag_marker .gantt_tree_icon.gantt_close{display:none}.gantt_drag_marker,.gantt_drag_marker .gantt_row.odd{background-color:#fff}.gantt_drag_marker .gantt_row{border-left:1px solid #d2d2d2;border-top:1px solid #d2d2d2}.gantt_drag_marker .gantt_cell{border-color:#d2d2d2}.gantt_row.gantt_over,.gantt_task_row.gantt_over{background-color:#0070fe}.gantt_row.gantt_transparent .gantt_cell{opacity:.7}.gantt_task_row.gantt_transparent{background-color:#f8fdfd}.dhtmlx_popup_button.dhtmlx_delete_button{background:#3db9d3;text-shadow:0 -1px 0 #248a9f;color:#fff;font-weight:700;border-width:0} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/dhtmlxgantt.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/dhtmlxgantt.js deleted file mode 100755 index af5bd90e7e..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/dhtmlxgantt.js +++ /dev/null @@ -1,8378 +0,0 @@ -/* -dhtmlxGantt v.2.1.1 Standard This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. (c) Dinamenta, UAB. -*/ -if (!window.dhtmlx) { - dhtmlx = function(obj){ - for (var a in obj) dhtmlx[a]=obj[a]; - return dhtmlx; //simple singleton - }; -} -dhtmlx.extend_api=function(name,map,ext){ - var t = window[name]; - if (!t) return; //component not defined - window[name]=function(obj){ - var that; - - if (obj && typeof obj == "object" && !obj.tagName){ - that = t.apply(this,(map._init?map._init(obj):arguments)); - //global settings - for (var a in dhtmlx) - if (map[a]) this[map[a]](dhtmlx[a]); - //local settings - for (var a in obj){ - if (map[a]) this[map[a]](obj[a]); - else if (a.indexOf("on")===0){ - this.attachEvent(a,obj[a]); - } - } - } else - that = t.apply(this,arguments); - if (map._patch) map._patch(this); - return that||this; - }; - window[name].prototype=t.prototype; - if (ext) - dhtmlXHeir(window[name].prototype,ext); -}; - -dhtmlxAjax={ - get:function(url,callback){ - var t=new dtmlXMLLoaderObject(true); - t.async=(arguments.length<3); - t.waitCall=callback; - t.loadXML(url); - return t; - }, - post:function(url,post,callback){ - var t=new dtmlXMLLoaderObject(true); - t.async=(arguments.length<4); - t.waitCall=callback; - t.loadXML(url,true,post); - return t; - }, - getSync:function(url){ - return this.get(url,null,true); - }, - postSync:function(url,post){ - return this.post(url,post,null,true); - } -}; - -/** - * @desc: xmlLoader object - * @type: private - * @param: funcObject - xml parser function - * @param: object - jsControl object - * @param: async - sync/async mode (async by default) - * @param: rSeed - enable/disable random seed ( prevent IE caching) - * @topic: 0 - */ -function dtmlXMLLoaderObject(funcObject, dhtmlObject, async, rSeed){ - this.xmlDoc=""; - - if (typeof (async) != "undefined") - this.async=async; - else - this.async=true; - - this.onloadAction=funcObject||null; - this.mainObject=dhtmlObject||null; - this.waitCall=null; - this.rSeed=rSeed||false; - return this; -} - -dtmlXMLLoaderObject.count = 0; - -/** - * @desc: xml loading handler - * @type: private - * @param: dtmlObject - xmlLoader object - * @topic: 0 - */ -dtmlXMLLoaderObject.prototype.waitLoadFunction=function(dhtmlObject){ - var once = true; - this.check=function (){ - if ((dhtmlObject)&&(dhtmlObject.onloadAction)){ - if ((!dhtmlObject.xmlDoc.readyState)||(dhtmlObject.xmlDoc.readyState == 4)){ - if (!once) - return; - - once=false; //IE 5 fix - dtmlXMLLoaderObject.count++; - if (typeof dhtmlObject.onloadAction == "function") - dhtmlObject.onloadAction(dhtmlObject.mainObject, null, null, null, dhtmlObject); - - if (dhtmlObject.waitCall){ - dhtmlObject.waitCall.call(this,dhtmlObject); - dhtmlObject.waitCall=null; - } - } - } - }; - return this.check; -}; - -/** - * @desc: return XML top node - * @param: tagName - top XML node tag name (not used in IE, required for Safari and Mozilla) - * @type: private - * @returns: top XML node - * @topic: 0 - */ -dtmlXMLLoaderObject.prototype.getXMLTopNode=function(tagName, oldObj){ - var z; - - if (this.xmlDoc.responseXML){ - var temp = this.xmlDoc.responseXML.getElementsByTagName(tagName); - if(temp.length === 0 && tagName.indexOf(":")!=-1) - var temp = this.xmlDoc.responseXML.getElementsByTagName((tagName.split(":"))[1]); - z = temp[0]; - } else - z = this.xmlDoc.documentElement; - - if (z){ - this._retry=false; - return z; - } - - if (!this._retry&&_isIE){ - this._retry=true; - var oldObj = this.xmlDoc; - this.loadXMLString(this.xmlDoc.responseText.replace(/^[\s]+/,""), true); - return this.getXMLTopNode(tagName, oldObj); - } - - dhtmlxError.throwError("LoadXML", "Incorrect XML", [ - (oldObj||this.xmlDoc), - this.mainObject - ]); - - return document.createElement("DIV"); -}; - -/** - * @desc: load XML from string - * @type: private - * @param: xmlString - xml string - * @topic: 0 - */ -dtmlXMLLoaderObject.prototype.loadXMLString=function(xmlString, silent){ - - if (!_isIE){ - var parser = new DOMParser(); - this.xmlDoc=parser.parseFromString(xmlString, "text/xml"); - } else { - this.xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); - this.xmlDoc.async=this.async; - this.xmlDoc.onreadystatechange = function(){}; - this.xmlDoc["loadXM"+"L"](xmlString); - } - - if (silent) - return; - - if (this.onloadAction) - this.onloadAction(this.mainObject, null, null, null, this); - - if (this.waitCall){ - this.waitCall(); - this.waitCall=null; - } -}; -/** - * @desc: load XML - * @type: private - * @param: filePath - xml file path - * @param: postMode - send POST request - * @param: postVars - list of vars for post request - * @topic: 0 - */ -dtmlXMLLoaderObject.prototype.loadXML=function(filePath, postMode, postVars, rpc){ - if (this.rSeed) - filePath+=((filePath.indexOf("?") != -1) ? "&" : "?")+"a_dhx_rSeed="+(new Date()).valueOf(); - this.filePath=filePath; - - 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(postMode ? "POST" : "GET", filePath, this.async); - - if (rpc){ - this.xmlDoc.setRequestHeader("User-Agent", "dhtmlxRPC v0.1 ("+navigator.userAgent+")"); - this.xmlDoc.setRequestHeader("Content-type", "text/xml"); - } - - else if (postMode) - this.xmlDoc.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); - - this.xmlDoc.setRequestHeader("X-Requested-With","XMLHttpRequest"); - this.xmlDoc.send(null||postVars); - - if (!this.async) - (new this.waitLoadFunction(this))(); -}; -/** - * @desc: destructor, cleans used memory - * @type: private - * @topic: 0 - */ -dtmlXMLLoaderObject.prototype.destructor=function(){ - this._filterXPath = null; - this._getAllNamedChilds = null; - this._retry = null; - this.async = null; - this.rSeed = null; - this.filePath = null; - this.onloadAction = null; - this.mainObject = null; - this.xmlDoc = null; - this.doXPath = null; - this.doXPathOpera = null; - this.doXSLTransToObject = null; - this.doXSLTransToString = null; - this.loadXML = null; - this.loadXMLString = null; - // this.waitLoadFunction = null; - this.doSerialization = null; - this.xmlNodeToJSON = null; - this.getXMLTopNode = null; - this.setXSLParamValue = null; - return null; -}; - -dtmlXMLLoaderObject.prototype.xmlNodeToJSON = function(node){ - var t={}; - for (var i=0; i-1) - _isChrome=true; - -if ((navigator.userAgent.indexOf('Safari') != -1)||(navigator.userAgent.indexOf('Konqueror') != -1)){ - _KHTMLrv = parseFloat(navigator.userAgent.substr(navigator.userAgent.indexOf('Safari')+7, 5)); - - if (_KHTMLrv > 525){ //mimic FF behavior for Safari 3.1+ - _isFF=true; - _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 || navigator.appVersion.indexOf("MSIE 9.0")!= -1 || navigator.appVersion.indexOf("MSIE 10.0")!= -1 ) && document.compatMode != "BackCompat"){ - _isIE=8; - } -} else if (navigator.appName == 'Netscape' && navigator.userAgent.indexOf("Trident") != -1){ - //ie11 - _isIE=8; -} else { - _isFF=true; - _FFrv = parseFloat(navigator.userAgent.split("rv:")[1]); -} - - -//multibrowser Xpath processor -dtmlXMLLoaderObject.prototype.doXPath=function(xpathExp, docObj, namespace, result_type){ - if (_isKHTML || (!_isIE && !window.XPathResult)) - return this.doXPathOpera(xpathExp, docObj); - - if (_isIE){ //IE - if (!docObj) - if (!this.xmlDoc.nodeName) - docObj=this.xmlDoc.responseXML; - else - docObj=this.xmlDoc; - - if (!docObj) - dhtmlxError.throwError("LoadXML", "Incorrect XML", [ - (docObj||this.xmlDoc), - this.mainObject - ]); - - if (namespace) - docObj.setProperty("SelectionNamespaces", "xmlns:xsl='"+namespace+"'"); // - - if (result_type == 'single'){ - return docObj.selectSingleNode(xpathExp); - } - else { - return docObj.selectNodes(xpathExp)||new Array(0); - } - } else { //Mozilla - var nodeObj = docObj; - - if (!docObj){ - if (!this.xmlDoc.nodeName){ - docObj=this.xmlDoc.responseXML; - } - else { - docObj=this.xmlDoc; - } - } - - if (!docObj) - dhtmlxError.throwError("LoadXML", "Incorrect XML", [ - (docObj||this.xmlDoc), - this.mainObject - ]); - - if (docObj.nodeName.indexOf("document") != -1){ - nodeObj=docObj; - } - else { - nodeObj=docObj; - docObj=docObj.ownerDocument; - } - var retType = XPathResult.ANY_TYPE; - - if (result_type == 'single') - retType=XPathResult.FIRST_ORDERED_NODE_TYPE; - var rowsCol = []; - var col = docObj.evaluate(xpathExp, nodeObj, function(pref){ - return namespace; - }, retType, null); - - if (retType == XPathResult.FIRST_ORDERED_NODE_TYPE){ - return col.singleNodeValue; - } - var thisColMemb = col.iterateNext(); - - while (thisColMemb){ - rowsCol[rowsCol.length]=thisColMemb; - thisColMemb=col.iterateNext(); - } - return rowsCol; - } -}; - -function _dhtmlxError(type, name, params){ - if (!this.catches) - this.catches=[]; - - return this; -} - -_dhtmlxError.prototype.catchError=function(type, func_name){ - this.catches[type]=func_name; -}; - -_dhtmlxError.prototype.throwError=function(type, name, params){ - if (this.catches[type]) - return this.catches[type](type, name, params); - - if (this.catches["ALL"]) - return this.catches["ALL"](type, name, params); - - window.alert("Error type: "+arguments[0]+"\nDescription: "+arguments[1]); - return null; -}; - -window.dhtmlxError=new _dhtmlxError(); - - -//opera fake, while 9.0 not released -//multibrowser Xpath processor -dtmlXMLLoaderObject.prototype.doXPathOpera=function(xpathExp, docObj){ - //this is fake for Opera - var z = xpathExp.replace(/[\/]+/gi, "/").split('/'); - var obj = null; - var i = 1; - - if (!z.length) - return []; - - if (z[0] == ".") - obj=[docObj]; else if (z[0] === ""){ - obj=(this.xmlDoc.responseXML||this.xmlDoc).getElementsByTagName(z[i].replace(/\[[^\]]*\]/g, "")); - i++; - } else - return []; - - for (i; i < z.length; i++)obj=this._getAllNamedChilds(obj, z[i]); - - if (z[i-1].indexOf("[") != -1) - obj=this._filterXPath(obj, z[i-1]); - return obj; -}; - -dtmlXMLLoaderObject.prototype._filterXPath=function(a, b){ - var c = []; - var b = b.replace(/[^\[]*\[\@/g, "").replace(/[\[\]\@]*/g, ""); - - for (var i = 0; i < a.length; i++) - if (a[i].getAttribute(b)) - c[c.length]=a[i]; - - return c; -}; - -dtmlXMLLoaderObject.prototype._getAllNamedChilds=function(a, b){ - var c = []; - - if (_isKHTML) - b=b.toUpperCase(); - - for (var i = 0; i < a.length; i++)for (var j = 0; j < a[i].childNodes.length; j++){ - if (_isKHTML){ - if (a[i].childNodes[j].tagName&&a[i].childNodes[j].tagName.toUpperCase() == b) - c[c.length]=a[i].childNodes[j]; - } - - else if (a[i].childNodes[j].tagName == b) - c[c.length]=a[i].childNodes[j]; - } - - return c; -}; - -function dhtmlXHeir(a, b){ - for (var c in b) - if (typeof (b[c]) == "function") - a[c]=b[c]; - return a; -} - -function dhtmlxEvent(el, event, handler){ - if (el.addEventListener) - el.addEventListener(event, handler, false); - - else if (el.attachEvent) - el.attachEvent("on"+event, handler); -} - -//============= XSL Extension =================================== - -dtmlXMLLoaderObject.prototype.xslDoc=null; -dtmlXMLLoaderObject.prototype.setXSLParamValue=function(paramName, paramValue, xslDoc){ - if (!xslDoc) - xslDoc=this.xslDoc; - - if (xslDoc.responseXML) - xslDoc=xslDoc.responseXML; - var item = - this.doXPath("/xsl:stylesheet/xsl:variable[@name='"+paramName+"']", xslDoc, - "http:/\/www.w3.org/1999/XSL/Transform", "single"); - - if (item) - item.firstChild.nodeValue=paramValue; -}; - -dtmlXMLLoaderObject.prototype.doXSLTransToObject=function(xslDoc, xmlDoc){ - if (!xslDoc) - xslDoc=this.xslDoc; - - if (xslDoc.responseXML) - xslDoc=xslDoc.responseXML; - - if (!xmlDoc) - xmlDoc=this.xmlDoc; - - if (xmlDoc.responseXML) - xmlDoc=xmlDoc.responseXML; - - - var result; - //Mozilla - if (!_isIE){ - if (!this.XSLProcessor){ - this.XSLProcessor=new XSLTProcessor(); - this.XSLProcessor.importStylesheet(xslDoc); - } - result = this.XSLProcessor.transformToDocument(xmlDoc); - } else { - result = new ActiveXObject("Msxml2.DOMDocument.3.0"); - try{ - xmlDoc.transformNodeToObject(xslDoc, result); - }catch(e){ - result = xmlDoc.transformNode(xslDoc); - } - } - return result; -}; - -dtmlXMLLoaderObject.prototype.doXSLTransToString=function(xslDoc, xmlDoc){ - var res = this.doXSLTransToObject(xslDoc, xmlDoc); - if(typeof(res)=="string") - return res; - return this.doSerialization(res); -}; - -dtmlXMLLoaderObject.prototype.doSerialization=function(xmlDoc){ - if (!xmlDoc) - xmlDoc=this.xmlDoc; - if (xmlDoc.responseXML) - xmlDoc=xmlDoc.responseXML; - if (!_isIE){ - var xmlSerializer = new XMLSerializer(); - return xmlSerializer.serializeToString(xmlDoc); - } else - return xmlDoc.xml; -}; - -/** - * @desc: - * @type: private - */ -dhtmlxEventable=function(obj){ - 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)); //return ID (event name & event ID) - }; - 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]){ - 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){ - var list = id.split(':'); //get EventName and ID - this[list[0]].removeEvent(list[1]); //remove event - } - }; - obj.detachAllEvents = function(){ - for (var name in this){ - if (name.indexOf("ev_")===0){ - this.detachEvent(name); - this[name] = null; - } - } - }; - obj = null; -}; -if(!window.dhtmlx) - window.dhtmlx = {}; - -(function(){ - var _dhx_msg_cfg = null; - function callback(config, result){ - var usercall = config.callback; - modality(false); - config.box.parentNode.removeChild(config.box); - _dhx_msg_cfg = config.box = null; - if (usercall) - usercall(result); - } - function modal_key(e){ - if (_dhx_msg_cfg){ - e = e||event; - var code = e.which||event.keyCode; - if (dhtmlx.message.keyboard){ - if (code == 13 || code == 32) - callback(_dhx_msg_cfg, true); - if (code == 27) - callback(_dhx_msg_cfg, false); - } - if (e.preventDefault) - e.preventDefault(); - return !(e.cancelBubble = true); - } - } - if (document.attachEvent) - document.attachEvent("onkeydown", modal_key); - else - document.addEventListener("keydown", modal_key, true); - - function modality(mode){ - if(!modality.cover){ - modality.cover = document.createElement("DIV"); - //necessary for IE only - modality.cover.onkeydown = modal_key; - modality.cover.className = "dhx_modal_cover"; - document.body.appendChild(modality.cover); - } - var height = document.body.scrollHeight; - modality.cover.style.display = mode?"inline-block":"none"; - } - - function button(text, result){ - var button_css = "dhtmlx_"+text.toLowerCase().replace(/ /g, "_")+"_button"; // dhtmlx_ok_button, dhtmlx_click_me_button - return "
"+text+"
"; - } - - function info(text){ - if (!t.area){ - t.area = document.createElement("DIV"); - t.area.className = "dhtmlx_message_area"; - t.area.style[t.position]="5px"; - document.body.appendChild(t.area); - } - - t.hide(text.id); - var message = document.createElement("DIV"); - message.innerHTML = "
"+text.text+"
"; - message.className = "dhtmlx-info dhtmlx-" + text.type; - message.onclick = function(){ - t.hide(text.id); - text = null; - }; - - if (t.position == "bottom" && t.area.firstChild) - t.area.insertBefore(message,t.area.firstChild); - else - t.area.appendChild(message); - - if (text.expire > 0) - t.timers[text.id]=window.setTimeout(function(){ - t.hide(text.id); - }, text.expire); - - t.pull[text.id] = message; - message = null; - - return text.id; - } - function _boxStructure(config, ok, cancel){ - var box = document.createElement("DIV"); - box.className = " dhtmlx_modal_box dhtmlx-"+config.type; - box.setAttribute("dhxbox", 1); - - var inner = ''; - - if (config.width) - box.style.width = config.width; - if (config.height) - box.style.height = config.height; - if (config.title) - inner+='
'+config.title+'
'; - inner+='
'+(config.content?'':config.text)+'
'; - if (ok) - inner += button(config.ok || "OK", true); - if (cancel) - inner += button(config.cancel || "Cancel", false); - if (config.buttons){ - for (var i=0; i this.config.sensitivity) { - // real drag starts here, - // when user moves mouse at first time after onmousedown - this.config.started = true; - this.config.ignore = false; - if (this.callEvent("onBeforeDragStart", [obj,e]) === false) { - this.config.ignore = true; - return true; - } - - // initialize dnd marker - var marker = this.config.marker = document.createElement("div"); - marker.className = "gantt_drag_marker"; - marker.innerHTML = "Dragging object"; - document.body.appendChild(marker); - - this.callEvent("onAfterDragStart", [obj,e]); - } else - this.config.ignore = true; - } - if (!this.config.ignore) { - e.pos = this.getPosition(e); - this.config.marker.style.left = e.pos.x + "px"; - this.config.marker.style.top = e.pos.y + "px"; - this.callEvent("onDragMove", [obj,e]); - } - }, - - dragEnd: function(obj) { - if (this.config.marker) { - this.config.marker.parentNode.removeChild(this.config.marker); - this.config.marker = null; - this.callEvent("onDragEnd", []); - } - document.body.className = document.body.className.replace(" gantt_noselect", ""); - }, - - getPosition: function(e) { - var x = 0, y = 0; - e = e || window.event; - if (e.pageX || e.pageY) { - x = e.pageX; - y = e.pageY; - } else if (e.clientX || e.clientY) { - x = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft; - y = e.clientY + document.body.scrollTop + document.documentElement.scrollTop; - } - return { x:x, y:y }; - } -}; -gantt._init_grid = function() { - this._click.gantt_close = dhtmlx.bind(function(e, id, trg) { - this.close(id); - }, this); - this._click.gantt_open = dhtmlx.bind(function(e, id, trg) { - this.open(id); - }, this); - - - this._click.gantt_row = dhtmlx.bind(function(e, id, trg) { - if (id!==null) { - var el = this.getTaskNode(id); - var left = Math.max(el.offsetLeft - this.config.task_scroll_offset, 0); - this.scrollTo(left); - this.callEvent("onTaskRowClick", [id, trg]); - } - }, this); - - this._click.gantt_grid_head_cell = dhtmlx.bind(function(e, id, trg) { - var column = trg.getAttribute("column_id"); - - if(!this.callEvent("onGridHeaderClick", [column, e])) - return; - - if (column == "add") { - this._click.gantt_add(e, this.config.root_id); - } else if (this.config.sort){ - var sort = (this._sort && this._sort.direction && this._sort.name == column) ? this._sort.direction : "desc"; - // invert sort direction - sort = (sort == "desc") ? "asc" : "desc"; - this._sort = { - name: column, - direction: sort - }; - this._render_grid_header(); - - this.sort(column, sort == "desc"); - } - }, this); - - if(!this.config.sort && this.config.order_branch) { - this._init_dnd(); - } - - this._click.gantt_add = dhtmlx.bind(function(e, id, trg) { - if(this.config.readonly) return; - - var parent = id ? this.getTask(id) : false, - startDate = ''; - if(parent){ - startDate = parent.start_date; - }else{ - var first = this._order[0]; - startDate = first ? this.getTask(first).start_date : this.getState().min_date; - } - - - if(parent) - parent.$open = true; - - var item = { text:gantt.locale.labels.new_task, start_date:this.templates.xml_format(startDate), duration: 1, progress: 0, parent: id }; - item.id = dhtmlx.uid(); - this.callEvent("onTaskCreated", [item]); - - if (this.config.details_on_create){ - item.$new = true; - this._pull[item.id] = this._init_task(item); - - this._add_branch(item); - item.$level = this._item_level(item); - this.selectTask(item.id); - this.refreshData(); - this.showLightbox(item.id); - }else{ - this.addTask(item); - - this.showTask(item.id); - this.selectTask(item.id); - } - - - }, this); - - -}; - -gantt._render_grid = function(){ - if(this._is_grid_visible()){ - this._calc_grid_width(); - this._render_grid_header(); - } -}; - -gantt._calc_grid_width = function() { - if (this.config.autofit) { - var columns = this.config.columns; - var cols_width = 0; - var unknown = []; - var width = []; - for (var i = 0; i < columns.length; i++) { - var v = parseInt(columns[i].width, 10); - if (window.isNaN(v)) { - v = 50; - unknown.push(i); - } - width[i] = v; - cols_width += v; - } - var diff = this._get_grid_width() - cols_width; - // TODO: logic may be improved for proportional changing of width - var step = diff/(unknown.length > 0 ? unknown.length : (width.length > 0 ? width.length : 1)); - if (unknown.length > 0) { - // there are several columns with undefined width - var delta = diff/(unknown.length ? unknown.length : 1); - for (var i = 0; i < unknown.length; i++) { - var index = unknown[i]; - width[index] += delta; - } - } else { - // delta must be added for all columns - var delta = diff/(width.length ? width.length : 1); - for (var i = 0; i < width.length; i++) - width[i] += delta; - } - - for (var i = 0; i < width.length; i++) { - columns[i].width = width[i]; - } - } -}; - -gantt._render_grid_header = function() { - var columns = this.config.columns; - var cells = []; - var width = 0, - labels = this.locale.labels; - - var lineHeigth = this.config.scale_height-2; - - for (var i = 0; i < columns.length; i++) { - var last = i == columns.length-1; - var col = columns[i]; - if (last && this._get_grid_width() > width+col.width) - col.width = this._get_grid_width() - width; - width += col.width; - var sort = (this._sort && col.name == this._sort.name) ? ("
") : ""; - var cssClass = ["gantt_grid_head_cell", - ("gantt_grid_head_" + col.name), - (last ? "gantt_last_cell" : ""), - this.templates.grid_header_class(col.name, col)].join(" "); - - var style = "width:" + (col.width-(last?1:0)) + "px;"; - var label = (col.label || labels["column_" + col.name]); - label = label || ""; - var cell = "
" + label + sort + "
"; - cells.push(cell); - } - this.$grid_scale.style.height = (this.config.scale_height-1) + "px"; - this.$grid_scale.style.lineHeight = lineHeigth + "px"; - this.$grid_scale.style.width = (width-1) + "px"; - this.$grid_scale.innerHTML = cells.join(""); -}; - - - -gantt._render_grid_item = function(item) { - if(!gantt._is_grid_visible()) - return null; - - var columns = this.config.columns; - var cells = []; - var width = 0; - for (var i = 0; i < columns.length; i++) { - var last = i == columns.length-1; - var col = columns[i]; - var cell; - - var value; - if (col.name == "add" && i == columns.length-1) { - value = "
"; - } else { - if (col.template) - value = col.template(item); - else - value = item[col.name]; - - if (value instanceof Date) - value = this.templates.date_grid(value); - value = "
" + value + "
"; - } - var css = "gantt_cell" + (last ? " gantt_last_cell" : ""); - - var tree = ""; - if (col.tree) { - for (var j = 0; j < item.$level; j++) - tree += this.templates.grid_indent(item); - - var has_child = (this._branches[item.id] && this._branches[item.id].length > 0); - if (has_child) { - tree += this.templates.grid_open(item); - tree += this.templates.grid_folder(item); - } else { - tree += this.templates.grid_blank(item); - tree += this.templates.grid_file(item); - } - } - var style = "width:" + (col.width-(last ? 1 : 0)) + "px;"; - if (dhtmlx.defined(col.align)) - style += "text-align:" + col.align + ";"; - cell = "
" + tree + value + "
"; - cells.push(cell); - } - var css = item.$index%2 === 0 ? "" : " odd"; - css += (item.$transparent) ? " gantt_transparent" : ""; - if (this.templates.grid_row_class) { - var css_template = this.templates.grid_row_class.call(this, item.start_date, item.end_date, item); - if (css_template) - css += " " + css_template; - } - - if(this.getState().selected_task == item.id){ - css += " gantt_selected"; - } - var el = document.createElement("div"); - el.className = "gantt_row" + css; - el.style.height = this.config.row_height + "px"; - el.style.lineHeight = (gantt.config.row_height)+"px"; - el.setAttribute(this.config.task_attribute, item.id); - el.innerHTML = cells.join(""); - return el; -}; - - -gantt.open = function(id){ - gantt._set_item_state(id, true); - this.callEvent("onTaskOpened", [id]); -}; -gantt.close = function(id){ - gantt._set_item_state(id, false); - this.callEvent("onTaskClosed", [id]); -}; -gantt._set_item_state = function(id, state) { - if (id && this._pull[id]) { - this._pull[id].$open = state; - this.refreshData(); - } -}; - -gantt._is_grid_visible = function(){ - return (this.config.grid_width && this.config.show_grid); -}; -gantt._get_grid_width = function(){ - if(this._is_grid_visible()){ - if(this._is_chart_visible()){ - return this.config.grid_width; - }else{ - return this._x; - } - }else{ - return 0; - } -}; -gantt.getTaskIndex = function(id){ - var branch = this._branches[this.getTask(id).parent]; - for (var i = 0; i < branch.length; i++) - if (branch[i] == id) - return i; - - return -1; -}; -gantt.getGlobalTaskIndex = function(id){ - var branch = this._order; - for (var i = 0; i < branch.length; i++) - if (branch[i] == id) - return i; - - return -1; -}; -gantt.moveTask = function(sid, tindex, parent){ - //target id as 4th parameter - var id = arguments[3]; - if (id){ - if (id === sid) return; - - parent = this.getTask(id).parent; - tindex = this.getTaskIndex(id); - } - - parent = parent || this.config.root_id; - var source = this.getTask(sid); - var sbranch = this._branches[source.parent]; - - var tbranch = this._branches[parent]; - if (tindex == -1) - tindex = tbranch.length + 1; - if (source.parent == parent){ - var sindex = this.getTaskIndex(sid); - if (sindex == tindex) return; - if (sindex < tindex) - tindex--; - } - - this._replace_branch_child(source.parent, sid); - tbranch = this._branches[parent]; - - var tid = tbranch[tindex]; - if (!tid) //adding as last element - tbranch.push(sid); - else - tbranch = tbranch.slice(0, tindex).concat([ sid ]).concat(tbranch.slice(tindex)); - - source.parent = parent; - this._branches[parent] = tbranch; - this.refreshData(); -}; - -gantt._init_dnd = function() { - var dnd = new dhtmlxDnD(this.$grid_data, {updates_per_second : 60}); - if (dhtmlx.defined(this.config.dnd_sensitivity)) - dnd.config.sensitivity = this.config.dnd_sensitivity; - - dnd.attachEvent("onBeforeDragStart", dhtmlx.bind(function(obj,e) { - var el = this._locateHTML(e); - if (!el) return false; - if (this.hideQuickInfo) this._hideQuickInfo(); - - var id = this.locate(e); - if(!this.callEvent("onRowDragStart", [id, e.target || e.srcElement, e])){ - return false; - } - - }, this)); - - dnd.attachEvent("onAfterDragStart", dhtmlx.bind(function(obj,e) { - var el = this._locateHTML(e); - dnd.config.marker.innerHTML = el.outerHTML; - - dnd.config.id = this.locate(e); - var task = this.getTask(dnd.config.id); - task.$open = false; - task.$transparent = true; - this.refreshData(); - }, this)); - - - - dnd.lastTaskOfLevel = function(level){ - var ids = gantt._order, - pull = gantt._pull, - last_item = null; - for(var i= 0, len = ids.length; i < len; i++){ - if(pull[ids[i]].$level == level){ - last_item = pull[ids[i]]; - } - } - return last_item ? last_item.id : null; - }; - dnd.attachEvent("onDragMove", dhtmlx.bind(function(obj,e) { - var dd = dnd.config; - var pos = this._get_position(this.$grid_data); - - // row offset - var x = pos.x + 10; - var y = e.pos.y - 10; - - // prevent moving row out of grid_data container - if (y < pos.y) y = pos.y; - if (y > pos.y + this.$grid_data.offsetHeight - this.config.row_height) y = pos.y + this.$grid_data.offsetHeight - this.config.row_height; - - // setting position of row - dd.marker.style.left = x + "px"; - dd.marker.style.top = y + "px"; - - - // highlight row when mouseover - var target = document.elementFromPoint(pos.x-document.body.scrollLeft+1, y-document.body.scrollTop); - var el = this.locate(target); - - var item = this.getTask(dnd.config.id); - if(!this.isTaskExists(el)){ - el = dnd.lastTaskOfLevel(item.$level); - if(el == dnd.config.id){ - el = null; - } - } - - if (this.isTaskExists(el)) { - var box = gantt._get_position(target); - var over = this.getTask(el); - - - if (box.y + target.offsetHeight/2 < y){ - //hovering over bottom part of item, check can be drop to bottom - var index = this.getGlobalTaskIndex(over.id); - var next = this._pull[this._order[index+1+(over.id == item.id ? 1 : 0)]]; //adds +1 when hovering over placeholder - if (next){ - if (next.id != item.id) - over = next; //there is a valid target - else - return; - } else { - //we at end of the list, check and drop at the end of list - next = this._pull[this._order[index]]; - if (next.$level == item.$level){ - this.moveTask(item.id, -1, next.parent); - dd.target = "next:"+next.id; - return; - } - } - } - - //replacing item under cursor - if (over.$level == item.$level && item.id != over.id){ - this.moveTask(item.id, 0, 0, over.id); - dd.target = over.id; - } else { - //if item is on different level, check the one before it - if (item.id == over.id) return; - - var index = this.getGlobalTaskIndex(over.id); - var prev = this._pull[this._order[index-1]]; - if (prev && prev.$level == item.$level && item.id != prev.id){ - this.moveTask(item.id, -1, prev.parent); - dd.target = "next:"+prev.id; - } - } - } - return true; - }, this)); - - - dnd.attachEvent("onDragEnd", dhtmlx.bind(function(){ - this.getTask(dnd.config.id).$transparent = false; - this.refreshData(); - this.callEvent("onRowDragEnd", [dnd.config.id, dnd.config.target]); - }, this)); -}; -gantt._scale_helpers = { - getSum : function(sizes, from, to){ - if(to === undefined) - to = sizes.length - 1; - if(from === undefined) - from = 0; - - var summ = 0; - for(var i=from; i <= to; i++) - summ += sizes[i]; - - return summ; - }, - setSumWidth : function(sum_width, scale, from, to){ - var parts = scale.width; - - if(to === undefined) - to = parts.length - 1; - if(from === undefined) - from = 0; - var length = to - from + 1; - - if(from > parts.length - 1 || length <= 0 || to > parts.length - 1) - return; - - var oldWidth = this.getSum(parts, from, to); - - var diff = sum_width - oldWidth; - - this.adjustSize(diff, parts, from, to); - this.adjustSize(- diff, parts, to + 1); - - scale.full_width = this.getSum(parts); - }, - splitSize : function(width, count){ - var arr = []; - for(var i=0; i < count; i++) arr[i] = 0; - - this.adjustSize(width, arr); - return arr; - - }, - adjustSize : function(width, parts, from, to){ - if(!from) - from = 0; - if(to === undefined) - to = parts.length - 1; - - var length = to - from + 1; - - var full = this.getSum(parts, from, to); - - var shared = 0; - - for(var i = from; i <= to; i++){ - var share = Math.floor(width*(full ? (parts[i]/full) : (1/length))); - - full -= parts[i]; - width -= share; - length--; - - parts[i] += share; - shared += share; - } - parts[parts.length - 1] += width; - //parts[parts.length - 1] += width - shared; - }, - sortScales : function(scales){ - function cellSize(unit, step){ - var d = new Date(1970, 0, 1); - return gantt.date.add(d, step, unit) - d; - } - - scales.sort(function(a, b){ - return cellSize(a.unit, a.step) < cellSize(b.unit, b.step) ? 1 : -1; - }); - }, - primaryScale : function(){ - - gantt._init_template("date_scale"); - - return { - unit: gantt.config.scale_unit, - step: gantt.config.step, - template : gantt.templates.date_scale, - date : gantt.config.date_scale, - css: gantt.templates.scale_cell_class - }; - }, - - prepareConfigs : function(scales, min_coll_width, container_width, scale_height){ - var heights = this.splitSize(scale_height, scales.length); - var full_width = container_width; - - var configs = []; - for(var i=scales.length-1; i >= 0; i--){ - var main_scale = (i == scales.length - 1); - var cfg = this.initScaleConfig(scales[i]); - if(main_scale){ - this.processIgnores(cfg); - } - - this.initColSizes(cfg, min_coll_width, full_width, heights[i]); - this.limitVisibleRange(cfg); - - if(main_scale){ - full_width = cfg.full_width; - } - - configs.unshift(cfg); - } - - - for( var i =0; i < configs.length-1; i++){ - this.alineScaleColumns(configs[configs.length-1], configs[i]); - } - - return configs; - - }, - - _ignore_time_config : function(date){ - if(this.config.skip_off_time){ - return !this.isWorkTime(date); - } - return false; - }, - processIgnores : function(config){ - var display_count = config.count; - config.ignore_x = {}; - if(gantt.ignore_time || gantt.config.skip_off_time){ - var ignore = gantt.ignore_time || function(){return false;}; - display_count = 0; - for(var i=0; i < config.trace_x.length; i++){ - - if(ignore.call(gantt, config.trace_x[i]) || this._ignore_time_config.call(gantt,config.trace_x[i])){ - config.ignore_x[config.trace_x[i].valueOf()] = true; - config.ignored_colls = true; - }else{ - display_count++; - } - } - - } - config.display_count = display_count; - }, - initColSizes : function(config, min_col_width, full_width, line_height){ - var cont_width = full_width; - - config.height = line_height; - - var column_count = config.display_count === undefined ? config.count : config.display_count; - - if(!column_count) - column_count = 1; - - config.col_width = Math.floor(cont_width/column_count); - - if(min_col_width){ - if (config.col_width < min_col_width){ - config.col_width = min_col_width; - cont_width = config.col_width * column_count; - } - } - config.width = []; - var ignores = config.ignore_x || {}; - for(var i =0; i < config.trace_x.length; i++){ - if(ignores[config.trace_x[i].valueOf()] || (config.display_count == config.count)){ - config.width[i] = 0; - }else{ - config.width[i] = 1; - } - } - - this.adjustSize(cont_width - this.getSum(config.width)/* 1 width per column from the code above */, config.width); - config.full_width = this.getSum(config.width); - }, - initScaleConfig : function(config){ - var cfg = dhtmlx.mixin({ - count:0, - col_width:0, - full_width:0, - height:0, - width:[], - trace_x:[] - }, config); - - this.eachColumn(config.unit, config.step, function(date){ - cfg.count++; - cfg.trace_x.push(new Date(date)); - }); - - return cfg; - }, - iterateScales : function(lower_scale, upper_scale, from, to, callback){ - var upper_dates = upper_scale.trace_x; - var lower_dates = lower_scale.trace_x; - - var prev = from || 0; - var end = to || (lower_dates.length - 1); - var prevUpper = 0; - for(var up=1; up < upper_dates.length; up++){ - for(var next=prev; next <= end; next++){ - if(+lower_dates[next] == +upper_dates[up]){ - if(callback){ - callback.apply(this, [prevUpper, up, prev, next]); - } - prev = next; - prevUpper = up; - continue; - } - } - } - }, - alineScaleColumns : function(lower_scale, upper_scale, from, to){ - this.iterateScales(lower_scale, upper_scale, from, to, function(upper_start, upper_end, lower_start, lower_end){ - var targetWidth = this.getSum(lower_scale.width, lower_start, lower_end - 1); - var actualWidth = this.getSum(upper_scale.width, upper_start, upper_end - 1); - if(actualWidth != targetWidth){ - this.setSumWidth(targetWidth, upper_scale, upper_start, upper_end - 1); - } - - }); - }, - - eachColumn : function(unit, step, callback){ - var start = new Date(gantt._min_date), - end = new Date(gantt._max_date); - if(gantt.date[unit + "_start"]){ - start = gantt.date[unit + "_start"](start); - } - - var curr = new Date(start); - while(+curr < +end){ - callback.call(this, new Date(curr)); - curr = gantt.date.add(curr, step, unit); - } - }, - limitVisibleRange : function(cfg){ - var dates = cfg.trace_x; - - var left = 0, right = cfg.width.length-1; - var diff = 0; - if(+dates[0] < +gantt._min_date && left != right){ - var width = Math.floor(cfg.width[0] * ((dates[1] - gantt._min_date)/ (dates[1] - dates[0]))); - diff += cfg.width[0] - width; - cfg.width[0] = width; - - dates[0] = new Date(gantt._min_date); - } - - var last = dates.length - 1; - var lastDate = dates[last]; - var outDate = gantt.date.add(lastDate, cfg.step, cfg.unit); - if(+outDate > +gantt._max_date && last > 0){ - var width = cfg.width[last] - Math.floor(cfg.width[last] * ((outDate - gantt._max_date)/(outDate - lastDate))); - diff += cfg.width[last] - width; - cfg.width[last] = width; - } - - if(diff){ - var full = this.getSum(cfg.width); - var shared = 0; - for(var i =0; i < cfg.width.length; i++){ - var share = Math.floor(diff*(cfg.width[i]/full)); - cfg.width[i] += share; - shared += share; - } - this.adjustSize(diff - shared, cfg.width); - } - - } -}; -gantt._tasks_dnd = { - drag : null, - _events:{ - before_start:{}, - before_finish:{}, - after_finish:{} - }, - _handlers:{}, - init:function(){ - this.clear_drag_state(); - var drag = gantt.config.drag_mode; - this.set_actions(); - - var evs = { - "before_start":"onBeforeTaskDrag", - "before_finish":"onBeforeTaskChanged", - "after_finish":"onAfterTaskDrag" - }; - //for now, all drag operations will trigger the same events - for(var stage in this._events){ - for(var mode in drag){ - this._events[stage][mode] = evs[stage]; - } - } - - this._handlers[drag.move] = this._move; - this._handlers[drag.resize] = this._resize; - this._handlers[drag.progress] = this._resize_progress; - - }, - set_actions:function(){ - var data = gantt.$task_data; - dhtmlxEvent(data, "mousemove", dhtmlx.bind(function(e){ - this.on_mouse_move(e||event); - }, this)); - dhtmlxEvent(data, "mousedown", dhtmlx.bind(function(e){ - this.on_mouse_down(e||event); - }, this)); - dhtmlxEvent(data, "mouseup", dhtmlx.bind(function(e){ - this.on_mouse_up(e||event); - }, this)); - }, - - clear_drag_state : function(){ - this.drag = { - id:null, - mode:null, - pos:null, - start_x:null, - start_y:null, - obj:null, - left:null - }; - }, - _resize : function(ev, shift, drag){ - var cfg = gantt.config; - var coords_x = this._drag_task_coords(ev, drag); - if(drag.left){ - ev.start_date = gantt._date_from_pos(coords_x.start + shift); - if(!ev.start_date){ - ev.start_date = new Date(gantt.getState().min_date); - } - }else{ - ev.end_date =gantt._date_from_pos(coords_x.end + shift); - if(!ev.end_date){ - ev.end_date = new Date(gantt.getState().max_date); - } - } - - if (ev.end_date - ev.start_date < cfg.min_duration){ - if(drag.left) - ev.start_date = gantt.calculateEndDate(ev.end_date, -1); - else - ev.end_date = gantt.calculateEndDate(ev.start_date, 1); - } - gantt._init_task_timing(ev); - }, - _resize_progress:function(ev, shift, drag){ - var coords_x = this._drag_task_coords(ev, drag); - - var diff = Math.max(0, drag.pos.x - coords_x.start); - ev.progress = Math.min(1, diff / (coords_x.end-coords_x.start)); - }, - _move : function(ev, shift, drag){ - var coords_x = this._drag_task_coords(ev, drag); - var new_start = gantt._date_from_pos(coords_x.start + shift), - new_end = gantt._date_from_pos(coords_x.end + shift); - if(!new_start){ - ev.start_date = new Date(gantt.getState().min_date); - ev.end_date = gantt._date_from_pos(gantt.posFromDate(ev.start_date) + (coords_x.end - coords_x.start)); - }else if(!new_end){ - ev.end_date = new Date(gantt.getState().max_date); - ev.start_date = gantt._date_from_pos(gantt.posFromDate(ev.end_date) - (coords_x.end - coords_x.start)); - }else{ - ev.start_date = new_start; - ev.end_date = new_end; - } - }, - _drag_task_coords : function(t, drag){ - var start = drag.obj_s_x = drag.obj_s_x || gantt.posFromDate(t.start_date); - var end = drag.obj_e_x = drag.obj_e_x || gantt.posFromDate(t.end_date); - return { - start : start, - end : end - }; - }, - on_mouse_move : function(e){ - if(this.drag.start_drag) - this._start_dnd(e); - - var drag = this.drag; - - if (drag.mode){ - if(!gantt._checkTimeout(this, 40))//limit update frequency - return; - - this._update_on_move(e); - - } - }, - _update_on_move : function(e){ - var drag = this.drag; - - if (drag.mode){ - var pos = gantt._get_mouse_pos(e); - if(drag.pos && drag.pos.x == pos.x) - return; - - drag.pos=pos; - - var curr_date = gantt._date_from_pos(pos.x); - if(!curr_date || isNaN( curr_date.getTime() )) - return; - - - var shift = pos.x - drag.start_x; - var ev = gantt.getTask(drag.id); - - - if(this._handlers[drag.mode]){ - var original = dhtmlx.mixin({}, ev); - var copy = dhtmlx.mixin({}, ev); - this._handlers[drag.mode].apply(this, [copy, shift, drag]); - dhtmlx.mixin(ev, copy, true); - gantt._update_parents(drag.id, true); - gantt.callEvent("onTaskDrag", [ev.id, drag.mode, copy, original, e]); - - - dhtmlx.mixin(ev, copy, true); - gantt._update_parents(drag.id); - gantt.refreshTask(drag.id); - } - - } - }, - - on_mouse_down : function(e, src){ - // on Mac we do not get onmouseup event when clicking right mouse button leaving us in dnd state - // let's ignore right mouse button then - if (e.button == 2) - return; - - if (gantt.config.readonly || this.drag.mode) return; - - this.clear_drag_state(); - - src = src||(e.target||e.srcElement); - - var className = gantt._trim(src.className || ""); - if(!className || !this._get_drag_mode(className)){ - if(src.parentNode) - return this.on_mouse_down(e, src.parentNode); - else - return; - } - - var drag = this._get_drag_mode(className); - - if(!drag){ - if (gantt.checkEvent("onMouseDown") && gantt.callEvent("onMouseDown", [className.split(" ")[0]])) { - if (src.parentNode) - return this.on_mouse_down(e,src.parentNode); - - } - }else{ - if (drag.mode && drag.mode != gantt.config.drag_mode.ignore && gantt.config["drag_" + drag.mode]){ - var id = gantt.locate(src), - task = dhtmlx.copy(gantt.getTask(id) || {}); - - if(gantt._is_flex_task(task) && drag.mode != gantt.config.drag_mode.progress){//only progress drag is allowed for tasks with flexible duration - this.clear_drag_state(); - return; - } - - drag.id = id; - var pos = gantt._get_mouse_pos(e); - - drag.start_x = pos.x; - drag.start_y = pos.y; - drag.obj = task; - this.drag.start_drag = drag; - - }else - this.clear_drag_state(); - } - }, - _fix_dnd_scale_time:function(task, drag){ - var unit = gantt._tasks.unit, - step = gantt._tasks.step; - if(!gantt.config.round_dnd_dates){ - unit = 'minute'; - step = gantt.config.time_step; - } - - if(drag.mode == gantt.config.drag_mode.resize){ - if(drag.left){ - task.start_date = gantt._get_closest_date({date:task.start_date, unit:unit, step:step}); - }else{ - task.end_date = gantt._get_closest_date({date:task.end_date, unit:unit, step:step}); - } - }else if(drag.mode == gantt.config.drag_mode.move){ - task.start_date = gantt._get_closest_date({date:task.start_date, unit:unit, step:step}); - task.end_date = gantt.calculateEndDate(task.start_date, task.duration, gantt.config.duration_unit); - } - }, - _fix_working_times:function(task, drag){ - if(gantt.config.work_time && gantt.config.correct_work_time){ - if(drag.mode == gantt.config.drag_mode.resize){ - if(drag.left){ - task.start_date = gantt.getClosestWorkTime({date:task.start_date, dir:'future'}); - }else{ - task.end_date = gantt.getClosestWorkTime({date:task.end_date, dir:'past'}); - } - }else if(drag.mode == gantt.config.drag_mode.move){ - if(!gantt.isWorkTime(task.start_date)){ - task.start_date = gantt.getClosestWorkTime({date:task.start_date, dir:'future'}); - task.end_date = gantt.calculateEndDate(task.start_date, task.duration); - }else if(!gantt.isWorkTime(new Date(+task.end_date - 1))){ - task.end_date = gantt.getClosestWorkTime({date:task.end_date, dir:'past'}); - task.start_date = gantt.calculateEndDate(task.end_date, task.duration*-1); - } - - } - } - }, - on_mouse_up : function(e){ - var drag = this.drag; - if (drag.mode && drag.id){ - //drop - var ev=gantt.getTask(drag.id); - - if(gantt.config.work_time && gantt.config.correct_work_time){ - this._fix_working_times(ev, drag); - } - - this._fix_dnd_scale_time(ev, drag); - - gantt._init_task_timing(ev); - - if(!this._fireEvent("before_finish", drag.mode, [drag.id, drag.mode, dhtmlx.copy(drag.obj), e])){ - drag.obj._dhx_changed = false; - dhtmlx.mixin(ev, drag.obj, true); - - - - - gantt.updateTask(ev.id); - } else { - var drag_id = drag.id; - - - - - - gantt._init_task_timing(ev); - gantt.updateTask(ev.id); - this._fireEvent("after_finish", drag.mode, [drag_id, drag.mode, e]); - this.clear_drag_state(); - } - - } - this.clear_drag_state(); - }, - _get_drag_mode : function(className){ - var modes = gantt.config.drag_mode; - var classes = (className || "").split(" "); - var classname = classes[0]; - var drag = {mode:null, left:null}; - switch (classname) { - case "gantt_task_line": - case "gantt_task_content": - drag.mode = modes.move; - break; - case "gantt_task_drag": - drag.mode = modes.resize; - if(classes[1] && classes[1].indexOf("left", classes[1].length - "left".length) !== -1){ - drag.left = true; - }else{ - drag.left = false; - } - break; - case "gantt_task_progress_drag": - drag.mode = modes.progress; - break; - case "gantt_link_control": - case "gantt_link_point": - drag.mode = modes.ignore; - break; - default: - drag = null; - break; - } - return drag; - - }, - - _start_dnd : function(e){ - var drag = this.drag = this.drag.start_drag; - delete drag.start_drag; - - var cfg = gantt.config; - var id = drag.id; - if (!cfg["drag_"+drag.mode] || !gantt.callEvent("onBeforeDrag",[id, drag.mode, e]) || !this._fireEvent("before_start", drag.mode, [id, drag.mode, e])){ - this.clear_drag_state(); - }else { - delete drag.start_drag; - } - - }, - _fireEvent:function(stage, mode, params){ - dhtmlx.assert(this._events[stage], "Invalid stage:{" + stage + "}"); - - var trigger = this._events[stage][mode]; - - dhtmlx.assert(trigger, "Unknown after drop mode:{" + mode + "}"); - dhtmlx.assert(params, "Invalid event arguments"); - - - if(!gantt.checkEvent(trigger)) - return true; - - return gantt.callEvent(trigger, params); - } -}; - - - - - - - -gantt._render_link = function(id){ - var link = this.getLink(id); - gantt._linkRenderer.render_item(link, this.$task_links); -}; -gantt._get_link_type = function(from_start, to_start){ - var type = null; - if(from_start && to_start){ - type = gantt.config.links.start_to_start; - }else if(!from_start && to_start){ - type = gantt.config.links.finish_to_start; - }else if(!from_start && !to_start){ - type = gantt.config.links.finish_to_finish; - }else if(from_start && !to_start){ - type = gantt.config.links.start_to_finish; - } - return type; -}; - -gantt.isLinkAllowed = function(from, to, from_start, to_start){ - var link = null; - if(typeof(from) == "object"){ - link = from; - }else{ - link = {source:from, target:to, type: this._get_link_type(from_start, to_start)}; - } - - if(!link) return false; - if(!(link.source && link.target && link.type)) return false; - if(link.source == link.target) return false; - - var res = true; - //any custom rules - if(this.checkEvent("onLinkValidation")) - res = this.callEvent("onLinkValidation", [link]); - - return res; -}; - -gantt._render_link_element = function(link){ - var dots = this._path_builder.get_points(link); - var drawer = gantt._drawer; - var lines = drawer.get_lines(dots); - - var div = document.createElement("div"); - - - var css = "gantt_task_link"; - var cssTemplate = this.templates.link_class ? this.templates.link_class(link) : ""; - if(cssTemplate){ - css += " " + cssTemplate; - } - - - div.className = css; - div.setAttribute(gantt.config.link_attribute, link.id); - for(var i=0; i < lines.length; i++){ - if(i == lines.length - 1){ - lines[i].size -= gantt.config.link_arrow_size; - } - div.appendChild(drawer.render_line(lines[i], lines[i+1])); - } - - var direction = lines[lines.length - 1].direction; - var endpoint = gantt._render_link_arrow(dots[dots.length - 1], direction); - div.appendChild(endpoint); - - return div; -}; - -gantt._render_link_arrow = function(point, direction){ - var div = document.createElement("div"); - var drawer = gantt._drawer; - var top = point.y; - var left = point.x; - - var size = gantt.config.link_arrow_size; - var line_width = gantt.config.row_height; - var className = "gantt_link_arrow gantt_link_arrow_" + direction; - switch (direction){ - case drawer.dirs.right: - top -= (size - line_width)/2; - left -= size; - break; - case drawer.dirs.left: - top -= (size - line_width)/2; - break; - case drawer.dirs.up: - left -= (size - line_width)/2; - break; - case drawer.dirs.down: - top -= size; - left -= (size - line_width)/2; - break; - default: - break; - } - div.style.cssText = [ - "top:"+top + "px", - "left:"+left+'px'].join(';'); - div.className = className; - - return div; -}; - - -gantt._drawer = { - current_pos:null, - dirs:{"left":'left',"right":'right',"up":'up', "down":'down'}, - path:[], - clear:function(){ - this.current_pos = null; - this.path = []; - }, - point:function(pos){ - this.current_pos = dhtmlx.copy(pos); - }, - get_lines:function(dots){ - this.clear(); - this.point(dots[0]); - for(var i=1; i from.x){ - direction = this.dirs.right; - }else if (to.y > from.y){ - direction = this.dirs.down; - }else { - direction = this.dirs.up; - } - return direction; - } - -}; -gantt._y_from_ind = function(index){ - return (index)*gantt.config.row_height; -}; -gantt._path_builder = { - - path:[], - clear:function(){ - this.path = []; - }, - current:function(){ - return this.path[this.path.length - 1]; - }, - point:function(next){ - if(!next) - return this.current(); - - this.path.push(dhtmlx.copy(next)); - return next; - }, - point_to:function(direction, diff, point){ - if(!point) - point = dhtmlx.copy(this.point()); - else - point = {x:point.x, y:point.y}; - var dir = gantt._drawer.dirs; - switch (direction){ - case (dir.left): - point.x -= diff; - break; - case (dir.right): - point.x += diff; - break; - case (dir.up): - point.y -= diff; - break; - case (dir.down): - point.y += diff; - break; - default: - break; - } - return this.point(point); - }, - get_points:function(link){ - var pt = this.get_endpoint(link); - var xy = gantt.config; - - - var dy = pt.e_y - pt.y; - var dx = pt.e_x - pt.x; - - var dir = gantt._drawer.dirs; - - this.clear(); - this.point({x: pt.x, y : pt.y}); - - var shiftX = 2*xy.link_arrow_size;//just random size for first line - - - var forward = (pt.e_x > pt.x); - if(link.type == gantt.config.links.start_to_start){ - this.point_to(dir.left, shiftX); - if(forward){ - this.point_to(dir.down, dy); - this.point_to(dir.right, dx); - }else{ - this.point_to(dir.right, dx); - this.point_to(dir.down, dy); - } - this.point_to(dir.right, shiftX); - - }else if(link.type == gantt.config.links.finish_to_start){ - forward = (pt.e_x > (pt.x + 2*shiftX)); - this.point_to(dir.right, shiftX); - if(forward){ - dx -= shiftX; - this.point_to(dir.down, dy); - this.point_to(dir.right, dx); - }else{ - dx -= 2*shiftX; - var sign = dy > 0 ? 1 : -1; - - this.point_to(dir.down, sign * (xy.row_height/2)); - this.point_to(dir.right, dx); - this.point_to(dir.down, sign * ( Math.abs(dy) - (xy.row_height/2))); - this.point_to(dir.right, shiftX); - } - - }else if(link.type == gantt.config.links.finish_to_finish){ - this.point_to(dir.right, shiftX); - if(forward){ - this.point_to(dir.right, dx); - this.point_to(dir.down, dy); - }else{ - this.point_to(dir.down, dy); - this.point_to(dir.right, dx); - } - this.point_to(dir.left, shiftX); - }else if(link.type == gantt.config.links.start_to_finish){ - - forward = (pt.e_x > (pt.x - 2*shiftX)); - this.point_to(dir.left, shiftX); - - if(!forward){ - dx += shiftX; - this.point_to(dir.down, dy); - this.point_to(dir.right, dx); - }else{ - dx += 2*shiftX; - var sign = dy > 0 ? 1 : -1; - this.point_to(dir.down, sign * (xy.row_height/2)); - this.point_to(dir.right, dx); - this.point_to(dir.down, sign * ( Math.abs(dy) - (xy.row_height/2))); - this.point_to(dir.left, shiftX); - } - - } - - return this.path; - }, - get_endpoint : function(link){ - var types = gantt.config.links; - var from_start = false, to_start = false; - - if(link.type == types.start_to_start){ - from_start = to_start = true; - }else if(link.type == types.finish_to_finish){ - from_start = to_start = false; - }else if(link.type == types.finish_to_start){ - from_start = false; - to_start = true; - }else if(link.type == types.start_to_finish){ - from_start = true; - to_start = false; - }else{ - dhtmlx.assert(false, "Invalid link type"); - } - - var from = gantt._get_task_visible_pos(gantt._pull[link.source], from_start); - var to = gantt._get_task_visible_pos(gantt._pull[link.target], to_start); - - return { - x : from.x, - e_x : to.x, - y : from.y , - e_y : to.y - }; - } -}; - -gantt._init_links_dnd = function() { - var dnd = new dhtmlxDnD(this.$task_bars, { sensitivity : 0, updates_per_second : 60 }), - start_marker = "task_left", - end_marker = "task_right", - link_edge_marker = "gantt_link_point", - link_landing_hover_area = "gantt_link_control"; - - dnd.attachEvent("onBeforeDragStart", dhtmlx.bind(function(obj,e) { - if(gantt.config.readonly) - return false; - - var target = (e.target||e.srcElement); - resetDndState(); - if(gantt.getState().drag_id) - return false; - - - if(gantt._locate_css(target, link_edge_marker)){ - if(gantt._locate_css(target, start_marker)) - gantt._link_source_task_start = true; - - var sid = gantt._link_source_task = this.locate(e); - var t = gantt.getTask(sid); - - var shift = 0; - if(t.type == gantt.config.types.milestone){ - shift = (gantt._get_visible_milestone_width() - gantt._get_milestone_width())/2; - } - - this._dir_start = getLinePos(t, !!gantt._link_source_task_start, shift); - return true; - }else{ - return false; - } - - }, this)); - - dnd.attachEvent("onAfterDragStart", dhtmlx.bind(function(obj,e) { - updateMarkedHtml(dnd.config.marker); - }, this)); - - function getLinePos(task, to_start, shift){ - var pos = gantt._get_task_pos(task, !!to_start); - pos.y += gantt._get_task_height()/2; - - shift = shift || 0; - pos.x += (to_start ? -1 : 1)*shift; - return pos; - } - - dnd.attachEvent("onDragMove", dhtmlx.bind(function(obj,e) { - var dd = dnd.config; - var pos = dnd.getPosition(e); - advanceMarker(dd.marker, pos); - var landing = gantt._is_link_drop_area(e); - - var prevTarget = gantt._link_target_task; - var prevLanding = gantt._link_landing; - var prevToStart = gantt._link_target_task_start; - - var targ = gantt.locate(e), - to_start = true; - if(landing){ - //refreshTask - to_start = !gantt._locate_css(e, end_marker); - landing = !!targ; - } - - gantt._link_target_task = targ; - gantt._link_landing = landing; - gantt._link_target_task_start = to_start; - - if(landing){ - var t = gantt.getTask(targ); - - var node = gantt._locate_css(e, link_landing_hover_area); - var shift = 0; - if(node){ - shift = Math.floor(node.offsetWidth / 2); - } - - this._dir_end = getLinePos(t, !!gantt._link_target_task_start,shift); - }else{ - this._dir_end = gantt._get_mouse_pos(e); - } - - var targetChanged = !(prevLanding == landing && prevTarget == targ && prevToStart == to_start); - if(targetChanged){ - if(prevTarget) - gantt.refreshTask(prevTarget, false); - if(targ) - gantt.refreshTask(targ, false); - } - - if(targetChanged){ - updateMarkedHtml(dd.marker); - } - - - - showDirectingLine(this._dir_start.x, this._dir_start.y, this._dir_end.x, this._dir_end.y); - - return true; - }, this)); - - - dnd.attachEvent("onDragEnd", dhtmlx.bind(function() { - var link = getDndState(); - - if(link.from && link.to && link.from != link.to){ - var type = gantt._get_link_type(link.from_start, link.to_start); - - if(type) - gantt.addLink({source : link.from, target: link.to, type:type}); - } - - resetDndState(); - - if(link.from) - gantt.refreshTask(link.from, false); - if(link.to) - gantt.refreshTask(link.to, false); - removeDirectionLine(); - }, this)); - - function updateMarkedHtml(marker){ - var link = getDndState(); - - var css = ["gantt_link_tooltip"]; - if(link.from && link.to){ - if(gantt.isLinkAllowed(link.from, link.to, link.from_start, link.to_start)){ - css.push("gantt_allowed_link"); - }else{ - css.push("gantt_invalid_link"); - } - } - - var className = gantt.templates.drag_link_class(link.from, link.from_start, link.to, link.to_start); - if(className) - css.push(className); - - var html = "
" + - gantt.templates.drag_link(link.from, link.from_start, link.to, link.to_start) + - "
"; - marker.innerHTML = html; - } - - function advanceMarker(marker, pos){ - marker.style.left = pos.x + 5 + "px"; - marker.style.top = pos.y + 5 + "px"; - } - function getDndState(){ - return { from : gantt._link_source_task, - to : gantt._link_target_task, - from_start : gantt._link_source_task_start, - to_start : gantt._link_target_task_start}; - } - function resetDndState(){ - gantt._link_source_task = - gantt._link_source_task_start = - gantt._link_target_task = null; - gantt._link_target_task_start = true; - } - function showDirectingLine(s_x, s_y, e_x, e_y){ - var div = getDirectionLine(); - - var link = getDndState(); - - var css = ["gantt_link_direction"]; - if(gantt.templates.link_direction_class){ - css.push(gantt.templates.link_direction_class(link.from, link.from_start, link.to, link.to_start)); - } - - var dist =Math.sqrt( (Math.pow(e_x - s_x, 2)) + (Math.pow(e_y - s_y, 2)) ); - dist = Math.max(0, dist - 3); - if(!dist) - return; - - div.className = css.join(" "); - var tan = (e_y - s_y)/(e_x - s_x), - angle = Math.atan(tan); - - if(coordinateCircleQuarter(s_x, e_x, s_y, e_y) == 2){ - angle += Math.PI; - }else if(coordinateCircleQuarter(s_x, e_x, s_y, e_y) == 3){ - angle -= Math.PI; - } - - - - var sin = Math.sin(angle), - cos = Math.cos(angle), - top = Math.round(s_y), - left = Math.round(s_x); - - - var style = [ - "-webkit-transform: rotate("+angle+"rad)", - "-moz-transform: rotate("+angle+"rad)", - "-ms-transform: rotate("+angle+"rad)", - "-o-transform: rotate("+angle+"rad)", - "transform: rotate("+angle+"rad)", - "width:" + Math.round(dist) + "px" - ]; - - if(window.navigator.userAgent.indexOf("MSIE 8.0") != -1){ - //ms-filter breaks styles in ie9, so add it only for 8th - style.push("-ms-filter: \"" + ieTransform(sin, cos) + "\""); - - var shiftLeft = Math.abs(Math.round(s_x - e_x)), - shiftTop = Math.abs(Math.round(e_y - s_y)); - //fix rotation axis - switch(coordinateCircleQuarter(s_x, e_x, s_y, e_y)){ - case 1: - top -= shiftTop; - break; - case 2: - left -= shiftLeft; - top -= shiftTop; - break; - case 3: - left -= shiftLeft; - break; - default: - break; - } - - } - - style.push("top:" + top + "px"); - style.push("left:" + left + "px"); - - div.style.cssText = style.join(";"); - } - - function ieTransform(sin, cos){ - return "progid:DXImageTransform.Microsoft.Matrix("+ - "M11 = "+cos+","+ - "M12 = -"+sin+","+ - "M21 = "+sin+","+ - "M22 = "+cos+","+ - "SizingMethod = 'auto expand'"+ - ")"; - } - function coordinateCircleQuarter(sX, eX, sY, eY){ - if(eX >= sX){ - if(eY <= sY){ - return 1; - }else{ - return 4; - } - }else{ - if(eY <= sY){ - return 2; - }else{ - return 3; - } - } - - } - function getDirectionLine(){ - if(!dnd._direction){ - dnd._direction = document.createElement("div"); - gantt.$task_links.appendChild(dnd._direction); - } - return dnd._direction; - } - function removeDirectionLine(){ - if(dnd._direction){ - if (dnd._direction.parentNode) //the event line can be detached because of data refresh - dnd._direction.parentNode.removeChild(dnd._direction); - - dnd._direction = null; - } - } - - gantt._is_link_drop_area = function(e){ - return !!gantt._locate_css(e, link_landing_hover_area); - }; -}; -gantt._get_link_state = function(){ - return { - link_landing_area : this._link_landing, - link_target_id : this._link_target_task, - link_target_start : this._link_target_task_start, - link_source_id : this._link_source_task, - link_source_start : this._link_source_task_start - }; -}; - -gantt._init_tasks = function(){ - //store temporary configs - this._tasks = { - col_width:this.config.columnWidth, - width: [], // width of each column - full_width: 0, // width of all columns - trace_x:[], - rendered:{} - }; - - - this._click.gantt_task_link = dhtmlx.bind(function(e, trg){ - var id = this.locate(e, gantt.config.link_attribute); - if(id){ - this.callEvent("onLinkClick", [id, e]); - } - }, this); - - this._dbl_click.gantt_task_link = dhtmlx.bind(function(e, id, trg){ - var id = this.locate(e, gantt.config.link_attribute); - this._delete_link_handler(id, e); - }, this); - - this._dbl_click.gantt_link_point = dhtmlx.bind(function(e, id, trg){ - var id = this.locate(e), - task = this.getTask(id); - - - var link = null; - if(trg.parentNode && trg.parentNode.className){ - if(trg.parentNode.className.indexOf("_left") > -1){ - link = task.$target[0]; - }else{ - link = task.$source[0]; - } - } - if(link) - this._delete_link_handler(link, e); - return false; - }, this); - - this._tasks_dnd.init(); - this._init_links_dnd(); - - - var filter_grid_task = this._create_filter('_filter_task', '_is_grid_visible'); - var filter_chart_task = this._create_filter('_filter_task', '_is_chart_visible'); - var filter_link = this._create_filter('_filter_link', '_is_chart_visible'); - - - this._taskRenderer = gantt._task_renderer("line", this._render_task_element, this.$task_bars, filter_chart_task); - this._linkRenderer = gantt._task_renderer("links", this._render_link_element, this.$task_links, filter_link); - this._gridRenderer = gantt._task_renderer("grid_items", this._render_grid_item, this.$grid_data, filter_grid_task); - this._bgRenderer = gantt._task_renderer("bg_lines", this._render_bg_line, this.$task_bg, filter_chart_task); - - - function refreshId(renders, oldId, newId, item){ - for(var i =0; i < renders.length; i++){ - renders[i].change_id(oldId, newId); - renders[i].render_item(item); - } - } - this.attachEvent("onTaskIdChange", function(oldId, newId){ - var render = this._get_task_renderers(); - refreshId(render, oldId, newId, this.getTask(newId)); - }); - - this.attachEvent("onLinkIdChange", function(oldId, newId){ - var render = this._get_link_renderers(); - refreshId(render, oldId, newId, this.getLink(newId)); - }); - -}; - -gantt._create_filter = function(filter_methods){ - if(!(filter_methods instanceof Array)){ - filter_methods = Array.prototype.slice.call(arguments, 0); - } - - return function(obj){ - var res = true; - for(var i = 0, len = filter_methods.length; i < len; i++){ - var filter_method = filter_methods[i]; - if(gantt[filter_method]){ - res = res && (gantt[filter_method].apply(gantt, [obj.id, obj]) !== false); - } - } - - return res; - }; -}; - -gantt._is_chart_visible = function(){ - return !!this.config.show_chart; -}; - -gantt._filter_task = function(id, task){ - var min = null, max = null; - if(this.config.start_date && this.config.end_date){ - min = this.config.start_date.valueOf(); - max = this.config.end_date.valueOf(); - - if(+task.start_date > max || +task.end_date < +min) - return false; - } - return true; -}; -gantt._filter_link = function(id, link){ - if(!this.config.show_links){ - return false; - } - - if(!(gantt.isTaskVisible(link.source) && gantt.isTaskVisible(link.target))) - return false; - - return this.callEvent("onBeforeLinkDisplay", [id, link]); -}; - -gantt._get_task_renderers = function(){ - return [ - this._taskRenderer, - this._gridRenderer, - this._bgRenderer - ]; -}; -gantt._get_link_renderers = function(){ - return [ - this._linkRenderer - ]; -}; -gantt._delete_link_handler = function(id, e){ - if(id && this.callEvent("onLinkDblClick", [id, e])){ - if(this.config.readonly) return; - - var title = ""; - var question = gantt.locale.labels.link + " " +this.templates.link_description(this.getLink(id)) + " " + gantt.locale.labels.confirm_link_deleting; - - window.setTimeout(function(){ - gantt._dhtmlx_confirm(question, title, function(){ - gantt.deleteLink(id); - }); - },(gantt.config.touch ? 300 : 1)); - } -}; -gantt.getTaskNode = function(id){ - return this._taskRenderer.rendered[id]; -}; -gantt.getLinkNode = function(id){ - return this._linkRenderer.rendered[id]; -}; - - - - - -gantt._get_tasks_data = function(){ - var rows = []; - for(var i=0; i < this._order.length; i++){ - var item = this._pull[this._order[i]]; - item.$index = i; - this._update_parents(item.id, true); - rows.push(item); - } - return rows; -}; -gantt._get_links_data = function(){ - var links = []; - for(var i in this._lpull) - links.push(this._lpull[i]); - - return links; -}; -gantt._render_data = function(){ - this._update_layout_sizes(); - - var data = this._get_tasks_data(); - - var renderers = this._get_task_renderers(); - for(var i=0; i < renderers.length; i++){ - renderers[i].render_items(data); - } - - var links = gantt._get_links_data(); - renderers = this._get_link_renderers(); - for(var i=0; i < renderers.length; i++) - renderers[i].render_items(links); -}; - -gantt._update_layout_sizes = function(){ - var cfg = this._tasks; - - cfg.bar_height = this._get_task_height(); - - //task bars layer - this.$task_data.style.height = Math.max(this.$task.offsetHeight - this.config.scale_height, 0) + 'px'; - - //background layer - this.$task_bg.style.width = cfg.full_width + "px"; - - //grid area - if(this._is_grid_visible()){ - var columns = this.config.columns; - var width = 0; - for (var i = 0; i < columns.length; i++) - width += columns[i].width; - this.$grid_data.style.width = Math.max(width-1, 0) + "px"; - } -}; - - -gantt._init_tasks_range = function(){ - var unit = this.config.scale_unit; - if(this.config.start_date && this.config.end_date){ - this._min_date = this.date[unit + "_start"]( new Date(this.config.start_date)); - this._max_date = this.date[unit + "_start"]( new Date(this.config.end_date)); - return; - } - - var data = this._get_tasks_data(); - var root = this._init_task({id:this.config.root_id}); - data.push(root); - - - var max = -Infinity, - min = Infinity; - - this.eachTask(function(child){ - if(child.end_date && +child.end_date > +max){ - max = new Date(child.end_date); - } - }, this.config.root_id); - - this.eachTask(function(child){ - if(child.start_date && +child.start_date < +min){ - min = new Date(child.start_date); - } - }, this.config.root_id); - - this._min_date = min; - this._max_date = max; - - if(!max || max == -Infinity){ - this._min_date = new Date(); - this._max_date = new Date(this._min_date); - } - - this._min_date = this.date[unit + "_start"](this._min_date); - if(+this._min_date == +min) - this._min_date = this.date.add(this.date[unit + "_start"](this._min_date), -1, unit); - - this._max_date = this.date[unit + "_start"](this._max_date); - this._max_date = this.date.add(this._max_date, 1, unit); -}; - - - -gantt._prepare_scale_html = function(config){ - var cells = []; - var date = null, content = null, css = null; - - if(config.template || config.date){ - content = config.template || this.date.date_to_str(config.date); - } - - - css = config.css || gantt.templates.scale_cell_class; - - - for (var i = 0; i < config.count; i++) { - date = new Date(config.trace_x[i]); - var value = content.call(this, date), - width = config.width[i], - style = "", - template = "", - cssclass = ""; - - if(width){ - style = "width:"+(width)+"px;"; - cssclass = "gantt_scale_cell" + (i == config.count-1 ? " gantt_last_cell" : ""); - - template = css.call(this, date); - if(template) cssclass += " " + template; - var cell = "
" + value + "
"; - cells.push(cell); - }else{ - //do not render ignored cells - } - - } - return cells.join(""); -}; - -gantt._render_tasks_scales = function() { - this._init_tasks_range(); - this._scroll_resize(); - this._set_sizes(); - - var scales_html = "", - outer_width = 0, - data_width = 0, - scale_height = 0; - - if(this._is_chart_visible()){ - var helpers = this._scale_helpers; - var scales = [helpers.primaryScale()].concat(this.config.subscales); - scale_height = (this.config.scale_height-1); - - helpers.sortScales(scales); - - var resize = this._get_resize_options(); - var avail_width = resize.x ? 0 : this.$task.offsetWidth; - var cfgs = helpers.prepareConfigs(scales,this.config.min_column_width, avail_width, scale_height); - var cfg = this._tasks = cfgs[cfgs.length - 1]; - - var html = []; - - var css = this.templates.scale_row_class; - for(var i=0; i < cfgs.length; i++){ - var cssClass = "gantt_scale_line"; - var tplClass = css(cfgs[i]); - if(tplClass){ - cssClass += " " + tplClass; - } - - html.push("
" + this._prepare_scale_html(cfgs[i]) + "
"); - } - - scales_html = html.join(""); - outer_width = cfg.full_width + this.$scroll_ver.offsetWidth + "px"; - data_width = cfg.full_width + "px"; - scale_height += "px"; - } - - if(this._is_chart_visible()){ - this.$task.style.display = ""; - }else{ - this.$task.style.display = "none"; - } - - this.$task_scale.style.height = scale_height; - - this.$task_data.style.width = - this.$task_scale.style.width = outer_width; - this.$task_links.style.width = - this.$task_bars.style.width = data_width; - - this.$task_scale.innerHTML = scales_html; - -}; - - - -gantt._render_bg_line = function(item){ - var cfg = gantt._tasks; - var count = cfg.count; - var cells = []; - - if(gantt.config.show_task_cells){ - for (var j = 0; j < count; j++) { - var width = cfg.width[j], - style = "", - cssclass = ""; - - if(width > 0){//do not render skipped columns - - style = "width:"+(width)+"px;"; - cssclass = "gantt_task_cell" + (j == count-1 ? " gantt_last_cell" : ""); - - cssTemplate = this.templates.task_cell_class(item, cfg.trace_x[j]); - if(cssTemplate) - cssclass += " " + cssTemplate; - var cell = "
"; - cells.push(cell); - } - - } - } - var odd = item.$index%2 !== 0; - var cssTemplate = gantt.templates.task_row_class(item.start_date, item.end_date, item); - var css = "gantt_task_row" + (odd ? " odd" : "") + (cssTemplate ? ' '+cssTemplate : ''); - - if(this.getState().selected_task == item.id){ - css += " gantt_selected"; - } - - //var row = "
" + cells.join("") + "
"; - var row = document.createElement("div"); - row.className = css; - row.style.height = (gantt.config.row_height)+"px"; - row.setAttribute(this.config.task_attribute, item.id); - row.innerHTML = cells.join(""); - return row; -}; - - -gantt._adjust_scales = function(){ - if(this.config.fit_tasks){ - var old_min = +this._min_date, - old_max = +this._max_date; - this._init_tasks_range(); - if(+this._min_date != old_min || +this._max_date != old_max){ - this.render(); - - this.callEvent("onScaleAdjusted", []); - return true; - } - } - return false; -}; - -//refresh task and related links -gantt.refreshTask = function(taskId, refresh_links){ - var renders = this._get_task_renderers(); - - var task = this.getTask(taskId); - if(task && this.isTaskVisible(taskId)){ - for(var i =0; i < renders.length; i++) - renders[i].render_item(task); - }else{ - for(var i =0; i < renders.length; i++) - renders[i].remove_item(taskId); - } - - - if(refresh_links !== undefined && !refresh_links) - return; - - var task = this.getTask(taskId); - for(var i=0; i < task.$source.length; i++){ - gantt.refreshLink(task.$source[i]); - } - for(var i=0; i < task.$target.length; i++){ - gantt.refreshLink(task.$target[i]); - } -}; -gantt.refreshLink = function(linkId){ - if(this.isLinkExists(linkId)) - gantt._render_link(linkId); - else - gantt._linkRenderer.remove_item(linkId); -}; - - - -gantt._combine_item_class = function(basic, template, itemId){ - var css = [basic]; - if(template) - css.push(template); - - var state = gantt.getState(); - - var task = this.getTask(itemId); - - if(this._get_safe_type(task.type) == this.config.types.milestone){ - css.push("gantt_milestone"); - } - - if(this._get_safe_type(task.type) == this.config.types.project){ - css.push("gantt_project"); - } - - if(this._is_flex_task(task)) - css.push("gantt_dependent_task"); - - if(this.config.select_task && itemId == state.selected_task) - css.push("gantt_selected"); - - if(itemId == state.drag_id) - css.push("gantt_drag_" + state.drag_mode); - - var links = gantt._get_link_state(); - if(links.link_source_id == itemId) - css.push("gantt_link_source"); - - if(links.link_target_id == itemId) - css.push("gantt_link_target"); - - if(links.link_landing_area && - (links.link_target_id && links.link_source_id) && - (links.link_target_id != links.link_source_id)){ - - var from_id = links.link_source_id; - var from_start = links.link_source_start; - var to_start = links.link_target_start; - - var allowDrag = gantt.isLinkAllowed(from_id, itemId, from_start, to_start); - - var dragClass = ""; - if(allowDrag){ - if(to_start) - dragClass = "link_start_allow"; - else - dragClass = "link_finish_allow"; - }else{ - if(to_start) - dragClass = "link_start_deny"; - else - dragClass = "link_finish_deny"; - } - css.push(dragClass); - } - return css.join(" "); -}; - -gantt._render_pair = function(parent, css, task, content){ - var state = gantt.getState(); - - if(+task.end_date <= +state.max_date) - parent.appendChild(content(css+" task_right")); - - if(+task.start_date >= +state.min_date) - parent.appendChild(content(css+" task_left")); -}; - -gantt._get_task_height = function(){ - // height of the bar item - var height = this.config.task_height; - if(height == "full") - height = this.config.row_height - 5; - //item height cannot be bigger than row height - height = Math.min(height, this.config.row_height); - return Math.max(height, 0); -}; - -gantt._get_milestone_width = function(){ - return this._get_task_height(); -}; -gantt._get_visible_milestone_width = function(){ - var origWidth = gantt._get_task_height();//m-s have square shape - return Math.sqrt(2*origWidth*origWidth); -}; - -gantt._get_task_width = function(task, start, end ){ - return Math.round(this._get_task_pos(task, false).x - this._get_task_pos(task, true).x); -}; - -gantt._render_task_element = function(task){ - var pos = this._get_task_pos(task); - - var cfg = this.config; - var height = this._get_task_height(); - - var padd = Math.floor((this.config.row_height - height)/2); - if(task.type == cfg.types.milestone && cfg.link_line_width > 1){ - //little adjust milestone position, so horisontal corners would match link arrow when thickness of link line is more than 1px - padd += 1; - } - - var div = document.createElement("div"); - var width = gantt._get_task_width(task); - - var type = this._get_safe_type(task.type); - - div.setAttribute(this.config.task_attribute, task.id); - //use separate div to display content above progress bar - div.appendChild(gantt._render_task_content(task, width)); - - div.className = this._combine_item_class("gantt_task_line", - this.templates.task_class(task.start_date, task.end_date, task), - task.id); - - - div.style.cssText = [ - "left:" + pos.x + "px", - "top:" + (padd + pos.y) + 'px', - "height:" + height + 'px', - "line-height:" + height + 'px', - "width:" + width + 'px' - ].join(";"); - - var side = this._render_leftside_content(task); - if(side) div.appendChild(side); - - side = this._render_rightside_content(task); - if(side) div.appendChild(side); - - if(cfg.show_progress && type != this.config.types.milestone){ - this._render_task_progress(task,div, width); - } - - - if(!this.config.readonly){ - if(cfg.drag_resize && !this._is_flex_task(task) && type != this.config.types.milestone){ - gantt._render_pair(div, "gantt_task_drag", task, function(css){ - var el = document.createElement("div"); - el.className = css; - return el; - }); - } - if(cfg.drag_links){ - gantt._render_pair(div, "gantt_link_control", task, function(css){ - var outer = document.createElement("div"); - outer.className = css; - outer.style.cssText = [ - "height:" + height + 'px', - "line-height:" + height + 'px' - ].join(";"); - var inner = document.createElement("div"); - inner.className = "gantt_link_point"; - outer.appendChild(inner); - return outer; - }); - } - } - return div; -}; - -gantt._render_side_content = function(task, template, cssClass){ - if(!template) return null; - - var text = template(task.start_date, task.end_date, task); - if(!text) return null; - var content = document.createElement("div"); - content.className = "gantt_side_content " + cssClass; - content.innerHTML = text; - return content; -}; - - - -gantt._render_leftside_content = function(task){ - var css = "gantt_left " + gantt._get_link_crossing_css(true, task); - return gantt._render_side_content(task, this.templates.leftside_text, css); -}; -gantt._render_rightside_content = function(task){ - var css = "gantt_right " + gantt._get_link_crossing_css(false, task); - return gantt._render_side_content(task, this.templates.rightside_text, css); -}; - -gantt._get_conditions = function(leftside){ - if(leftside){ - return { - $source : [ - gantt.config.links.start_to_start - ], - $target : [ - gantt.config.links.start_to_start, - gantt.config.links.finish_to_start - ] - }; - }else{ - return { - $source : [ - gantt.config.links.finish_to_start, - gantt.config.links.finish_to_finish - ], - $target : [ - gantt.config.links.finish_to_finish - ] - }; - } -}; - -gantt._get_link_crossing_css = function(left, task){ - var cond = gantt._get_conditions(left); - - for(var i in cond){ - var links = task[i]; - for(var ln =0; ln < links.length; ln++){ - var link = gantt.getLink(links[ln]); - - for(var tp =0; tp < cond[i].length; tp++){ - if(link.type == cond[i][tp]){ - return "gantt_link_crossing"; - } - } - } - } - return ""; -}; - - - -gantt._render_task_content = function(task, width){ - var content = document.createElement("div"); - if(this._get_safe_type(task.type) != this.config.types.milestone) - content.innerHTML = this.templates.task_text(task.start_date, task.end_date, task); - content.className = "gantt_task_content"; - //content.style.width = width + 'px'; - return content; -}; -gantt._render_task_progress = function(task, element, maxWidth){ - var done = task.progress*1 || 0; - - maxWidth = Math.max(maxWidth - 2, 0);//2px for borders - var pr = document.createElement("div"); - var width = Math.round(maxWidth*done); - - width = Math.min(maxWidth, width); - - pr.style.width = width + 'px'; - pr.className = "gantt_task_progress"; - pr.innerHTML = this.templates.progress_text(task.start_date, task.end_date, task); - element.appendChild(pr); - if(this.config.drag_progress && !gantt.config.readonly){ - var drag = document.createElement("div"); - drag.style.left = width + 'px'; - drag.className = "gantt_task_progress_drag"; - pr.appendChild(drag); - element.appendChild(drag); - } -}; -gantt._get_line = function(step) { - var steps = { - "second": 1, - "minute": 60, - "hour": 60*60, - "day": 60*60*24, - "week": 60*60*24*7, - "month": 60*60*24*30, - "year": 60*60*24*365 - }; - return steps[step] || 0; -}; - - -gantt._date_from_pos = function(x){ - var scale = this._tasks; - if(x < 0 || x > scale.full_width){ - return null; - } - var ind = 0; - var summ = 0; - while(summ + scale.width[ind] < x){ - summ += scale.width[ind]; - ind++; - } - var part = (x - summ)/scale.width[ind]; - - var unit = gantt._get_coll_duration(scale, scale.trace_x[ind]); - - - var date = new Date(scale.trace_x[ind].valueOf() + Math.round(part*unit)); - return date; -}; - -gantt.posFromDate = function(date){ - var ind = gantt._day_index_by_date(date); - dhtmlx.assert(ind >= 0, "Invalid day index"); - - var wholeCells = Math.floor(ind); - var partCell = ind % 1; - - var pos = 0; - for(var i=1; i <= wholeCells; i++) - pos += gantt._tasks.width[i-1]; - - if(partCell){ - if(wholeCells < gantt._tasks.width.length){ - pos += gantt._tasks.width[wholeCells]*(partCell % 1); - }else{ - pos += 1; - } - - } - return pos; -}; - -gantt._day_index_by_date = function(date){ - var pos = new Date(date); - var days = gantt._tasks.trace_x, - ignores = gantt._tasks.ignore_x; - - if(+pos <= this._min_date) - return 0; - - if(+pos >= this._max_date) - return days.length; - - for (var xind = 0; xind < days.length-1; xind++) { - // | 8:00, 8:30 | 8:15 should be checked against 8:30 - // clicking at the most left part of the cell, say 8:30 should create event in that cell, not previous one - if (+pos < days[xind+1] && !ignores[+days[xind+1]]) - break; - } - return xind + ((date - days[xind]) / gantt._get_coll_duration(gantt._tasks, days[xind])); -}; -gantt._get_coll_duration = function(scale, date){ - return gantt.date.add(date, scale.step, scale.unit) - date; -}; - -gantt._get_x_pos = function(task, to_start){ - to_start = to_start !== false; - var x = gantt.posFromDate(to_start ? task.start_date : task.end_date); - - - -}; - -gantt._get_task_coord = function(task, to_start, x_correction){ - to_start = to_start !== false; - x_correction = x_correction || 0; - - var isMilestone = (task.type == this.config.types.milestone); - var x = this.posFromDate((to_start || isMilestone) ? task.start_date : task.end_date), - y = this._y_from_ind(this._get_visible_order(task.id)); - - if(isMilestone){ - if(to_start){ - x -= x_correction; - }else{ - x += x_correction; - } - } - return {x:x, y:y}; -}; -gantt._get_task_pos = function(task, to_start){ - to_start = to_start !== false; - var mstoneCorrection = gantt._get_milestone_width()/2; - return this._get_task_coord(task, to_start, mstoneCorrection); -}; - -gantt._get_task_visible_pos = function(task, to_start){ - to_start = to_start !== false; - var mstoneCorrection = gantt._get_visible_milestone_width()/2; - return this._get_task_coord(task, to_start, mstoneCorrection); -}; - - -gantt._correct_shift=function(start, back){ - return start-=((new Date(gantt._min_date)).getTimezoneOffset()-(new Date(start)).getTimezoneOffset())*60000*(back?-1:1); -}; - - - -gantt._get_mouse_pos = function(ev){ - if (ev.pageX || ev.pageY) - var pos = {x:ev.pageX, y:ev.pageY}; - - var d = _isIE ? document.documentElement : document.body; - var pos = { - x:ev.clientX + d.scrollLeft - d.clientLeft, - y:ev.clientY + d.scrollTop - d.clientTop - }; - - var box = gantt._get_position(gantt.$task_data); - pos.x = pos.x - box.x + gantt.$task_data.scrollLeft; - pos.y = pos.y - box.y + gantt.$task_data.scrollTop; - return pos; -}; - -//helper for rendering bars and links -gantt._task_renderer = function(id, render_one, node, filter){ - //hash of dom elements is needed to redraw single bar/link - if(!this._task_area_pulls) - this._task_area_pulls = {}; - - if(!this._task_area_renderers) - this._task_area_renderers = {}; - - if(this._task_area_renderers[id]) - return this._task_area_renderers[id]; - - if(!render_one) - dhtmlx.assert(false, "Invalid renderer call"); - - this._task_area_renderers[id] = { - render_item : function(item, container){ - var pull = gantt._task_area_pulls[id]; - container = container || node; - - - if(filter){ - if(!filter(item)){ - this.remove_item(item.id); - return; - } - } - - var dom = render_one.call(gantt, item); - if(!dom) return; - if(pull[item.id]){ - this.replace_item(item.id, dom); - }else{ - pull[item.id] = dom; - container.appendChild(dom); - } - }, - render_items : function(items, container){ - this.rendered = gantt._task_area_pulls[id] = {}; - container = container || node; - container.innerHTML = ""; - var buffer = document.createDocumentFragment(); - for(var i= 0, vis = items.length; i < vis; i++){ - this.render_item(items[i], buffer); - } - container.appendChild(buffer); - }, - replace_item: function(item_id, newNode){ - var item = this.rendered[item_id]; - if(item && item.parentNode){ - item.parentNode.replaceChild(newNode, item); - } - this.rendered[item_id] = newNode; - }, - remove_item:function(item_id){ - var item = this.rendered[item_id]; - if(item && item.parentNode){ - item.parentNode.removeChild(item); - } - delete this.rendered[item_id]; - }, - change_id: function(oldid, newid) { - this.rendered[newid] = this.rendered[oldid]; - delete this.rendered[oldid]; - }, - rendered : this._task_area_pulls[id], - node: node - }; - - return this._task_area_renderers[id]; -}; - - - -gantt._pull = {}; -gantt._branches = {}; -gantt._order = []; -gantt._lpull = {}; - -gantt.load = function(url, type, callback){ - dhtmlx.assert(arguments.length, "Invalid load arguments"); - this.callEvent("onLoadStart", []); - var tp = 'json', cl = null; - if(arguments.length >= 3){ - tp = type; - cl = callback; - }else{ - if(typeof arguments[1] == "string") - tp = arguments[1]; - else if(typeof arguments[1] == "function") - cl = arguments[1]; - } - - dhtmlxAjax.get(url, dhtmlx.bind(function(l) { - this.on_load(l, tp); - if(typeof cl == "function") - cl.call(this); - }, this)); -}; -gantt.parse = function(data, type) { - this.on_load({xmlDoc: {responseText: data}}, type); -}; - -gantt.serialize = function(type){ - type = type || "json"; - return this[type].serialize(); -}; - -/* -tasks and relations -{ -data:[ - { - "id":"string", - "text":"...", - "start_date":"Date or string", - "end_date":"Date or string", - "duration":"number", - "progress":"0..1", - "parent_id":"string", - "order":"number" - },...], -links:[ - { - id:"string", - source:"string", - target:"string", - type:"string" - },...], -collections:{ - collectionName:[ - {key:, label:, optional:...},... - ],... - } -} - - gantt._pull - id to object hash - gantt._branch - array of per branch arrays of objects|ids - gantt._order - array of visible elements - gantt._order_full - array of all elements - - gantt._links -* */ - -gantt.on_load = function(resp, type){ - if(!type) - type = "json"; - dhtmlx.assert(this[type], "Invalid data type:'" + type + "'"); - - var raw = resp.xmlDoc.responseText; - - var data = this[type].parse(raw, resp); - this._process_loading(data); - this.callEvent("onLoadEnd", []); -}; - - - -gantt._process_loading = function(data){ - if(data.collections) - this._load_collections(data.collections); - - var tasks = data.data; - - for (var i = 0; i < tasks.length; i++) { - var task = tasks[i]; - this._init_task(task); - if (!this.callEvent("onTaskLoading", [task])) continue; - - this._pull[task.id] = task; - this._add_branch(task); - } - - - this._sync_order(); - - // calculating $level for each item - for (var i in this._pull) - this._pull[i].$level = this._item_level(this._pull[i]); - - this._init_links(data.links || (data.collections ? data.collections.links : [])); - -}; - - -gantt._init_links = function(links){ - if (links) - for(var i=0; i < links.length; i++){ - if(links[i]){ - var link = this._init_link(links[i]); - this._lpull[link.id] = link; - } - } - this._sync_links(); -}; - - -gantt._load_collections = function(collections){ - var collections_loaded = false; - for (var key in collections) { - if (collections.hasOwnProperty(key)) { - collections_loaded = true; - var collection = collections[key]; - var arr = this.serverList[key]; - if (!arr) continue; - arr.splice(0, arr.length); //clear old options - for (var j = 0; j < collection.length; j++) { - var option = collection[j]; - var obj = dhtmlx.copy(option); - obj.key = obj.value;// resulting option object - - for (var option_key in option) { - if (option.hasOwnProperty(option_key)) { - if (option_key == "value" || option_key == "label") - continue; - obj[option_key] = option[option_key]; // obj['value'] = option['value'] - } - } - arr.push(obj); - } - } - } - if (collections_loaded) - this.callEvent("onOptionsLoad", []); -}; - -gantt._sync_order = function() { - this._order = []; - this._sync_order_item({parent:this.config.root_id, $open:true, $ignore:true, id:this.config.root_id}); - - this._scroll_resize(); - this._set_sizes(); -}; -gantt.attachEvent("onBeforeTaskDisplay", function(id, task){ - return !task.$ignore; -}); -gantt._sync_order_item = function(item) { - - if(item.id && //do not trigger event for virtual root - this._filter_task(item.id, item) && - this.callEvent("onBeforeTaskDisplay", [item.id, item])){ - this._order.push(item.id); - } - - - if (item.$open) { - var children = this._branches[item.id]; - if (children) - for (var i = 0; i < children.length; i++) - this._sync_order_item(this._pull[children[i]]); - } -}; - -gantt._get_visible_order = function(id){ - dhtmlx.assert(id, "Invalid argument"); - var ord = this._order; - for(var i= 0, count = ord.length; i < count; i++) - if(ord[i] == id) return i; - - return -1; -}; - - - -gantt.eachTask = function(code, parent, master){ - parent = parent || this.config.root_id; - master = master || this; - - var branch = this._branches[parent]; - if (branch) - for (var i=0; i - - My task 1 - 16.08.2013 - 22.08.2013 - - - - - - - -*/ - -gantt.xml = { - _xmlNodeToJSON:function(node, attrs_only){ - var t = {}; - for (var i = 0; i < node.attributes.length; i++) - t[node.attributes[i].name] = node.attributes[i].value; - - if (!attrs_only){ - for (var i = 0; i < node.childNodes.length; i++) { - var child = node.childNodes[i]; - if (child.nodeType == 1) - t[child.tagName] = child.firstChild ? child.firstChild.nodeValue : ""; - } - - if (!t.text) t.text = node.firstChild ? node.firstChild.nodeValue : ""; - } - - return t; - }, - _getCollections:function(loader){ - var collection = {}; - var opts = loader.doXPath("//coll_options"); - for (var i = 0; i < opts.length; i++) { - var bind = opts[i].getAttribute("for"); - var arr = collection[bind] = []; - var itms = loader.doXPath(".//item", opts[i]); - for (var j = 0; j < itms.length; j++) { - var itm = itms[j]; - var attrs = itm.attributes; - var obj = { key: itms[j].getAttribute("value"), label: itms[j].getAttribute("label")}; - for (var k = 0; k < attrs.length; k++) { - var attr = attrs[k]; - if (attr.nodeName == "value" || attr.nodeName == "label") - continue; - obj[attr.nodeName] = attr.nodeValue; - } - arr.push(obj); - } - } - return collection; - }, - _getXML:function(text, loader, toptag){ - toptag = toptag || "data"; - if (!loader.getXMLTopNode){ - loader = new dtmlXMLLoaderObject(function() {}); - loader.loadXMLString(text); - } - - var xml = loader.getXMLTopNode(toptag); - if (xml.tagName != toptag) throw "Invalid XML data"; - - var skey = xml.getAttribute("dhx_security"); - if (skey) - dhtmlx.security_key = skey; - - return loader; - }, - parse:function(text, loader){ - loader = this._getXML(text, loader); - var data = { }; - - var evs = data.data = []; - var xml = loader.doXPath("//task"); - - for (var i = 0; i < xml.length; i++) - evs[i] = this._xmlNodeToJSON(xml[i]); - - data.collections = this._getCollections(loader); - return data; - }, - _copyLink:function(obj){ - return ""; - }, - _copyObject:function(obj){ - var start_date = gantt.templates.xml_format(obj.start_date); - var end_date = gantt.templates.xml_format(obj.end_date); - - return ""; - }, - serialize:function(){ - var tasks = []; - var links = []; - - gantt.eachTask(function(obj){ - tasks.push(this._copyObject(obj)); - },this.config.root_id, this); - for (var key in gantt._lpull) - links.push(this._copyLink(gantt._lpull[key])); - - return ""+tasks.join("")+""+links.join("")+""; - } -}; - - -gantt.oldxml = { - parse:function(text, loader){ - loader = gantt.xml._getXML(text, loader, "projects"); - var data = { collections:{ links:[] } }; - - var evs = data.data = []; - var xml = loader.doXPath("//task"); - for (var i = 0; i < xml.length; i++){ - evs[i] = gantt.xml._xmlNodeToJSON(xml[i]); - var parent = xml[i].parentNode; - - if (parent.tagName == "project") - evs[i].parent = "project-"+parent.getAttribute("id"); - else - evs[i].parent = parent.parentNode.getAttribute("id"); - } - - xml = loader.doXPath("//project"); - for (var i = 0; i < xml.length; i++){ - var ev = gantt.xml._xmlNodeToJSON(xml[i], true); - ev.id ="project-"+ev.id; - evs.push(ev); - } - - for (var i=0; i 0; - } - return false; - }, - is_work_hour:function(date){ - var hours = this.get_working_hours(date); - var hour = date.getHours(); - for(var i=0; i < hours.length; i += 2){ - if(hours[i+1] === undefined){ - return hours[i] == hour; - }else{ - if(hour >= hours[i] && hour < hours[i+1]) - return true; - } - } - return false; - }, - - get_working_hours:function(date){ - var t = this._timestamp({date:date}); - var hours = true; - if(this.dates[t] !== undefined){ - hours = this.dates[t];//custom day - }else if(this.dates[date.getDay()] !== undefined){ - hours = this.dates[date.getDay()];//week day - } - if(hours === true){ - return this.hours; - }else if(hours){ - return hours; - } - return []; - - - }, - - get_work_units_between:function(from, to, unit, step){ - if(!unit){ - return false; - } - var start = new Date(from), - end = new Date(to), - step = step || 1; - var units = 0; - while(start.valueOf() < end.valueOf()){ - if(this.is_working_unit(start, unit)) - units++; - start = gantt.date.add(start, step, unit); - } - return units; - }, - - add_worktime : function(from, duration, unit, step){ - if(!unit) - return false; - - var start = new Date(from), - added = 0, - step = step || 1, - duration = duration*1; - - while(added < duration){ - var next = gantt.date.add(start, step, unit); - if(this.is_working_unit(step > 0 ? start : next, unit)) - added++; - start = next; - } - return start; - }, - - /* settings: - { - date:date, - unit:'day'/'hour'..., - dir:'future'/'past'/'any'/'' - } - */ - get_closest_worktime : function(settings){ - if(this.is_working_unit(settings.date, settings.unit)) - return settings.date; - - var unit = settings.unit; - - var curr = gantt.date[unit + '_start'](settings.date); - - var future_target = new Date(curr), - prev_target = new Date(curr), - tick = true, - maximum_loop = 3000,//be extra sure we won't fall into infinite loop, 3k seems big enough - count = 0, - both_directins = (settings.dir == 'any' || !settings.dir); - - var inc = 1; - if(settings.dir == 'past') - inc = -1; - - //will seek closest working hour in future or in past, one step in one direction per iteration - while(!this.is_working_unit(curr, unit)){ - - if(both_directins){ - curr = tick ? future_target : prev_target; - inc = inc*(-1); - } - - curr = gantt.date.add(curr, inc, unit); - - if(both_directins){ - if(tick){ - future_target = curr; - }else{ - prev_target = curr; - } - } - tick = !tick; - count++; - if(count > maximum_loop){ - dhtmlx.assert(false, "Invalid working time check"); - return false; - } - } - - if(curr == prev_target || settings.dir == 'past'){ - curr = gantt.date.add(curr, 1, unit); - } - - return curr; - } - - -}; - -gantt.getTask = function(id) { - dhtmlx.assert(this._pull[id]); - return this._pull[id]; -}; -gantt.getTaskByTime = function(from, to){ - var p = this._pull, - res = [], - pos = 0, - taken = 0; - - if(!(from || to)){ - for (var t in p) res.push(p[t]); - }else{ - from = +from || -Infinity; - to = +to || Infinity; - for (var t in p){ - var task = p[t]; - if (+task.start_date < to && +task.end_date > from) - res.push(task); - } - } - - return res; -}; - -gantt.isTaskExists = function(id) { - return dhtmlx.defined(this._pull[id]); -}; - -gantt.isTaskVisible = function(id){ - if(!this._pull[id]) - return false; - - if(!(+this._pull[id].start_date < +this._max_date && +this._pull[id].end_date > +this._min_date)) - return false; - - for(var i= 0, count = this._order.length; i < count; i++) - if(this._order[i] == id) return true; - return false; -}; - - -gantt.updateTask = function(id, item) { - if (!dhtmlx.defined(item)) item = this.getTask(id); - if (this.callEvent("onBeforeTaskUpdate", [id, item])===false) return false; - - this._pull[item.id] = item; - if(!this._is_parent_sync(item)){ - this._resync_parent(item); - } - this._update_parents(item.id); - this.refreshTask(item.id); - - this.callEvent("onAfterTaskUpdate", [id, item]); - - this._sync_order(); - - this._adjust_scales(); -}; - -gantt._add_branch = function(task){ - if (!this._branches[task.parent]) - this._branches[task.parent] = []; - var branch = this._branches[task.parent]; - var added_already = false; - for(var i = 0, length = branch.length; i < length; i++){ - if(branch[i] == task.id){ - added_already = true; - break; - } - } - if(!added_already) - branch.push(task.id); - - this._sync_parent(task); - this._sync_order(); -}; - -gantt._move_branch = function(task, old_parent, new_parent){ - task.parent = new_parent; - this._sync_parent(task); - this._replace_branch_child(old_parent, task.id); - if(new_parent){ - - this._add_branch(task); - }else{ - delete this._branches[task.id]; - } - task.$level = this._item_level(task); - this._sync_order(); -}; -gantt._resync_parent = function(task){ - this._move_branch(task, task.$rendered_parent, task.parent); -}; -gantt._sync_parent = function(task){ - task.$rendered_parent = task.parent; -}; -gantt._is_parent_sync = function(task){ - return (task.$rendered_parent == task.parent); -}; - - -gantt._replace_branch_child = function(node, old_id, new_id){ - var branch = this._branches[node]; - if (branch){ - var newbranch = []; - for (var i=0; i 0) - this.deleteLink(item.$source[0]); - while (item.$target.length > 0) - this.deleteLink(item.$target[0]); - - delete this._pull[id]; - this._move_branch(item, item.parent, null); - - - if (!silent) { - this.callEvent("onAfterTaskDelete", [id, item]); - this.refreshData(); - } - return true; -}; - -gantt.clearAll = function() { - this._pull = {}; - this._branches = {}; - this._order = []; - this._order_full = []; - this._lpull = {}; - - this.refreshData(); - - this.callEvent("onClear", []); -}; - -gantt._update_flags = function(oldid, newid){ - // TODO: need a proper way to update all possible flags - if (this._lightbox_id == oldid) - this._lightbox_id = newid; - if (this._selected_task == oldid){ - this._selected_task = newid; - } - if (this._tasks_dnd.drag && this._tasks_dnd.drag.id == oldid){ - this._tasks_dnd.drag.id = newid; - } -}; -gantt.changeTaskId = function(oldid, newid) { - var item = this._pull[newid] = this._pull[oldid]; - this._pull[newid].id = newid; - delete this._pull[oldid]; - for (var id in this._pull) { - if (this._pull[id].parent == oldid) - this._pull[id].parent = newid; - } - this._update_flags(oldid, newid); - this._replace_branch_child(item.parent, oldid, newid); - - this.callEvent("onTaskIdChange", [oldid, newid]); -}; - -gantt._get_duration_unit = function(){ - return (gantt._get_line(this.config.duration_unit)*1000) || this.config.duration_unit; -}; - -gantt._get_safe_type = function(type){ - for(var i in this.config.types){ - if(this.config.types[i] == type){ - return type; - } - } - return gantt.config.types.task; -}; -gantt._get_type_name = function(type_value){ - for(var i in this.config.types){ - if(this.config.types[i] == type_value){ - return i; - } - } - return "task"; -}; -gantt.getWorkHours = function(date){ - return this._working_time_helper.get_working_hours(date); -}; - -gantt.setWorkTime = function(config){ - this._working_time_helper.set_time(config); -}; - -gantt.isWorkTime = function(date, unit){ - var helper = this._working_time_helper; - return helper.is_working_unit(date, unit || this.config.duration_unit); -}; - -gantt.getClosestWorkTime = function(config){ - var helper = this._working_time_helper; - if(config instanceof Date){ - config = { - date:config - }; - } - config.dir = config.dir || 'any'; - config.unit = config.unit || this.config.duration_unit; - return helper.get_closest_worktime(config); -}; - -gantt.calculateDuration = function(start_date, end_date){ - var helper = this._working_time_helper; - return helper.get_work_units_between(start_date, end_date, this.config.duration_unit, this.config.duration_step); -}; -gantt.calculateEndDate = function(start, duration, unit){ - var helper = this._working_time_helper; - var mult = duration >= 0 ? 1 : -1; - return helper.add_worktime(start, Math.abs(duration), this.config.duration_unit, mult*this.config.duration_step); -}; - -gantt._init_task = function(task){ - if (!dhtmlx.defined(task.id)) - task.id = dhtmlx.uid(); - - if(task.start_date) - task.start_date = gantt.date.parseDate(task.start_date, "xml_date"); - if(task.end_date) - task.end_date = gantt.date.parseDate(task.end_date, "xml_date"); - - - - if(task.start_date){ - if(!task.end_date && task.duration){ - task.end_date = this.calculateEndDate(task.start_date, task.duration); - } - } - - if(gantt.config.work_time && gantt.config.correct_work_time){ - if(task.start_date) - task.start_date = gantt.getClosestWorkTime(task.start_date); - if(task.end_date) - task.end_date = gantt.getClosestWorkTime(task.end_date); - } - gantt._init_task_timing(task); - - task.$source = []; - task.$target = []; - task.parent = task.parent || this.config.root_id; - task.$open = dhtmlx.defined(task.open) ? task.open : false; - task.$level = this._item_level(task); - return task; -}; - -gantt._init_task_timing = function(task){ - if(task.$rendered_type === undefined){ - task.$rendered_type = task.type; - }else if(task.$rendered_type != task.type){ - delete task.$no_end; - delete task.$no_start; - task.$rendered_type = task.type; - } - - if((task.$no_end === undefined || task.$no_start === undefined) && task.type != this.config.types.milestone){ - if(task.type == this.config.types.project){ - //project duration is always defined by children duration - task.$no_end = task.$no_start = true; - }else{ - //tasks can have fixed duration, children duration(as projects), or one date fixed, and other defined by nested items - task.$no_end = !(task.end_date || task.duration); - task.$no_start = !task.start_date; - } - } - - if(task.type == this.config.types.milestone){ - task.end_date = task.start_date; - } - if (task.start_date && task.end_date){ - task.duration = this.calculateDuration(task.start_date, task.end_date); - } - task.duration = task.duration || 0; -}; -gantt._is_flex_task = function(task){ - return !!(task.$no_end || task.$no_start); -}; - -gantt._update_parents = function(taskId, silent){ - if(!taskId) return; - - var task = this.getTask(taskId); - - while(!(task.$no_end || task.$no_start) && task.parent && this.isTaskExists(task.parent)){ - task = this.getTask(task.parent); - } - - if(task.$no_end){ - var max = 0; - this.eachTask(function(child){ - if(child.end_date && +child.end_date > +max){ - max = new Date(child.end_date); - } - }, task.id); - - if(max){ - task.end_date = max; - } - } - if(task.$no_start){ - var min = Infinity; - this.eachTask(function(child){ - if(child.start_date && +child.start_date < +min){ - min = new Date(child.start_date); - } - }, task.id); - - if(min != Infinity){ - task.start_date = min; - } - } - - if((task.$no_end || task.$no_start)){ - this._init_task_timing(task); - if(!silent) - this.refreshTask(task.id, true); - } - if(task.parent && this.isTaskExists(task.parent)){ - this._update_parents(task.parent, silent); - } -}; -gantt.isChildOf = function(child_id, parent_id){ - if(!this.isTaskExists(child_id)) - return false; - if(parent_id === this.config.root_id) - return this.isTaskExists(child_id); - - var task = this.getTask(child_id); - - while(task && this.isTaskExists(task.parent)){ - task = this.getTask(task.parent); - if(task && task.id == parent_id) - return true; - } - return false; -}; - -gantt._get_closest_date = function(config){ - var date = config.date, - steps = config.step, - unit = config.unit; - - var upper = gantt.date[unit + "_start"](new Date(this._min_date)); - while(+upper < +date){ - upper = gantt.date.add(upper, steps, unit); - } - - var lower = gantt.date.add(upper, -1*steps, unit); - if(config.dir && config.dir == 'future') - return upper; - if(config.dir && config.dir == 'past') - return lower; - - if(Math.abs(date - lower) < Math.abs(upper - date)){ - return lower; - }else{ - return upper; - } - -}; - - -gantt.attachEvent("onBeforeTaskUpdate", function(id, task){ - gantt._init_task_timing(task); - return true; -}); -gantt.attachEvent("onBeforeTaskAdd", function(id, task){ - gantt._init_task_timing(task); - return true; -}); - -gantt._item_level = function(item) { - var level = 0; - while (item.parent) { - if (!dhtmlx.defined(this._pull[item.parent])) break; - item = this._pull[item.parent]; - level++; - } - return level; -}; - - -gantt.sort = function(field, desc, parent) { - var render = !arguments[3];//4th argument to cancel redraw after sorting - - if (!dhtmlx.defined(parent)) { - parent = this.config.root_id; - } - - if (!dhtmlx.defined(field)) field = "order"; - var criteria = (typeof(field) == "string") ? (function(a, b) { - var result = a[field] > b[field]; - if (desc) result = !result; - return result ? 1 : -1; - }) : field; - - - var els = this._branches[parent]; - if (els){ - var temp = []; - for (var i = els.length - 1; i >= 0; i--) - temp[i] = this._pull[els[i]]; - - temp.sort(criteria); - - for (var i = 0; i < temp.length; i++) { - els[i] = temp[i].id; - this.sort(field, desc, els[i], true); - } - } - - if (render) { - this.refreshData(); - } -}; - -gantt.getNext = function(id) { - for (var i = 0; i < this._order.length-1; i++) { - if (this._order[i] == id) - return this._order[i+1]; - } - return null; -}; -gantt.getPrev = function(id) { - for (var i = 1; i < this._order.length; i++) { - if (this._order[i] == id) - return this._order[i-1]; - } - return null; -}; - -gantt._dp_init = function(dp) { - dp.setTransactionMode("POST", true); - dp.serverProcessor += (dp.serverProcessor.indexOf("?") != -1 ? "&" : "?") + "editing=true"; - dp._serverProcessor = dp.serverProcessor; - - dp.styles = { - updated:"gantt_updated", - inserted:"gantt_inserted", - deleted:"gantt_deleted", - invalid:"gantt_invalid", - error:"gantt_error", - clear:"" - }; - - dp._methods=["_row_style","setCellTextStyle","_change_id","_delete_task"]; - this.attachEvent("onAfterTaskAdd", function(id, item) { - dp._ganttMode = "tasks"; - dp.setUpdated(id,true,"inserted"); - }); - this.attachEvent("onAfterTaskUpdate", function(id, item) { - dp._ganttMode = "tasks"; - dp.setUpdated(id,true); - }); - this.attachEvent("onAfterTaskDelete", function(id, item) { - dp._ganttMode = "tasks"; - dp.setUpdated(id,true,"deleted"); - }); - - this.attachEvent("onAfterLinkUpdate", function(id, item) { - dp._ganttMode = "links"; - dp.setUpdated(id, true); - }); - this.attachEvent("onAfterLinkAdd", function(id, item) { - dp._ganttMode = "links"; - dp.setUpdated(id, true,"inserted"); - }); - this.attachEvent("onAfterLinkDelete", function(id, item) { - dp._ganttMode = "links"; - dp.setUpdated(id, true,"deleted"); - }); - this.attachEvent("onRowDragEnd", function(id, target) { - dp._ganttMode = "tasks"; - this.getTask(id).target = target; - dp.setUpdated(id, true,"order"); - }); - - dp.attachEvent("onBeforeDataSending", function() { - this.serverProcessor = this._serverProcessor + getUrlSymbol(this._serverProcessor) + "gantt_mode=" + this._ganttMode; - return true; - }); - - dp._getRowData=dhtmlx.bind(function(id, pref) { - var task; - if (dp._ganttMode == "tasks") - task = this.isTaskExists(id) ? this.getTask(id) : { id: id }; - else - task = this.isLinkExists(id) ? this.getLink(id) : { id: id }; - - var data = {}; - for (var key in task) { - if (key.substr(0, 1) == "$") continue; - var value = task[key]; - if (value instanceof Date) - data[key] = this.templates.xml_format(value); - else - data[key] = value; - } - if(task.$no_start){ - task.start_date = ""; - task.duration = ""; - } - if(task.$no_end){ - task.end_date = ""; - task.duration = ""; - } - data[dp.action_param] = this.getUserData(id, dp.action_param); - return data; - }, this); - - this._change_id = dhtmlx.bind(function(oldid, newid) { - if (dp._ganttMode != "tasks") - this.changeLinkId(oldid, newid); - else - this.changeTaskId(oldid, newid); - }, this); - - this._row_style = function(row_id, classname){ - if (dp._ganttMode != "tasks") return; - var el = gantt.getTaskRowNode(row_id); - if (!el) return; - if (!classname) { - var regexp = / (gantt_updated|gantt_inserted|gantt_deleted|gantt_invalid|gantt_error)/g; - el.className = el.className.replace(regexp, ""); - } else - el.className += " " + classname; - }; - - // fake method for dataprocessor - this._delete_task = function(row_id, node){}; - - this._dp = dp; -}; - -gantt.getUserData = function(id, name) { - if (!this.userdata) this.userdata = {}; - if (this.userdata[id] && this.userdata[id][name]) return this.userdata[id][name]; - return ""; -}; -gantt.setUserData = function(id, name, value) { - if (!this.userdata) this.userdata = {}; - if (!this.userdata[id]) this.userdata[id] = {}; - this.userdata[id][name] = value; -}; - - -gantt._init_link = function(link) { - if (!dhtmlx.defined(link.id)) - link.id = dhtmlx.uid(); - return link; -}; - -gantt._sync_links = function() { - for (var id in this._pull) { - this._pull[id].$source = []; - this._pull[id].$target = []; - } - for (var id in this._lpull) { - var link = this._lpull[id]; - if(this._pull[link.source]) - this._pull[link.source].$source.push(id); - if(this._pull[link.target]) - this._pull[link.target].$target.push(id); - } -}; - -gantt.getLink = function(id) { - dhtmlx.assert(this._lpull[id], "Link doesn't exist"); - return this._lpull[id]; -}; - -gantt.isLinkExists = function(id) { - return dhtmlx.defined(this._lpull[id]); -}; - -gantt.addLink = function(link) { - link = this._init_link(link); - - if (this.callEvent("onBeforeLinkAdd", [link.id, link])===false) return false; - - this._lpull[link.id] = link; - this._sync_links(); - this._render_link(link.id); - this.callEvent("onAfterLinkAdd", [link.id, link]); - return link.id; -}; - -gantt.updateLink = function(id, data) { - if (!dhtmlx.defined(data)) - data = this.getLink(id); - - if (this.callEvent("onBeforeLinkUpdate", [id, data]) === false) return false; - - this._lpull[id] = data; - this._sync_links(); - this._render_link(id); - this.callEvent("onAfterLinkUpdate", [id, data]); - return true; -}; - -gantt.deleteLink = function(id) { - return this._deleteLink(id); -}; - -gantt._deleteLink = function(id, silent) { - var link = this.getLink(id); - if (!silent && this.callEvent("onBeforeLinkDelete", [id, link])===false) return false; - - delete this._lpull[id]; - this._sync_links(); - this.refreshLink(id); - if (!silent) this.callEvent("onAfterLinkDelete", [id, link]); - return true; -}; - -gantt.changeLinkId = function(oldid, newid) { - this._lpull[newid] = this._lpull[oldid]; - this._lpull[newid].id = newid; - delete this._lpull[oldid]; - - this._sync_links(); - this.callEvent("onLinkIdChange", [oldid, newid]); -}; - - -gantt.getChildren = function(id) { - return dhtmlx.defined(this._branches[id]) ? this._branches[id] : []; -}; -gantt.hasChild = function(id) { - return dhtmlx.defined(this._branches[id]); -}; - - -gantt.refreshData = function(){ - this._sync_order(); - this._render_data(); -}; - - -gantt._configure = function(col, data){ - for (var key in data) - if (typeof col[key] == "undefined") - col[key] = data[key]; -}; -gantt._init_skin = function(){ - if (!gantt.skin){ - var links = document.getElementsByTagName("link"); - for (var i = 0; i < links.length; i++) { - var res = links[i].href.match("dhtmlxgantt_([a-z]+).css"); - if (res){ - gantt.skin = res[1]; - break; - } - } - } - - if (!gantt.skin) gantt.skin = "terrace"; - var skinset = gantt.skins[gantt.skin]; - - //apply skin related settings - this._configure(gantt.config, skinset.config); - - var config = gantt.config.columns; - if (config[1] && typeof config[1].width == "undefined") - config[1].width = skinset._second_column_width; - if (config[2] && typeof config[2].width == "undefined") - config[2].width = skinset._third_column_width; - - if (skinset._lightbox_template) - gantt._lightbox_template = skinset._lightbox_template; - - gantt._init_skin = function(){}; -}; -gantt.skins = {}; - - -gantt._lightbox_methods = {}; -gantt._lightbox_template="
 
"; - -gantt.showLightbox=function(id){ - if (!id || this.config.readonly) return; - if (!this.callEvent("onBeforeLightbox",[id])) return; - - var task = this.getTask(id); - - var box = this.getLightbox(this._get_safe_type(task.type)); - this._center_lightbox(box); - this.showCover(); - this._fill_lightbox(id,box); - this.callEvent("onLightbox",[id]); -}; -gantt._get_timepicker_step = function(){ - if(this.config.round_dnd_dates){ - var scale = gantt._tasks, - step = (this._get_line(scale.unit) * scale.step)/60;//timepicker step is measured in minutes - if(step >= 60*24){ - step = this.config.time_step; - } - return step; - } - return this.config.time_step; -}; -gantt.getLabel = function(property, key) { - var sections = this._get_typed_lightbox_config(); - for (var i=0; i
"+this.locale.labels[buttons[i]]+"
"; - - buttons = this.config.buttons_right; - for (var i in buttons) - html+="
"+this.locale.labels[buttons[i]]+"
"; - - html+=""; - d.innerHTML=html; - - if (gantt.config.drag_lightbox){ - d.firstChild.onmousedown = gantt._ready_to_dnd; - d.firstChild.onselectstart = function(){ return false; }; - d.firstChild.style.cursor = "pointer"; - gantt._init_dnd_events(); - - } - - document.body.insertBefore(d,document.body.firstChild); - this._lightbox=d; - - var sns = this._get_typed_lightbox_config(type); - html = this._render_sections(sns); - - var ds=d.getElementsByTagName("div"); - for (var i=0; i
"+this.locale.labels["button_"+sns[i].button]+"
"; - } - if (this.config.wide_form){ - html+="
"; - } - html+="
"+button+this.locale.labels["section_"+sns[i].name]+"
"+block.render.call(this,sns[i]); - html+="
"; - } - return html; -}; - - -gantt.resizeLightbox=function(){ - var d = this._lightbox; - if (!d) return; - - var con = d.childNodes[1]; - con.style.height="0px"; - con.style.height=con.scrollHeight+"px"; - d.style.height=con.scrollHeight+this.config.lightbox_additional_height+"px"; - con.style.height=con.scrollHeight+"px"; //it is incredible , how ugly IE can be - - -}; - -gantt._center_lightbox = function(box) { - if (box){ - box.style.display="block"; - - var scroll_top = window.pageYOffset||document.body.scrollTop||document.documentElement.scrollTop; - var scroll_left = window.pageXOffset||document.body.scrollLeft||document.documentElement.scrollLeft; - - var view_height = window.innerHeight||document.documentElement.clientHeight; - - if(scroll_top) // if vertical scroll on window - box.style.top=Math.round(scroll_top+Math.max((view_height-box.offsetHeight)/2, 0))+"px"; - else // vertical scroll on body - box.style.top=Math.round(Math.max(((view_height-box.offsetHeight)/2), 0) + 9)+"px"; // +9 for compatibility with auto tests - - // not quite accurate but used for compatibility reasons - if(document.documentElement.scrollWidth > document.body.offsetWidth) // if horizontal scroll on the window - box.style.left=Math.round(scroll_left+(document.body.offsetWidth-box.offsetWidth)/2)+"px"; - else // horizontal scroll on the body - box.style.left=Math.round((document.body.offsetWidth-box.offsetWidth)/2)+"px"; - } -}; -gantt.showCover = function(){ - if(this._cover) return; - - this._cover=document.createElement("DIV"); - this._cover.className="dhx_cal_cover"; - var _document_height = ((document.height !== undefined) ? document.height : document.body.offsetHeight); - var _scroll_height = ((document.documentElement) ? document.documentElement.scrollHeight : 0); - this._cover.style.height = Math.max(_document_height, _scroll_height) + 'px'; - document.body.appendChild(this._cover); -}; - - -gantt._init_lightbox_events = function(){ - gantt.lightbox_events = {}; - - - gantt.lightbox_events["dhx_save_btn"] = function(e) { - gantt._save_lightbox(); - }; - - - gantt.lightbox_events["dhx_delete_btn"] = function(e) { - if(!gantt.callEvent("onLightboxDelete", [gantt._lightbox_id])) - return; - - gantt.$click.buttons["delete"](gantt._lightbox_id); - }; - - - gantt.lightbox_events["dhx_cancel_btn"] = function(e) { - gantt._cancel_lightbox(); - }; - - - gantt.lightbox_events["default"] = function(e, src) { - if (src.getAttribute("dhx_button")) { - gantt.callEvent("onLightboxButton", [src.className, src, e]); - } else { - var index, block, sec; - if (src.className.indexOf("dhx_custom_button") != -1) { - if (src.className.indexOf("dhx_custom_button_") != -1) { - index = src.parentNode.getAttribute("index"); - sec = src.parentNode.parentNode; - } else { - index = src.getAttribute("index"); - sec = src.parentNode; - src = src.firstChild; - } - } - - var sections = gantt._get_typed_lightbox_config(); - - if (index) { - block = gantt.form_blocks[sections[index].type]; - block.button_click(index, src, sec, sec.nextSibling); - } - } - }; - dhtmlxEvent(gantt.getLightbox(), "click", function(e) { - e = e || window.event; - var src = e.target ? e.target : e.srcElement; - - if (!src.className) - src = src.previousSibling; - if (src && src.className && src.className.indexOf("dhx_btn_set") === 0) - src = src.firstChild; - if (src && src.className) { - var func = dhtmlx.defined(gantt.lightbox_events[src.className]) ? gantt.lightbox_events[src.className] : gantt.lightbox_events["default"]; - return func(e, src); - } - return false; - }); - - gantt.getLightbox().onkeydown=function(e){ - switch((e||event).keyCode){ - case gantt.keys.edit_save: - if ((e||event).shiftKey) return; - gantt._save_lightbox(); - break; - case gantt.keys.edit_cancel: - gantt._cancel_lightbox(); - break; - default: - break; - } - }; -}; - - -gantt._cancel_lightbox=function(){ - var task = this.getLightboxValues(); - this.callEvent("onLightboxCancel",[this._lightbox_id, task.$new]); - if(task.$new){ - this._deleteTask(task.id, true); - this.refreshData(); - } - this.hideLightbox(); -}; - -gantt._save_lightbox=function(){ - var task = this.getLightboxValues(); - if(!this.callEvent("onLightboxSave", [this._lightbox_id, task, !!task.$new])) - return; - - if (task.$new){ - delete task.$new; - this.addTask(task); - }else{ - dhtmlx.mixin(this.getTask(task.id), task, true); - this.updateTask(task.id); - } - this.refreshData(); - - // TODO: do we need any blockable events here to prevent closing lightbox? - this.hideLightbox(); -}; - -gantt.getLightboxValues=function(){ - var task = dhtmlx.mixin({}, this.getTask(this._lightbox_id)); - - var sns = this._get_typed_lightbox_config(); - for (var i=0; i < sns.length; i++) { - var node = document.getElementById(sns[i].id); - node=(node?node.nextSibling:node); - var block=this.form_blocks[sns[i].type]; - var res=block.get_value.call(this,node,task, sns[i]); - if (sns[i].map_to!="auto") - task[sns[i].map_to]=res; - } - return task; -}; - - -gantt.hideLightbox=function(id){ - var box = this.getLightbox(); - if (box) box.style.display="none"; - this._lightbox_id=null; - - this.hideCover(); - this.callEvent("onAfterLightbox",[]); -}; -gantt.hideCover=function(){ - if (this._cover) - this._cover.parentNode.removeChild(this._cover); - this._cover=null; -}; - -gantt.resetLightbox = function(){ - if (gantt._lightbox && !gantt._custom_lightbox) - gantt._lightbox.parentNode.removeChild(gantt._lightbox); - gantt._lightbox = null; -}; -gantt._set_lightbox_values = function(data, box){ - var task = data; - var s = box.getElementsByTagName("span"); - if (gantt.templates.lightbox_header) { - s[1].innerHTML = ""; - s[2].innerHTML = gantt.templates.lightbox_header(task.start_date, task.end_date, task); - } else { - s[1].innerHTML = this.templates.task_time(task.start_date, task.end_date, task); - s[2].innerHTML = (this.templates.task_text(task.start_date, task.end_date, task) || "").substr(0, 70); //IE6 fix - } - - - var sns = this._get_typed_lightbox_config(this.getLightboxType()); - for (var i = 0; i < sns.length; i++) { - var section = sns[i]; - - if(!this.form_blocks[section.type]){ - continue;//skip incorrect sections, same check is done during rendering - } - - - var node = document.getElementById(section.id).nextSibling; - var block = this.form_blocks[section.type]; - var value = dhtmlx.defined(task[section.map_to]) ? task[section.map_to] : section.default_value; - block.set_value.call(this, node, value, task, section); - if (section.focus) - block.focus.call(this, node); - } - if(data.id) - gantt._lightbox_id = data.id; -}; -gantt._fill_lightbox = function(id, box) { - var task = this.getTask(id); - this._set_lightbox_values(task, box); -}; - - -gantt.getLightboxSection = function(name){ - var config = this._get_typed_lightbox_config(); - var i =0; - for (i; i < config.length; i++) - if (config[i].name == name) - break; - var section = config[i]; - if (!this._lightbox) - this.getLightbox(); - var header = document.getElementById(section.id); - var node = header.nextSibling; - - var result = { - section: section, - header: header, - node: node, - getValue:function(ev){ - return this.form_blocks[section.type].get_value(node, (ev||{}), section); - }, - setValue:function(value, ev){ - return this.form_blocks[section.type].set_value(node, value, (ev||{}), section); - } - }; - - var handler = this._lightbox_methods["get_"+section.type+"_control"]; - return handler?handler(result):result; -}; - -gantt._lightbox_methods.get_template_control = function(result) { - result.control = result.node; - return result; -}; -gantt._lightbox_methods.get_select_control = function(result) { - result.control = result.node.getElementsByTagName('select')[0]; - return result; -}; -gantt._lightbox_methods.get_textarea_control = function(result) { - result.control = result.node.getElementsByTagName('textarea')[0]; - return result; -}; -gantt._lightbox_methods.get_time_control = function(result) { - result.control = result.node.getElementsByTagName('select'); // array - return result; -}; - - - - - -gantt._init_dnd_events = function(){ - dhtmlxEvent(document.body, "mousemove", gantt._move_while_dnd); - dhtmlxEvent(document.body, "mouseup", gantt._finish_dnd); - gantt._init_dnd_events = function(){}; -}; -gantt._move_while_dnd = function(e){ - if (gantt._dnd_start_lb){ - if (!document.dhx_unselectable){ - document.body.className += " dhx_unselectable"; - document.dhx_unselectable = true; - } - var lb = gantt.getLightbox(); - var now = (e&&e.target)?[e.pageX, e.pageY]:[event.clientX, event.clientY]; - lb.style.top = gantt._lb_start[1]+now[1]-gantt._dnd_start_lb[1]+"px"; - lb.style.left = gantt._lb_start[0]+now[0]-gantt._dnd_start_lb[0]+"px"; - } -}; -gantt._ready_to_dnd = function(e){ - var lb = gantt.getLightbox(); - gantt._lb_start = [parseInt(lb.style.left,10), parseInt(lb.style.top,10)]; - gantt._dnd_start_lb = (e&&e.target)?[e.pageX, e.pageY]:[event.clientX, event.clientY]; -}; -gantt._finish_dnd = function(){ - if (gantt._lb_start){ - gantt._lb_start = gantt._dnd_start_lb = false; - document.body.className = document.body.className.replace(" dhx_unselectable",""); - document.dhx_unselectable = false; - } -}; - - - - -gantt._focus = function(node, select){ - if (node && node.focus){ - if (gantt.config.touch){ - //do not focus editor, to prevent auto-zoom - } else { - if (select && node.select) node.select(); - node.focus(); - } - } -}; - - -gantt.form_blocks={ - getTimePicker: function(sns, hidden) { - var time_format = sns.time_format; - if (!time_format) { - // default order - var time_format = ["%d", "%m", "%Y"]; - if(gantt._get_line(gantt._tasks.unit) < gantt._get_line("day")){ - time_format.push("%H:%i"); - } - } - // map: default order => real one - sns._time_format_order = { size:0 }; - - - var cfg = this.config; - var dt = this.date.date_part(new Date(gantt._min_date.valueOf())); - var last = 24*60, first = 0; - if(gantt.config.limit_time_select){ - last = 60*cfg.last_hour+1; - first = 60*cfg.first_hour; - dt.setHours(cfg.first_hour); - } - var html = ""; - - for (var p = 0; p < time_format.length; p++) { - var time_option = time_format[p]; - - // adding spaces between selects - if (p > 0) { - html += " "; - } - - var options = ''; - switch (time_option) { - case "%Y": - sns._time_format_order[2] = p; - sns._time_format_order.size++; - //year - var year = dt.getFullYear()-5; //maybe take from config? - for (var i=0; i < 10; i++) - options+=""; - break; - case "%m": - sns._time_format_order[1] = p; - sns._time_format_order.size++; - //month - for (var i=0; i < 12; i++) - options+=""; - break; - case "%d": - sns._time_format_order[0] = p; - sns._time_format_order.size++; - //days - for (var i=1; i < 32; i++) - options+=""; - break; - case "%H:%i": - var last = 24*60, first = 0; - sns._time_format_order[3] = p; - sns._time_format_order.size++; - //hours - var i = first; - var tdate = dt.getDate(); - sns._time_values = []; - - while(i"+time+""; - sns._time_values.push(i); - dt.setTime(dt.valueOf()+this._get_timepicker_step()*60*1000); - var diff = (dt.getDate()!=tdate)?1:0; // moved or not to the next day - i=diff*24*60+dt.getHours()*60+dt.getMinutes(); - } - break; - default: - break; - } - - if(options){ - var readonly = sns.readonly ? "disabled='disabled'" : ""; - var display = hidden ? " style='display:none'" : ""; - html += ""; - } - } - return html; - }, - _fill_lightbox_select: function (s,i,d,map,cfg) { - s[i+map[0]].value=d.getDate(); - s[i+map[1]].value=d.getMonth(); - s[i+map[2]].value=d.getFullYear(); - if (dhtmlx.defined(map[3])) { - var v = d.getHours()*60+ d.getMinutes(); - v = Math.round(v/gantt._get_timepicker_step())*gantt._get_timepicker_step(); - s[i+map[3]].value= v; - } - }, - template:{ - render: function(sns){ - var height=(sns.height||"30")+"px"; - return "
"; - }, - set_value:function(node,value,ev,config){ - node.innerHTML = value||""; - }, - get_value:function(node,ev,config){ - return node.innerHTML||""; - }, - focus: function(node){ - } - }, - textarea:{ - render:function(sns){ - var height=(sns.height||"130")+"px"; - return "
"; - }, - set_value:function(node,value,ev){ - node.firstChild.value=value||""; - }, - get_value:function(node,ev){ - return node.firstChild.value; - }, - focus:function(node){ - var a=node.firstChild; gantt._focus(a, true); - } - }, - select:{ - render:function(sns){ - var height=(sns.height||"23")+"px"; - var html="
"; - return html; - }, - set_value:function(node,value,ev,sns){ - var select = node.firstChild; - if (!select._dhx_onchange && sns.onchange) { - select.onchange = sns.onchange; - select._dhx_onchange = true; - } - if (typeof value == "undefined") - value = (select.options[0]||{}).value; - select.value=value||""; - }, - get_value:function(node,ev){ - return node.firstChild.value; - }, - focus:function(node){ - var a=node.firstChild; gantt._focus(a, true); - } - }, - time:{ - render:function(sns) { - var time = this.form_blocks.getTimePicker.call(this, sns); - var parts = ["
"]; - parts.push(time); - - if(sns.single_date){ - time = this.form_blocks.getTimePicker.call(this, sns, true); - parts.push(""); - }else{ - parts.push("  –  "); - } - - parts.push(time); - parts.push("
"); - return parts.join(''); - }, - set_value:function(node,value,ev,config){ - var cfg = this.config; - var s=node.getElementsByTagName("select"); - - var map = config._time_format_order; - var map_size = config._time_format_size; - - if(cfg.auto_end_date) { - var _update_lightbox_select = function() { - var start_date = new Date(s[map[2]].value,s[map[1]].value,s[map[0]].value,0,0); - var end_date = gantt.calculateEndDate(start_date, 1); - this.form_blocks._fill_lightbox_select(s,map.size, end_date,map,cfg); - }; - for(var i=0; i<4; i++) { - s[i].onchange = _update_lightbox_select; - } - } - - this.form_blocks._fill_lightbox_select(s,0,ev.start_date,map,cfg); - this.form_blocks._fill_lightbox_select(s,map.size,ev.end_date,map,cfg); - }, - - get_value:function(node, ev, config) { - var s=node.getElementsByTagName("select"); - var map = config._time_format_order; - - var hours = 0, minutes = 0; - if (dhtmlx.defined(map[3])) { - var time = parseInt(s[map[3]].value, 10); - hours = Math.floor(time/60); - minutes = time%60; - } - ev.start_date=new Date(s[map[2]].value,s[map[1]].value,s[map[0]].value,hours,minutes); - - hours = minutes = 0; - if (dhtmlx.defined(map[3])) { - var time = parseInt(s[map.size+map[3]].value, 10); - hours = Math.floor(time/60); - minutes = time%60; - } - ev.end_date=new Date(s[map[2]+map.size].value,s[map[1]+map.size].value,s[map[0]+map.size].value,hours,minutes); - - if (ev.end_date<=ev.start_date) - ev.end_date=gantt.date.add(ev.start_date, gantt._get_timepicker_step(),"minute"); - return { - start_date: new Date(ev.start_date), - end_date: new Date(ev.end_date) - }; - }, - focus:function(node){ - gantt._focus(node.getElementsByTagName("select")[0]); - } - }, - duration:{ - render:function(sns) { - var time = this.form_blocks.getTimePicker.call(this, sns); - time = "
"+time+"
"; - var label = this.locale.labels[this.config.duration_unit + "s"]; - - var singleDate = sns.single_date ? ' style="display:none"' : ""; - var readonly = sns.readonly ? " disabled='disabled'" : ""; - - var duration = "
" + - "" + - "" + - " " + label + " " + - "
"; - var html = "
"+time+" "+duration+"
"; - return html; - }, - set_value:function(node,value,ev,config){ - var cfg = this.config; - var s=node.getElementsByTagName("select"); - var inps = node.getElementsByTagName("input"); - - var duration = inps[1]; - var btns=[inps[0],inps[2]]; - var endspan = node.getElementsByTagName("span")[0]; - - var map = config._time_format_order; - - function _calc_date() { - var start_date = gantt.form_blocks.duration._get_start_date.call(gantt, node ,config); - var duration = gantt.form_blocks.duration._get_duration.call(gantt, node ,config); - var end_date = gantt.calculateEndDate(start_date, duration); - - endspan.innerHTML = gantt.templates.task_date(end_date); - } - - function _change_duration(step) { - var value = duration.value; - value = parseInt(value, 10); - if (window.isNaN(value)) - value = 0; - value+=step; - if (value < 1) value = 1; - duration.value = value; - _calc_date(); - } - - btns[0].onclick = dhtmlx.bind(function() { _change_duration(-1*this.config.duration_step); }, this); - btns[1].onclick = dhtmlx.bind(function() { _change_duration(1*this.config.duration_step); }, this); - s[0].onchange = _calc_date; - s[1].onchange = _calc_date; - s[2].onchange = _calc_date; - if (s[3]) s[3].onchange = _calc_date; - duration.onkeydown = dhtmlx.bind(function(e) { - e = e || window.event; - // up - var code = (e.charCode || e.keyCode || e.which); - - if (code == 40) { - _change_duration(-1*this.config.duration_step); - return false; - } - // down - if (code == 38) { - _change_duration(1*this.config.duration_step); - return false; - } - window.setTimeout(function(e) { - _calc_date(); - }, 1); - }, this); - - duration.onchange = dhtmlx.bind(function(e) { _calc_date(); }, this); - - this.form_blocks._fill_lightbox_select(s,0,ev.start_date,map,cfg); - - var final_value; - - if (!ev.end_date) - final_value = ev.duration; - else - final_value = gantt.calculateDuration(ev.start_date, ev.end_date); - final_value = Math.round(final_value); - duration.value = final_value; - _calc_date(); - }, - - _get_start_date: function(node, config) { - var s=node.getElementsByTagName("select"); - var map = config._time_format_order; - var hours = 0; - var minutes = 0; - if (dhtmlx.defined(map[3])) { - var time = parseInt(s[map[3]].value, 10); - hours = Math.floor(time/60); - minutes = time%60; - } - return new Date(s[map[2]].value,s[map[1]].value,s[map[0]].value,hours,minutes); - }, - _get_duration: function(node, config) { - var duration = node.getElementsByTagName("input")[1]; - duration = parseInt(duration.value, 10); - if (window.isNaN(duration)) duration = 1; - if (duration < 0) duration *= -1; - return duration; - }, - - get_value:function(node, ev, config) { - ev.start_date = this.form_blocks.duration._get_start_date(node, config); - var duration = this.form_blocks.duration._get_duration(node, config); - - ev.end_date = this.calculateEndDate(ev.start_date, duration); - ev.duration = duration; - - return { - start_date: new Date(ev.start_date), - end_date: new Date(ev.end_date) - }; - }, - focus:function(node){ - gantt._focus(node.getElementsByTagName("select")[0]); - } - }, - typeselect : { - render : function(sns){ - var types = gantt.config.types, - locale = gantt.locale.labels, - options = []; - for(var i in types){ - options.push({key: types[i], label:locale["type_" + i]}); - } - sns.options = options; - - var oldOnChange = sns.onchange; - sns.onchange = function(){ - var tId = gantt.getState().lightbox; - - gantt.changeLightboxType(this.value); - if(typeof oldOnChange == 'function'){ - oldOnChange.apply(this, arguments); - } - }; - - return gantt.form_blocks.select.render.apply(this, arguments); - }, - set_value:function(){ - return gantt.form_blocks.select.set_value.apply(this, arguments); - }, - get_value:function(){ - return gantt.form_blocks.select.get_value.apply(this, arguments); - }, - focus:function(){ - return gantt.form_blocks.select.focus.apply(this, arguments); - } - }, - parent: { - _filter : function(options, config, item_id){ - var filter = config.filter || function(){ return true;}; - - options = options.slice(0); - - for(var i=0; i < options.length; i++){ - var task = options[i]; - if(task.id == item_id || gantt.isChildOf(task.id, item_id) || filter(task.id, task) === false){ - options.splice(i, 1); - i--; - } - } - return options; - }, - - _display : function(config, item_id){ - var tasks = [], - options = []; - if(item_id){ - tasks = gantt.getTaskByTime(); - if(config.allow_root){ - tasks.unshift({id:gantt.config.root_id, text:config.root_label || ""}); - } - tasks = this._filter(tasks, config, item_id); - if(config.sort){ - tasks.sort(config.sort); - } - } - var text = config.template || gantt.templates.task_text; - for(var i = 0; i < tasks.length; i++){ - var label = text.apply(gantt, [tasks[i].start_date, tasks[i].end_date, tasks[i]]); - if(label === undefined){ - label = ""; - } - options.push({ - key: tasks[i].id, - label: label - }); - } - config.options = options; - config.map_to = config.map_to || "parent"; - return gantt.form_blocks.select.render.apply(this, arguments); - }, - render : function(sns){ - return gantt.form_blocks.parent._display(sns, false); - }, - set_value:function(node,value,ev,config){ - var tmpDom = document.createElement("div"); - tmpDom.innerHTML = gantt.form_blocks.parent._display(config, ev.id); - var newOptions = tmpDom.removeChild(tmpDom.firstChild); - node.onselect = null; - node.parentNode.replaceChild(newOptions, node); - - return gantt.form_blocks.select.set_value.apply(this, [newOptions,value,ev,config]); - }, - get_value:function(){ - return gantt.form_blocks.select.get_value.apply(this, arguments); - }, - focus:function(){ - return gantt.form_blocks.select.focus.apply(this, arguments); - } - } -}; - -gantt._is_lightbox_timepicker = function() { - var s = this._get_typed_lightbox_config(); - for (var i = 0; i < s.length; i++) - if (s[i].name == "time" && s[i].type == "time") - return true; - return false; -}; - -gantt._dhtmlx_confirm = function(message, title, callback, ok) { - if (!message) - return callback(); - var opts = { text: message }; - if (title) - opts.title = title; - if(ok){ - opts.ok = ok; - } - if (callback) { - opts.callback = function(result) { - if (result) - callback(); - }; - } - dhtmlx.confirm(opts); -}; - -gantt._get_typed_lightbox_config = function(type){ - if(type === undefined){ - type = this.getLightboxType(); - } - - var field = this._get_type_name(type); - - if(gantt.config.lightbox[field+"_sections"]){ - return gantt.config.lightbox[field+"_sections"]; - }else{ - return gantt.config.lightbox.sections; - } -}; - -gantt._silent_redraw_lightbox = function(type){ - var oldType = this.getLightboxType(); - - if(this.getState().lightbox){ - var taskId = this.getState().lightbox; - var formData = this.getLightboxValues(), - task = dhtmlx.copy(this.getTask(taskId)); - - this.resetLightbox(); - - var updTask = dhtmlx.mixin(task, formData, true); - var box = this.getLightbox(type ? type : undefined); - - this._set_lightbox_values(updTask, box); - this._center_lightbox(this.getLightbox()); - this.callEvent("onLightboxChange", [oldType, this.getLightboxType()]); - }else{ - this.resetLightbox(); - this.getLightbox(type ? type : undefined); - } - this.callEvent("onLightboxChange", [oldType, this.getLightboxType()]); -}; -/** - * @desc: constructor, data processor object - * @param: serverProcessorURL - url used for update - * @type: public - */ -function dataProcessor(serverProcessorURL){ - this.serverProcessor = serverProcessorURL; - this.action_param="!nativeeditor_status"; - - this.object = null; - this.updatedRows = []; //ids of updated rows - - 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={ - /** - * @desc: select GET or POST transaction model - * @param: mode - GET/POST - * @param: total - true/false - send records row by row or all at once (for grid only) - * @type: public - */ - setTransactionMode:function(mode,total){ - this._tMode=mode; - this._tSend=total; - }, - escape:function(data){ - if (this._utf) - return encodeURIComponent(data); - else - return escape(data); - }, - /** - * @desc: allows to set escaping mode - * @param: true - utf based escaping, simple - use current page encoding - * @type: public - */ - enableUTFencoding:function(mode){ - this._utf=convertStringToBoolean(mode); - }, - /** - * @desc: allows to define, which column may trigger update - * @param: val - array or list of true/false values - * @type: public - */ - setDataColumns:function(val){ - this._columns=(typeof val == "string")?val.split(","):val; - }, - /** - * @desc: get state of updating - * @returns: true - all in sync with server, false - some items not updated yet. - * @type: public - */ - getSyncState:function(){ - return !this.updatedRows.length; - }, - /** - * @desc: enable/disable named field for data syncing, will use column ids for grid - * @param: mode - true/false - * @type: public - */ - enableDataNames:function(mode){ - this._endnm=convertStringToBoolean(mode); - }, - /** - * @desc: enable/disable mode , when only changed fields and row id send to the server side, instead of all fields in default mode - * @param: mode - true/false - * @type: public - */ - enablePartialDataSend:function(mode){ - this._changed=convertStringToBoolean(mode); - }, - /** - * @desc: set if rows should be send to server automaticaly - * @param: mode - "row" - based on row selection changed, "cell" - based on cell editing finished, "off" - manual data sending - * @type: public - */ - setUpdateMode:function(mode,dnd){ - this.autoUpdate = (mode=="cell"); - this.updateMode = mode; - this.dnd=dnd; - }, - ignore:function(code,master){ - this._silent_mode=true; - code.call(master||window); - this._silent_mode=false; - }, - /** - * @desc: mark row as updated/normal. check mandatory fields,initiate autoupdate (if turned on) - * @param: rowId - id of row to set update-status for - * @param: state - true for "updated", false for "not updated" - * @param: mode - update mode name - * @type: public - */ - setUpdated:function(rowId,state,mode){ - if (this._silent_mode) return; - var ind=this.findRow(rowId); - - mode=mode||"updated"; - var existing = this.obj.getUserData(rowId,this.action_param); - if (existing && mode == "updated") mode=existing; - if (state){ - this.set_invalid(rowId,false); //clear previous error flag - this.updatedRows[ind]=rowId; - this.obj.setUserData(rowId,this.action_param,mode); - if (this._in_progress[rowId]) - this._in_progress[rowId]="wait"; - } else{ - if (!this.is_invalid(rowId)){ - this.updatedRows.splice(ind,1); - this.obj.setUserData(rowId,this.action_param,""); - } - } - - //clear changed flag - if (!state) - this._clearUpdateFlag(rowId); - - this.markRow(rowId,state,mode); - if (state && this.autoUpdate) this.sendData(rowId); - }, - _clearUpdateFlag:function(id){}, - markRow:function(id,state,mode){ - var str=""; - var invalid=this.is_invalid(id); - if (invalid){ - str=this.styles[invalid]; - state=true; - } - if (this.callEvent("onRowMark",[id,state,mode,invalid])){ - //default logic - str=this.styles[state?mode:"clear"]+str; - - this.obj[this._methods[0]](id,str); - - if (invalid && invalid.details){ - str+=this.styles[invalid+"_cell"]; - for (var i=0; i < invalid.details.length; i++) - if (invalid.details[i]) - this.obj[this._methods[1]](id,i,str); - } - } - }, - getState:function(id){ - return this.obj.getUserData(id,this.action_param); - }, - is_invalid:function(id){ - return this._invalid[id]; - }, - set_invalid:function(id,mode,details){ - if (details) mode={value:mode, details:details, toString:function(){ return this.value.toString(); }}; - this._invalid[id]=mode; - }, - /** - * @desc: check mandatory fields and varify values of cells, initiate update (if specified) - * @param: rowId - id of row to set update-status for - * @type: public - */ - checkBeforeUpdate:function(rowId){ - return true; - }, - /** - * @desc: send row(s) values to server - * @param: rowId - id of row which data to send. If not specified, then all "updated" rows will be send - * @type: public - */ - sendData:function(rowId){ - if (this._waitMode && (this.obj.mytype=="tree" || this.obj._h2)) return; - if (this.obj.editStop) this.obj.editStop(); - - - if(typeof rowId == "undefined" || this._tSend) return this.sendAllData(); - if (this._in_progress[rowId]) return false; - - this.messages=[]; - if (!this.checkBeforeUpdate(rowId) && this.callEvent("onValidationError",[rowId,this.messages])) return false; - this._beforeSendData(this._getRowData(rowId),rowId); - }, - _beforeSendData:function(data,rowId){ - if (!this.callEvent("onBeforeUpdate",[rowId,this.getState(rowId),data])) return false; - this._sendData(data,rowId); - }, - serialize:function(data, id){ - if (typeof data == "string") - return data; - if (typeof id != "undefined") - return this.serialize_one(data,""); - else{ - var stack = []; - var keys = []; - for (var key in data) - if (data.hasOwnProperty(key)){ - stack.push(this.serialize_one(data[key],key+this.post_delim)); - keys.push(key); - } - stack.push("ids="+this.escape(keys.join(","))); - if (dhtmlx.security_key) - stack.push("dhx_security="+dhtmlx.security_key); - return stack.join("&"); - } - }, - serialize_one:function(data, pref){ - if (typeof data == "string") - return data; - var stack = []; - for (var key in data) - if (data.hasOwnProperty(key)) - stack.push(this.escape((pref||"")+key)+"="+this.escape(data[key])); - return stack.join("&"); - }, - _sendData:function(a1,rowId){ - if (!a1) return; //nothing to send - if (!this.callEvent("onBeforeDataSending",rowId?[rowId,this.getState(rowId),a1]:[null, null, a1])) return false; - - if (rowId) - this._in_progress[rowId]=(new Date()).valueOf(); - var a2=new dtmlXMLLoaderObject(this.afterUpdate,this,true); - - var a3 = this.serverProcessor+(this._user?(getUrlSymbol(this.serverProcessor)+["dhx_user="+this._user,"dhx_version="+this.obj.getUserData(0,"version")].join("&")):""); - - if (this._tMode!="POST") - a2.loadXML(a3+((a3.indexOf("?")!=-1)?"&":"?")+this.serialize(a1,rowId)); - else - a2.loadXML(a3,true,this.serialize(a1,rowId)); - - this._waitMode++; - }, - sendAllData:function(){ - if (!this.updatedRows.length) return; - - this.messages=[]; var valid=true; - for (var i=0; i task_width); - var scroll_ver = this._scroll_ver = resize.y ? false : (task_data_height > task_height); - - this.$scroll_hor.style.display = scroll_hor ? "block" : "none"; - this.$scroll_hor.style.height = (scroll_hor ? scroll_size : 0) + "px"; - this.$scroll_hor.style.width = (this._x - (scroll_ver ? scroll_size : 2)) + "px"; - this.$scroll_hor.firstChild.style.width = (task_data_width + grid_width + scroll_size + 2) + "px"; - - this.$scroll_ver.style.display = scroll_ver ? "block" : "none"; - this.$scroll_ver.style.width = (scroll_ver ? scroll_size : 0) + "px"; - this.$scroll_ver.style.height = (this._y - (scroll_hor ? scroll_size : 0) - this.config.scale_height) + "px"; - this.$scroll_ver.style.top = this.config.scale_height + "px"; - this.$scroll_ver.firstChild.style.height = (this.config.scale_height + task_data_height) + "px"; -}; - -gantt.locate = function(e) { - var trg = gantt._get_target_node(e); - - //ignore empty cells - if (trg.className == "gantt_task_cell") return null; - - var attribute = arguments[1] || this.config.task_attribute; - - while (trg){ - if (trg.getAttribute){ //text nodes has not getAttribute - var test = trg.getAttribute(attribute); - if (test) return test; - } - trg=trg.parentNode; - } - return null; -}; -gantt._get_target_node = function(e){ - var trg; - if (e.tagName) - trg = e; - else { - e=e||window.event; - trg=e.target||e.srcElement; - } - return trg; -}; -gantt._trim = function(str){ - var func = String.prototype.trim || function(){ return this.replace(/^\s+|\s+$/g, ""); }; - return func.apply(str); -}; - -gantt._locate_css = function(e, classname, strict){ - if(strict === undefined) - strict = true; - - var trg = gantt._get_target_node(e); - var css = ''; - var test = false; - while (trg){ - css = trg.className; - - if(css){ - var ind = css.indexOf(classname); - if (ind >= 0){ - if (!strict) - return trg; - - //check that we have exact match - var left = (ind === 0) || (!gantt._trim(css.charAt(ind - 1))); - var right = ((ind + classname.length >= css.length)) || (!gantt._trim(css.charAt(ind + classname.length))); - - if (left && right) - return trg; - } - } - - trg=trg.parentNode; - } - return null; -}; -gantt._locateHTML = function(e, attribute) { - var trg = gantt._get_target_node(e); - attribute = attribute || this.config.task_attribute; - - while (trg){ - if (trg.getAttribute){ //text nodes has not getAttribute - var test = trg.getAttribute(attribute); - if (test) return trg; - } - trg=trg.parentNode; - } - return null; -}; - -gantt.getTaskRowNode = function(id) { - var els = this.$grid_data.childNodes; - var attribute = this.config.task_attribute; - for (var i = 0; i < els.length; i++) { - if (els[i].getAttribute) { - var value = els[i].getAttribute(attribute); - if (value == id) return els[i]; - } - } - return null; -}; - -gantt.getState = function(){ - return { - drag_id : this._tasks_dnd.drag.id, - drag_mode : this._tasks_dnd.drag.mode, - drag_from_start : this._tasks_dnd.drag.left, - selected_task : this._selected_task, - min_date : new Date(this._min_date), - max_date : new Date(this._max_date), - lightbox : this._lightbox_id - }; - -}; - - -gantt._checkTimeout = function(host, updPerSecond){ - if(!updPerSecond) - return true; - var timeout = 1000/updPerSecond; - if(timeout < 1) return true; - - if(host._on_timeout) - return false; - - setTimeout(function(){ - delete host._on_timeout; - }, timeout); - - host._on_timeout = true; - return true; -}; - -gantt.selectTask = function(id){ - if(!this.config.select_task) - return false; - if (id){ - - if(this._selected_task == id) - return this._selected_task; - - if(!this.callEvent("onBeforeTaskSelected", [id])){ - return false; - } - - this.unselectTask(); - this._selected_task = id; - - this.refreshTask(id); - this.callEvent("onTaskSelected", [id]); - } - return this._selected_task; -}; -gantt.unselectTask = function(){ - var id = this._selected_task; - if(!id) - return; - this._selected_task = null; - this.refreshTask(id); - this.callEvent("onTaskUnselected", [id]); -}; -gantt.getSelectedId = function() { - return dhtmlx.defined(this._selected_task) ? this._selected_task : null; -}; - -gantt.changeLightboxType = function(type){ - if(this.getLightboxType() == type) - return true; - gantt._silent_redraw_lightbox(type); -}; - - - -gantt.date={ - init:function(){ - var s = gantt.locale.date.month_short; - var t = gantt.locale.date.month_short_hash = {}; - for (var i = 0; i < s.length; i++) - t[s[i]]=i; - - var s = gantt.locale.date.month_full; - var t = gantt.locale.date.month_full_hash = {}; - for (var i = 0; i < s.length; i++) - t[s[i]]=i; - }, - date_part:function(date){ - date.setHours(0); - date.setMinutes(0); - date.setSeconds(0); - date.setMilliseconds(0); - if (date.getHours()) - date.setTime(date.getTime() + 60 * 60 * 1000 * (24 - date.getHours())); - return date; - }, - time_part:function(date){ - return (date.valueOf()/1000 - date.getTimezoneOffset()*60)%86400; - }, - week_start:function(date){ - var shift=date.getDay(); - if (gantt.config.start_on_monday){ - if (shift===0) shift=6; - else shift--; - } - return this.date_part(this.add(date,-1*shift,"day")); - }, - month_start:function(date){ - date.setDate(1); - return this.date_part(date); - }, - year_start:function(date){ - date.setMonth(0); - return this.month_start(date); - }, - day_start:function(date){ - return this.date_part(date); - }, - hour_start:function(date){ - var hour = date.getHours(); - this.day_start(date); - date.setHours(hour); - return date; - }, - minute_start:function(date){ - var min = date.getMinutes(); - this.hour_start(date); - date.setMinutes(min); - return date; - }, - _add_days:function(date, inc){ - var ndate = new Date(date.valueOf()); - - ndate.setDate(ndate.getDate() + inc); - if (!date.getHours() && ndate.getHours()) //shift to yesterday - ndate.setTime(ndate.getTime() + 60 * 60 * 1000 * (24 - ndate.getHours())); - return ndate; - }, - - add:function(date,inc,mode){ - /*jsl:ignore*/ - var ndate=new Date(date.valueOf()); - switch(mode){ - case "day": - ndate = gantt.date._add_days(ndate, inc); - break; - case "week": - ndate = gantt.date._add_days(ndate, inc * 7); - break; - case "month": ndate.setMonth(ndate.getMonth()+inc); break; - case "year": ndate.setYear(ndate.getFullYear()+inc); break; - case "hour": - /* - adding hours/minutes via setHour(getHour() + inc) gives weird result when - adding one hour to the time before switch to a Daylight Saving time - - example: //Sun Mar 30 2014 01:00:00 GMT+0100 (W. Europe Standard Time) - new Date(2014, 02, 30, 1).setHours(2) - >>Sun Mar 30 2014 01:00:00 GMT+0100 (W. Europe Standard Time) - - setTime seems working as expected - */ - ndate.setTime(ndate.getTime()+inc * 60 * 60 * 1000); - break; - case "minute": - - ndate.setTime(ndate.getTime() + inc * 60 * 1000); - - break; - default: - return gantt.date["add_"+mode](date,inc,mode); - } - return ndate; - /*jsl:end*/ - }, - to_fixed:function(num){ - if (num<10) return "0"+num; - return num; - }, - copy:function(date){ - return new Date(date.valueOf()); - }, - date_to_str:function(format,utc){ - format=format.replace(/%[a-zA-Z]/g,function(a){ - switch(a){ - case "%d": return "\"+gantt.date.to_fixed(date.getDate())+\""; - case "%m": return "\"+gantt.date.to_fixed((date.getMonth()+1))+\""; - case "%j": return "\"+date.getDate()+\""; - case "%n": return "\"+(date.getMonth()+1)+\""; - case "%y": return "\"+gantt.date.to_fixed(date.getFullYear()%100)+\""; - case "%Y": return "\"+date.getFullYear()+\""; - case "%D": return "\"+gantt.locale.date.day_short[date.getDay()]+\""; - case "%l": return "\"+gantt.locale.date.day_full[date.getDay()]+\""; - case "%M": return "\"+gantt.locale.date.month_short[date.getMonth()]+\""; - case "%F": return "\"+gantt.locale.date.month_full[date.getMonth()]+\""; - case "%h": return "\"+gantt.date.to_fixed((date.getHours()+11)%12+1)+\""; - case "%g": return "\"+((date.getHours()+11)%12+1)+\""; - case "%G": return "\"+date.getHours()+\""; - case "%H": return "\"+gantt.date.to_fixed(date.getHours())+\""; - case "%i": return "\"+gantt.date.to_fixed(date.getMinutes())+\""; - case "%a": return "\"+(date.getHours()>11?\"pm\":\"am\")+\""; - case "%A": return "\"+(date.getHours()>11?\"PM\":\"AM\")+\""; - case "%s": return "\"+gantt.date.to_fixed(date.getSeconds())+\""; - case "%W": return "\"+gantt.date.to_fixed(gantt.date.getISOWeek(date))+\""; - default: return a; - } - }); - if (utc) format=format.replace(/date\.get/g,"date.getUTC"); - return new Function("date","return \""+format+"\";"); - }, - str_to_date:function(format,utc){ - var splt="var temp=date.match(/[a-zA-Z]+|[0-9]+/g);"; - var mask=format.match(/%[a-zA-Z]/g); - for (var i=0; i50?1900:2000);"; - break; - case "%g": - case "%G": - case "%h": - case "%H": - splt+="set[3]=temp["+i+"]||0;"; - break; - case "%i": - splt+="set[4]=temp["+i+"]||0;"; - break; - case "%Y": splt+="set[0]=temp["+i+"]||0;"; - break; - case "%a": - case "%A": splt+="set[3]=set[3]%12+((temp["+i+"]||'').toLowerCase()=='am'?0:12);"; - break; - case "%s": splt+="set[5]=temp["+i+"]||0;"; - break; - case "%M": splt+="set[1]=gantt.locale.date.month_short_hash[temp["+i+"]]||0;"; - break; - case "%F": splt+="set[1]=gantt.locale.date.month_full_hash[temp["+i+"]]||0;"; - break; - default: - break; - } - } - var code ="set[0],set[1],set[2],set[3],set[4],set[5]"; - if (utc) code =" Date.UTC("+code+")"; - return new Function("date","var set=[0,0,1,0,0,0]; "+splt+" return new Date("+code+");"); - }, - getISOWeek: function(ndate) { - if(!ndate) return false; - var nday = ndate.getDay(); - if (nday === 0) { - nday = 7; - } - var first_thursday = new Date(ndate.valueOf()); - first_thursday.setDate(ndate.getDate() + (4 - nday)); - var year_number = first_thursday.getFullYear(); // year of the first Thursday - var ordinal_date = Math.round( (first_thursday.getTime() - new Date(year_number, 0, 1).getTime()) / 86400000); //ordinal date of the first Thursday - 1 (so not really ordinal date) - var week_number = 1 + Math.floor( ordinal_date / 7); - return week_number; - }, - getUTCISOWeek: function(ndate){ - return this.getISOWeek(ndate); - }, - convert_to_utc: function(date) { - return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds()); - }, - parseDate: function(date, format) { - if (typeof(date) == "string") { - if (dhtmlx.defined(format)){ - if (typeof(format) == "string") - format = dhtmlx.defined(gantt.templates[format]) ? gantt.templates[format] : gantt.date.str_to_date(format); - else - format = gantt.templates.xml_date; - } - date = format(date); - } - return date; - } -}; -/* - %d - the day as a number with a leading zero ( 01 to 31 ); - %j - the day as a number without a leading zero ( 1 to 31 ); - %D - the day as an abbreviation ( Sun to Sat ); - %l - the day as a full name ( Sunday to Saturday ); - %W - the ISO-8601 week number of the year. Weeks start on Monday; 1) - %m - the month as a number without a leading zero ( 1 to 12 ); - %n - the month as a number with a leading zero ( 01 to 12); - %M - the month as an abbreviation ( Jan to Dec ); - %F - the month as a full name ( January to December ); - %y - the year as a two-digit number ( 00 to 99 ); - %Y - the year as a four-digit number ( 1900–9999 ); - %h - the hour based on the 12-hour clock ( 00 to 11 ); - %H - the hour based on the 24-hour clock ( 00 to 23 ); - %i - the minute as a number with a leading zero ( 00 to 59 ); - %s - the second as a number without a leading zero ( 00 to 59 ); 2) - %a - displays am (for times from midnight until noon) and pm (for times from noon until midnight); - %A - displays AM (for times from midnight until noon) and PM (for times from noon until midnight). - - */ - -if(!gantt.config) gantt.config = {}; -if(!gantt.config) gantt.config = {}; -if(!gantt.templates) gantt.templates = {}; - -(function(){ - -dhtmlx.mixin(gantt.config, - {links : { - "finish_to_start":"0", - "start_to_start":"1", - "finish_to_finish":"2", - "start_to_finish":"3" - }, - types : { - 'task':'task', - 'project':'project', - 'milestone':'milestone' - }, - duration_unit : "day", - work_time:false, - correct_work_time:false, - skip_off_time:false, - - autosize:false, - - show_links : true, - show_task_cells : true, - show_chart : true, - show_grid : true, - min_duration : 60*60*1000, - xml_date : "%d-%m-%Y %H:%i", - api_date : "%d-%m-%Y %H:%i", - start_on_monday: true, - server_utc : false, - show_progress:true, - fit_tasks : false, - select_task:true, - - readonly:false, - - /*grid */ - date_grid: "%Y-%m-%d", - - drag_links : true, - drag_progress:true, - drag_resize:true, - drag_move:true, - drag_mode:{ - "resize":"resize", - "progress":"progress", - "move":"move", - "ignore":"ignore" - }, - round_dnd_dates:true, - link_wrapper_width:20, - root_id:0, - - autofit: true, // grid column automatic fit - columns: [ - {name:"text", tree:true, width:'*' }, - {name:"start_date", align: "center" }, - {name:"duration", align: "center" }, - {name:"add", width:'44' } - ], - - /*scale*/ - step: 1, - scale_unit: "day", - subscales : [ - - ], - time_step: 60, - duration_step: 1, - date_scale: "%d %M", - task_date: "%d %F %Y", - time_picker: "%H:%i", - task_attribute: "task_id", - link_attribute: "link_id", - buttons_left: [ - "dhx_save_btn", - "dhx_cancel_btn" - ], - buttons_right: [ - "dhx_delete_btn" - ], - lightbox: { - sections: [ - {name: "description", height: 70, map_to: "text", type: "textarea", focus: true}, - {name: "time", height: 72, type: "duration", map_to: "auto"} - ], - project_sections: [ - {name: "description", height: 70, map_to: "text", type: "textarea", focus: true}, - {name: "type", type: "typeselect", map_to: "type"}, - {name: "time", height: 72, type: "duration", readonly:true, map_to: "auto"} - ], - milestone_sections: [ - {name: "description", height: 70, map_to: "text", type: "textarea", focus: true}, - {name: "type", type: "typeselect", map_to: "type"}, - {name: "time", height: 72, type: "duration", single_date:true, map_to: "auto"} - ] - }, - drag_lightbox: true, - sort: false, - details_on_create: true, - details_on_dblclick:true, - initial_scroll : true, - task_scroll_offset : 100, - - task_height: "full",//number px of 'full' for row height - min_column_width:70 -}); -gantt.keys={ - edit_save:13, - edit_cancel:27 -}; - -gantt._init_template = function(name, initial){ - var registeredTemplates = this._reg_templates || {}; - - if(this.config[name] && registeredTemplates[name] != this.config[name]){ - if(!(initial && this.templates[name])){ - this.templates[name] = this.date.date_to_str(this.config[name]); - registeredTemplates[name] = this.config[name]; - } - } - this._reg_templates = registeredTemplates; -}; -gantt._init_templates = function(){ - var labels = gantt.locale.labels; - labels.dhx_save_btn = labels.icon_save; - labels.dhx_cancel_btn = labels.icon_cancel; - labels.dhx_delete_btn = labels.icon_delete; - - - - //build configuration based templates - var d = this.date.date_to_str; - var c = this.config; - gantt._init_template("date_scale", true); - gantt._init_template("date_grid", true); - gantt._init_template("task_date", true); - - - - dhtmlx.mixin(this.templates,{ - xml_date:this.date.str_to_date(c.xml_date,c.server_utc), - xml_format:d(c.xml_date,c.server_utc), - api_date:this.date.str_to_date(c.api_date), - progress_text:function(start, end, task){return "";}, - grid_header_class : function(column, config){ - return ""; - }, - - task_text:function(start, end, task){ - return task.text; - }, - task_class:function(start, end, task){return "";}, - grid_row_class:function(start, end, task){ - return ""; - }, - task_row_class:function(start, end, task){ - return ""; - }, - task_cell_class:function(item, date){return "";}, - scale_cell_class:function(date){return "";}, - scale_row_class:function(date){return "";}, - - grid_indent:function(item) { - return "
"; - }, - grid_folder:function(item) { - return "
"; - }, - grid_file:function(item) { - return "
"; - }, - grid_open:function(item) { - return "
"; - }, - grid_blank:function(item) { - return "
"; - }, - - - task_time:function(start,end,ev){ - return gantt.templates.task_date(start)+" - "+gantt.templates.task_date(end); - }, - time_picker:d(c.time_picker), - link_class : function(link){ - return ""; - }, - link_description : function(link){ - var from = gantt.getTask(link.source), - to = gantt.getTask(link.target); - - return "" + from.text + "" + to.text+""; - }, - - drag_link : function(from, from_start, to, to_start) { - from = gantt.getTask(from); - var labels = gantt.locale.labels; - - var text = "" + from.text + " " + (from_start ? labels.link_start : labels.link_end)+"
"; - if(to){ - to = gantt.getTask(to); - text += " " + to.text + " "+ (to_start ? labels.link_start : labels.link_end)+"
"; - } - return text; - }, - drag_link_class: function(from, from_start, to, to_start) { - var add = ""; - - if(from && to){ - var allowed = gantt.isLinkAllowed(from, to, from_start, to_start); - add = " " + (allowed ? "gantt_link_allow" : "gantt_link_deny"); - } - - return "gantt_link_tooltip" + add; - } - }); - - this.callEvent("onTemplatesReady",[]); -}; - -})(); -if (window.jQuery){ - -(function( $ ){ - - var methods = []; - $.fn.dhx_gantt = function(config){ - config = config || {}; - if (typeof(config) === 'string') { - if (methods[config] ) { - return methods[config].apply(this, []); - }else { - $.error('Method ' + config + ' does not exist on jQuery.dhx_gantt'); - } - } else { - var views = []; - this.each(function() { - if (this && this.getAttribute){ - if (!this.getAttribute("dhxgantt")){ - for (var key in config) - if (key!="data") - gantt.config[key] = config[key]; - - gantt.init(this); - if (config.data) - gantt.parse(config.data); - - views.push(gantt); - } - } - }); - - - if (views.length === 1) return views[0]; - return views; - } - }; - -})(jQuery); - -} - -if (window.dhtmlx){ - - if (!dhtmlx.attaches) - dhtmlx.attaches = {}; - - dhtmlx.attaches.attachGantt=function(start, end){ - var obj = document.createElement("DIV"); - obj.id = "gantt_"+dhtmlx.uid(); - obj.style.width = "100%"; - obj.style.height = "100%"; - obj.cmp = "grid"; - - document.body.appendChild(obj); - this.attachObject(obj.id); - - var that = this.vs[this.av]; - that.grid = gantt; - - gantt.init(obj.id, start, end); - obj.firstChild.style.border = "none"; - - that.gridId = obj.id; - that.gridObj = obj; - - var method_name="_viewRestore"; - return this.vs[this[method_name]()].grid; - }; - -} -gantt.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:{ - new_task:"New task", - icon_save:"Save", - icon_cancel:"Cancel", - icon_details:"Details", - icon_edit:"Edit", - icon_delete:"Delete", - confirm_closing:"",//Your changes will be lost, are your sure ? - confirm_deleting:"Task will be deleted permanently, are you sure?", - section_description:"Description", - section_time:"Time period", - section_type:"Type", - - /* grid columns */ - - column_text : "Task name", - column_start_date : "Start time", - column_duration : "Duration", - column_add : "", - - /* link confirmation */ - link: "Link", - confirm_link_deleting:"will be deleted", - link_start: " (start)", - link_end: " (end)", - - type_task: "Task", - type_project: "Project", - type_milestone: "Milestone", - - minutes: "Minutes", - hours: "Hours", - days: "Days", - weeks: "Week", - months: "Months", - years: "Years" - } -}; - - - - -gantt.skins.skyblue = { - config:{ - grid_width:350, - row_height: 27, - scale_height: 27, - task_height: 24, - link_line_width:1, - link_arrow_size:8, - lightbox_additional_height:75 - }, - _second_column_width:95, - _third_column_width:80 -}; -gantt.skins.meadow = { - config:{ - grid_width:350, - row_height: 27, - scale_height: 30, - task_height:24, - link_line_width:2, - link_arrow_size:6, - lightbox_additional_height:72 - }, - _second_column_width:95, - _third_column_width:80 -}; - -gantt.skins.terrace = { - config:{ - grid_width:360, - row_height: 35, - scale_height: 35, - task_height: 24, - link_line_width:2, - link_arrow_size:6, - lightbox_additional_height:75 - }, - _second_column_width:90, - _third_column_width:70 -}; -gantt.skins.broadway = { - config:{ - grid_width:360, - row_height: 35, - scale_height: 35, - task_height: 24, - link_line_width:1, - link_arrow_size:7, - lightbox_additional_height:86 - }, - _second_column_width:90, - _third_column_width:80, - - _lightbox_template:"
 
", - _config_buttons_left: {}, - _config_buttons_right: { - "dhx_delete_btn": "icon_delete", - "dhx_save_btn": "icon_save" - } -}; - - -gantt.config.touch_drag = 50; //nearly immediate dnd -gantt.config.touch = true; - -gantt._init_touch_events = function(){ - if (this.config.touch != "force") - this.config.touch = this.config.touch && - ((navigator.userAgent.indexOf("Mobile")!=-1) || - (navigator.userAgent.indexOf("iPad")!=-1) || - (navigator.userAgent.indexOf("Android")!=-1) || - (navigator.userAgent.indexOf("Touch")!=-1)); - - if (this.config.touch){ - if (window.navigator.msPointerEnabled){ - this._touch_events(["MSPointerMove", "MSPointerDown", "MSPointerUp"], function(ev){ - if (ev.pointerType == ev.MSPOINTER_TYPE_MOUSE ) return null; - return ev; - }, function(ev){ - return (!ev || ev.pointerType == ev.MSPOINTER_TYPE_MOUSE); - }); - } else - this._touch_events(["touchmove", "touchstart", "touchend"], function(ev){ - if (ev.touches && ev.touches.length > 1) return null; - if (ev.touches[0]) - return { target:ev.target, pageX:ev.touches[0].pageX, pageY:ev.touches[0].pageY }; - else - return ev; - }, function(){ return false; }); - } -}; - - -//we can't use native scrolling, as we need to sync momentum between different parts -//so we will block native scroll and use the custom one -//in future we can add custom momentum -gantt._touch_events = function(names, accessor, ignore){ - //webkit on android need to be handled separately - var dblclicktime = 0; - var action_mode = false; - var scroll_mode = false; - var dblclick_timer = 0; - var action_start = null; - var scroll_state; - - //touch move - if (!this._gantt_touch_event_ready){ - this._gantt_touch_event_ready = 1; - dhtmlxEvent(document.body, names[0], function(e){ - if (ignore(e)) return; - - //ignore common and scrolling moves - if (!action_mode) return; - - var source = accessor(e); - if (source && action_start){ - var dx = action_start.pageX - source.pageX; - var dy = action_start.pageY - source.pageY; - if (!scroll_mode && (Math.abs(dx) > 5 || Math.abs(dy) > 5)){ - gantt._touch_scroll_active = scroll_mode = true; - dblclicktime = 0; - scroll_state = gantt.getScrollState(); - } - - if (scroll_mode){ - gantt.scrollTo(scroll_state.x + dx, scroll_state.y + dy); - } - } - return block_action(e); - }); - } - - - //common helper, prevents event - function block_action(e){ - if (e && e.preventDefault) - e.preventDefault(); - (e||event).cancelBubble = true; - return false; - } - - //block touch context menu in IE10 - dhtmlxEvent(this.$container, "contextmenu", function(e){ - if (action_mode) - return block_action(e); - }); - - //touch start - dhtmlxEvent(this.$container, names[1], function(e){ - if (ignore(e)) return; - if (e.touches && e.touches.length > 1){ - action_mode = false; - return; - } - - action_mode = true; - action_start = accessor(e); - - - - //dbl-tap handling - if (action_start && dblclicktime){ - var now = new Date(); - if ((now - dblclicktime) < 500 ){ - gantt._on_dblclick(action_start); - block_action(e); - } else - dblclicktime = now; - } else { - dblclicktime = new Date(); - } - }); - - //touch end - dhtmlxEvent(this.$container, names[2], function(e){ - if (ignore(e)) return; - gantt._touch_scroll_active = action_mode = scroll_mode = false; - }); -}; \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/dhtmlxgantt.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/dhtmlxgantt.js.map deleted file mode 100755 index 32b2025d67..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/dhtmlxgantt.js.map +++ /dev/null @@ -1,4 +0,0 @@ -/* -dhtmlxGantt v.2.1.1 Standard This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. (c) Dinamenta, UAB. -*/ -{"version":3,"file":"dhtmlxgantt.js.map","sources":["dhtmlxgantt.js"],"names":["dtmlXMLLoaderObject","funcObject","dhtmlObject","async","rSeed","this","xmlDoc","onloadAction","mainObject","waitCall","callerFunction","handler","e","window","event","getAbsoluteLeft","htmlObject","getOffset","left","getAbsoluteTop","top","getOffsetSum","elem","parseInt","offsetTop","offsetLeft","offsetParent","getOffsetRect","box","getBoundingClientRect","body","document","docElem","documentElement","scrollTop","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","Math","round","convertStringToBoolean","inputString","toLowerCase","getUrlSymbol","str","indexOf","dhtmlDragAndDropObject","dhtmlDragAndDrop","lastLanding","dragNode","dragStartNode","dragStartObject","tempDOMU","tempDOMM","waitDrag","_dhtmlxError","catches","dhtmlXHeir","a","b","c","dhtmlxEvent","el","addEventListener","attachEvent","dhtmlxDetachEvent","removeEventListener","detachEvent","dhtmlxDnD","obj","config","_settings","dhtmlxEventable","dhtmlx","bind","dragStart","dataProcessor","serverProcessorURL","serverProcessor","action_param","object","updatedRows","autoUpdate","updateMode","_tMode","post_delim","_waitMode","_in_progress","_invalid","mandatoryFields","messages","styles","updated","inserted","deleted","invalid","invalid_cell","error","clear","enableUTFencoding","extend_api","name","map","ext","t","that","tagName","apply","_init","arguments","_patch","prototype","dhtmlxAjax","get","url","callback","length","loadXML","post","getSync","postSync","count","waitLoadFunction","once","check","readyState","call","getXMLTopNode","oldObj","z","responseXML","temp","getElementsByTagName","split","_retry","_isIE","loadXMLString","responseText","replace","dhtmlxError","throwError","createElement","xmlString","silent","ActiveXObject","onreadystatechange","parser","DOMParser","parseFromString","filePath","postMode","postVars","rpc","Date","valueOf","XMLHttpRequest","open","setRequestHeader","navigator","userAgent","send","destructor","_filterXPath","_getAllNamedChilds","doXPath","doXPathOpera","doXSLTransToObject","doXSLTransToString","doSerialization","xmlNodeToJSON","setXSLParamValue","node","i","attributes","value","firstChild","nodeValue","childNodes","push","removeDraggableItem","htmlNode","onmousedown","dragStarter","dragLanding","addDraggableItem","preCreateDragCopy","addDragLanding","button","onmouseup","onmousemove","stopDrag","callDrag","downtime","preventDefault","dragger","_createDragNode","onselectstart","gldragNode","appendChild","pWindow","initFrameRoute","parentNode","grd","old","removeChild","oldBody","_dragOut","div","innerHTML","outerHTML","cloneNode","style","clientX","fx","clientY","fy","srcElement","target","checkLanding","calculateFramePosition","n","parent","frames","frameElement","ls","_dragIn","lastLanding_scr","_onNotFound","mode","stopFrameRoute","_drag","win","_isFF","_FFrv","_isOpera","_isKHTML","_isMacOS","_isChrome","_KHTMLrv","_OperaRv","parseFloat","substr","appName","appVersion","compatMode","xpathExp","docObj","namespace","result_type","XPathResult","nodeName","setProperty","selectSingleNode","selectNodes","Array","nodeObj","ownerDocument","retType","ANY_TYPE","FIRST_ORDERED_NODE_TYPE","rowsCol","col","evaluate","singleNodeValue","thisColMemb","iterateNext","catchError","type","func_name","params","alert","getAttribute","toUpperCase","j","xslDoc","paramName","paramValue","item","result","transformNodeToObject","transformNode","XSLProcessor","XSLTProcessor","importStylesheet","transformToDocument","res","xml","xmlSerializer","XMLSerializer","serializeToString","catcher","callObj","eventCatcher","addEvent","callEvent","arg0","checkEvent","dhx_catch","zr","ev","eval","removeEvent","id","list","detachAllEvents","usercall","modality","_dhx_msg_cfg","modal_key","code","which","keyCode","message","keyboard","cancelBubble","cover","onkeydown","className","scrollHeight","display","text","button_css","info","area","position","hide","onclick","insertBefore","expire","timers","setTimeout","pull","_boxStructure","ok","cancel","setAttribute","inner","width","height","title","content","buttons","getElementById","source","_createBox","hidden","x","abs","floor","innerWidth","offsetWidth","y","innerHeight","offsetHeight","focus","modalbox","alertPopup","confirmPopup","boxPopup","box_params","uid","confirm","subtype","seed","hideAll","key","clearTimeout","gantt","version","_silent_mode","_silentStart","_silentEnd","_eventCatcher","copy","Number","String","Boolean","Object","hasOwnProperty","mixin","force","f","defined","_seed","functor","_get_position","_detectScrollSize","cssText","clientWidth","_click","_dbl_click","_context_menu","_on_click","trg","locate","select_task","selectTask","_find_ev_handler","_on_contextmenu","src","taskId","linkId","link_attribute","hash","css","_on_dblclick","default_action","details_on_dblclick","showLightbox","_on_mousemove","_last_move_event","marker","started","pos","getPosition","sensitivity","mousemove","dragMove","limited_mousemove","dragScroll","updates_per_second","_checkTimeout","mouseup","dragEnd","diff_x","diff_y","distance","sqrt","pow","ignore","pageX","pageY","_init_grid","gantt_close","close","gantt_open","gantt_row","getTaskNode","max","task_scroll_offset","scrollTo","gantt_grid_head_cell","column","gantt_add","root_id","sort","_sort","direction","_render_grid_header","order_branch","_init_dnd","readonly","getTask","startDate","start_date","first","_order","getState","min_date","$open","locale","labels","new_task","templates","xml_format","duration","progress","details_on_create","$new","_pull","_init_task","_add_branch","$level","_item_level","refreshData","addTask","showTask","_render_grid","_is_grid_visible","_calc_grid_width","autofit","columns","cols_width","unknown","v","isNaN","diff","_get_grid_width","delta","index","cells","lineHeigth","scale_height","last","cssClass","grid_header_class","join","label","cell","$grid_scale","lineHeight","_render_grid_item","template","date_grid","tree","grid_indent","has_child","_branches","grid_open","grid_folder","grid_blank","grid_file","align","$index","grid_row_class","css_template","end_date","selected_task","row_height","task_attribute","_set_item_state","state","grid_width","show_grid","_is_chart_visible","_x","getTaskIndex","branch","getGlobalTaskIndex","moveTask","sid","tindex","tbranch","sindex","_replace_branch_child","tid","slice","concat","dnd","$grid_data","dnd_sensitivity","_locateHTML","hideQuickInfo","_hideQuickInfo","task","$transparent","lastTaskOfLevel","level","ids","last_item","len","dd","elementFromPoint","isTaskExists","over","next","prev","_scale_helpers","getSum","sizes","from","to","undefined","summ","setSumWidth","sum_width","scale","parts","oldWidth","adjustSize","full_width","splitSize","arr","full","shared","share","sortScales","scales","cellSize","unit","step","d","date","add","primaryScale","_init_template","scale_unit","date_scale","scale_cell_class","prepareConfigs","min_coll_width","container_width","heights","configs","main_scale","cfg","initScaleConfig","processIgnores","initColSizes","limitVisibleRange","unshift","alineScaleColumns","_ignore_time_config","skip_off_time","isWorkTime","display_count","ignore_x","ignore_time","trace_x","ignored_colls","min_col_width","line_height","cont_width","column_count","col_width","ignores","eachColumn","iterateScales","lower_scale","upper_scale","upper_dates","lower_dates","end","prevUpper","up","upper_start","upper_end","lower_start","lower_end","targetWidth","actualWidth","start","_min_date","_max_date","curr","dates","right","lastDate","outDate","_tasks_dnd","drag","_events","before_start","before_finish","after_finish","_handlers","init","clear_drag_state","drag_mode","set_actions","evs","stage","move","_move","resize","_resize","_resize_progress","data","$task_data","on_mouse_move","on_mouse_down","on_mouse_up","start_x","start_y","shift","coords_x","_drag_task_coords","_date_from_pos","max_date","min_duration","calculateEndDate","_init_task_timing","min","new_start","new_end","posFromDate","obj_s_x","obj_e_x","start_drag","_start_dnd","_update_on_move","_get_mouse_pos","curr_date","getTime","original","_update_parents","refreshTask","_trim","_get_drag_mode","_is_flex_task","_fix_dnd_scale_time","_tasks","round_dnd_dates","time_step","_get_closest_date","duration_unit","_fix_working_times","work_time","correct_work_time","getClosestWorkTime","dir","_fireEvent","drag_id","updateTask","_dhx_changed","modes","classes","classname","assert","trigger","_render_link","link","getLink","_linkRenderer","render_item","$task_links","_get_link_type","from_start","to_start","links","start_to_start","finish_to_start","start_to_finish","finish_to_finish","isLinkAllowed","_render_link_element","dots","_path_builder","get_points","drawer","_drawer","lines","get_lines","cssTemplate","link_class","size","link_arrow_size","render_line","endpoint","_render_link_arrow","point","line_width","dirs","down","current_pos","path","line_to","get_path","line","_get_line","get_wrapper_sizes","wrapper_size","link_wrapper_width","link_line_width","get_line_sizes","line_size","marginTop","marginLeft","wrapper","innerPos","get_direction","vect","_y_from_ind","current","point_to","pt","get_endpoint","xy","dy","e_y","dx","e_x","shiftX","forward","sign","types","_get_task_visible_pos","_init_links_dnd","getLinePos","_get_task_pos","_get_task_height","updateMarkedHtml","getDndState","drag_link_class","html","drag_link","advanceMarker","_link_source_task","_link_target_task","_link_source_task_start","_link_target_task_start","resetDndState","showDirectingLine","s_x","s_y","getDirectionLine","link_direction_class","dist","tan","angle","atan","coordinateCircleQuarter","PI","sin","cos","ieTransform","shiftLeft","shiftTop","sX","eX","sY","eY","_direction","removeDirectionLine","$task_bars","start_marker","end_marker","link_edge_marker","link_landing_hover_area","_locate_css","milestone","_get_visible_milestone_width","_get_milestone_width","_dir_start","landing","_is_link_drop_area","prevTarget","prevLanding","_link_landing","prevToStart","targ","_dir_end","targetChanged","addLink","_get_link_state","link_landing_area","link_target_id","link_target_start","link_source_id","link_source_start","_init_tasks","refreshId","renders","oldId","newId","change_id","columnWidth","rendered","gantt_task_link","_delete_link_handler","gantt_link_point","$target","$source","filter_grid_task","_create_filter","filter_chart_task","filter_link","_taskRenderer","_task_renderer","_render_task_element","_gridRenderer","_bgRenderer","_render_bg_line","$task_bg","render","_get_task_renderers","_get_link_renderers","filter_methods","filter_method","show_chart","_filter_task","_filter_link","show_links","isTaskVisible","question","link_description","confirm_link_deleting","_dhtmlx_confirm","deleteLink","touch","getLinkNode","_get_tasks_data","rows","_get_links_data","_lpull","_render_data","_update_layout_sizes","renderers","render_items","bar_height","$task","_init_tasks_range","root","Infinity","eachTask","child","_prepare_scale_html","date_to_str","cssclass","_render_tasks_scales","_scroll_resize","_set_sizes","scales_html","outer_width","data_width","helpers","subscales","_get_resize_options","avail_width","cfgs","min_column_width","scale_row_class","tplClass","$scroll_ver","$task_scale","show_task_cells","task_cell_class","odd","task_row_class","row","_adjust_scales","fit_tasks","old_min","old_max","refresh_links","remove_item","refreshLink","isLinkExists","_combine_item_class","basic","itemId","_get_safe_type","project","from_id","allowDrag","dragClass","_render_pair","task_height","origWidth","_get_task_width","padd","_render_task_content","task_class","side","_render_leftside_content","_render_rightside_content","show_progress","_render_task_progress","drag_resize","drag_links","outer","_render_side_content","_get_link_crossing_css","leftside_text","rightside_text","_get_conditions","leftside","cond","ln","tp","task_text","element","maxWidth","done","pr","progress_text","drag_progress","steps","second","minute","hour","day","week","month","year","ind","part","_get_coll_duration","_day_index_by_date","wholeCells","partCell","days","xind","_get_x_pos","_get_task_coord","x_correction","isMilestone","_get_visible_order","mstoneCorrection","_correct_shift","back","getTimezoneOffset","render_one","filter","_task_area_pulls","_task_area_renderers","container","dom","replace_item","items","buffer","createDocumentFragment","vis","item_id","newNode","replaceChild","oldid","newid","load","cl","l","on_load","parse","serialize","resp","raw","_process_loading","collections","_load_collections","tasks","_sync_order","_init_links","_init_link","_sync_links","collections_loaded","collection","serverList","splice","option","option_key","_sync_order_item","$ignore","children","ord","master","json","JSON","_temp","dhx_security","security_key","_copyLink","_copyObject","charAt","_xmlNodeToJSON","attrs_only","nodeType","_getCollections","loader","opts","itms","itm","attrs","k","attr","_getXML","toptag","skey","oldxml","startdate","est","enddate","predecessortasks","array","_working_time_helper","units","hours",6,"_get_unit_order","_timestamp","settings","timestamp","date_part","set_time","unset_time","is_working_unit","order","is_work_day","val","get_working_hours","is_work_hour","getHours","getDay","get_work_units_between","add_worktime","added","get_closest_worktime","future_target","prev_target","tick","maximum_loop","both_directins","inc","getTaskByTime","p","_is_parent_sync","_resync_parent","added_already","_sync_parent","_move_branch","old_parent","new_parent","$rendered_parent","old_id","new_id","newbranch","deleteTask","_deleteTask","_dp","setUpdateMode","branches","_update_flags","_ganttMode","setUpdated","clearAll","_order_full","_lightbox_id","_selected_task","changeTaskId","_get_duration_unit","_get_type_name","type_value","getWorkHours","setWorkTime","helper","calculateDuration","duration_step","mult","parseDate","$rendered_type","$no_end","$no_start","isChildOf","child_id","parent_id","upper","lower","field","desc","criteria","els","getNext","getPrev","_dp_init","dp","setTransactionMode","_serverProcessor","_methods","_getRowData","getUserData","_change_id","changeLinkId","_row_style","row_id","getTaskRowNode","regexp","_delete_task","userdata","setUserData","updateLink","_deleteLink","getChildren","hasChild","_configure","_init_skin","skin","href","match","skinset","skins","_second_column_width","_third_column_width","_lightbox_template","_lightbox_methods","getLightbox","_center_lightbox","showCover","_fill_lightbox","_get_timepicker_step","getLabel","property","sections","_get_typed_lightbox_config","map_to","options","updateCollection","list_name","resetLightbox","getLightboxType","_lightbox_type","_lightbox","_is_lightbox_timepicker","wide_form","visibility","buttons_left","buttons_right","drag_lightbox","_ready_to_dnd","cursor","_init_dnd_events","sns","_render_sections","ds","t_ds","resizeLightbox","_init_lightbox_events","block","form_blocks","con","lightbox_additional_height","scroll_top","scroll_left","view_height","clientHeight","scrollWidth","_cover","_document_height","_scroll_height","lightbox_events","_save_lightbox","$click","_cancel_lightbox","sec","button_click","nextSibling","previousSibling","func","keys","edit_save","shiftKey","edit_cancel","getLightboxValues","hideLightbox","get_value","hideCover","_custom_lightbox","_set_lightbox_values","s","lightbox_header","task_time","section","default_value","set_value","getLightboxSection","header","getValue","setValue","get_template_control","control","get_select_control","get_textarea_control","get_time_control","_move_while_dnd","_finish_dnd","_dnd_start_lb","dhx_unselectable","lb","now","_lb_start","_focus","select","getTimePicker","time_format","_time_format_order","dt","limit_time_select","last_hour","first_hour","setHours","time_option","getFullYear","month_full","tdate","getDate","_time_values","time","time_picker","setTime","getMinutes","_fill_lightbox_select","getMonth","textarea","_dhx_onchange","onchange","single_date","_time_format_size","auto_end_date","_update_lightbox_select","minutes","singleDate","_calc_date","_get_start_date","_get_duration","endspan","task_date","_change_duration","inps","btns","charCode","final_value","typeselect","oldOnChange","lightbox","changeLightboxType","_filter","_display","allow_root","root_label","tmpDom","newOptions","onselect","_silent_redraw_lightbox","oldType","formData","updTask","total","_tSend","escape","_utf","encodeURIComponent","setDataColumns","_columns","getSyncState","enableDataNames","_endnm","enablePartialDataSend","_changed","rowId","findRow","existing","set_invalid","is_invalid","_clearUpdateFlag","markRow","sendData","details","toString","checkBeforeUpdate","mytype","_h2","editStop","sendAllData","_beforeSendData","_sendData","serialize_one","stack","pref","a1","a2","afterUpdate","a3","_user","valid","_getAllData","out","has_one","setVerificator","verifFunction","clearVerificator","pattern","defineAction","_uActions","afterUpdateCallback","action","btag","correct","soid","atag","finalizeUpdate","anObj","setOnAfterUpdate","enableDebug","setOnBeforeUpdateHandler","setAutoUpdate","interval","user","_need_update","_loader","_update_busy","xml_node","afterAutoUpdate","fullSync","self","setInterval","loadUpdate","getUpdates","_v","_a","vers","upds","status","scroll_size","_reinit","_on_resize","$container","_init_html_area","_init_touch_events","_init_templates","_set_scroll_events","_obj","childs","$grid","$scroll_hor","edit","delete","confirm_deleting","confirm_deleting_title","_calculate_content_height","rows_height","hor_scroll_height","_scroll_hor","_calculate_content_width","chart_width","_scroll_ver","autosize","_y","dataHeight","gridWidth","getScrollState","showDate","date_x","scroll_to","setSizes","initial_scroll","_touch_scroll_active","barLeft","barTop","wheelDeltaX","wheelDelta","detail","task_width","task_data_width","task_data_height","scroll_hor","scroll_ver","_get_target_node","attribute","test","trim","strict","drag_from_start","host","updPerSecond","timeout","_on_timeout","unselectTask","getSelectedId","month_short","month_short_hash","month_full_hash","setMinutes","setSeconds","setMilliseconds","time_part","week_start","start_on_monday","month_start","setDate","year_start","setMonth","day_start","hour_start","minute_start","_add_days","ndate","setYear","to_fixed","num","format","utc","Function","str_to_date","splt","mask","getISOWeek","nday","first_thursday","year_number","ordinal_date","week_number","getUTCISOWeek","convert_to_utc","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","xml_date","api_date","server_utc","drag_move","project_sections","milestone_sections","initial","registeredTemplates","_reg_templates","dhx_save_btn","icon_save","dhx_cancel_btn","icon_cancel","dhx_delete_btn","icon_delete","link_start","link_end","allowed","jQuery","$","methods","fn","dhx_gantt","views","each","attaches","attachGantt","cmp","attachObject","vs","av","grid","border","gridId","gridObj","method_name","day_full","day_short","icon_details","icon_edit","confirm_closing","section_description","section_time","section_type","column_text","column_start_date","column_duration","column_add","type_task","type_project","type_milestone","weeks","months","years","skyblue","meadow","terrace","broadway","_config_buttons_left","_config_buttons_right","touch_drag","msPointerEnabled","_touch_events","pointerType","MSPOINTER_TYPE_MOUSE","touches","names","accessor","block_action","scroll_state","dblclicktime","action_mode","scroll_mode","action_start","_gantt_touch_event_ready"],"mappings":"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"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/ext/dhtmlxgantt_quick_info.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/ext/dhtmlxgantt_quick_info.js deleted file mode 100755 index 22fb18a45c..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/ext/dhtmlxgantt_quick_info.js +++ /dev/null @@ -1,181 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.config.quickinfo_buttons = ["icon_delete","icon_edit"]; -gantt.config.quick_info_detached = true; - -gantt.attachEvent("onTaskClick", function(id){ - gantt.showQuickInfo(id); - return true; -}); - -(function(){ - var events = ["onEmptyClick", "onViewChange", "onLightbox", "onBeforeTaskDelete", "onBeforeDrag"]; - var hiding_function = function(){ - gantt._hideQuickInfo(); - return true; - }; - for (var i=0; i" + - "
" + - "" + - "
"; - - //buttons - html += "
"; - var buttons = gantt.config.quickinfo_buttons; - for (var i = 0; i < buttons.length; i++) - html += "
"+gantt.locale.labels[buttons[i]]+"
"; - html += "
"; - - qi.innerHTML = html; - dhtmlxEvent(qi, "click", function(ev){ - ev = ev || event; - gantt._qi_button_click(ev.target || ev.srcElement); - }); - if (gantt.config.quick_info_detached) - dhtmlxEvent(gantt.$task_data, "scroll", function(){ gantt.hideQuickInfo(); }); - } - - return this._quick_info_box; -}; - -gantt._qi_button_click = function(node){ - var box = gantt._quick_info_box; - if (!node || node == box) return; - - var mask = node.className; - if (mask.indexOf("_icon")!=-1){ - var id = gantt._quick_info_box_id; - gantt.$click.buttons[mask.split(" ")[1].replace("icon_","")](id); - } else - gantt._qi_button_click(node.parentNode); -}; -gantt._get_event_counter_part = function(id){ - var domEv = gantt.getTaskNode(id); - var left = 0; - var top = 0; - - var node = domEv; - while (node && node.className != "gantt_task"){ - left += node.offsetLeft; - top += node.offsetTop; - node = node.offsetParent; - } - var scroll = this.getScrollState(); - if(node){ - var dx = (left + domEv.offsetWidth/2) - scroll.x > (gantt._x/2) ? 1 : 0; - var dy = (top + domEv.offsetHeight/2) - scroll.y > (gantt._y/2) ? 1 : 0; - - return { left:left, top:top, dx:dx, dy:dy, - width:domEv.offsetWidth, height:domEv.offsetHeight }; - } - return 0; -}; - -gantt._fill_quick_data = function(id){ - var ev = gantt.getTask(id); - var qi = gantt._quick_info_box; - - gantt._quick_info_box_id = id; - -//title content - var titleContent = qi.firstChild.firstChild; - titleContent.innerHTML = gantt.templates.quick_info_title(ev.start_date, ev.end_date, ev); - var titleDate = titleContent.nextSibling; - titleDate.innerHTML = gantt.templates.quick_info_date(ev.start_date, ev.end_date, ev); - -//main content - var main = qi.firstChild.nextSibling; - main.innerHTML = gantt.templates.quick_info_content(ev.start_date, ev.end_date, ev); -}; diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/ext/dhtmlxgantt_quick_info.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/ext/dhtmlxgantt_quick_info.js.map deleted file mode 100755 index 0244093f93..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/ext/dhtmlxgantt_quick_info.js.map +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -{"version":3,"file":"dhtmlxgantt_quick_info.js.map","sources":["dhtmlxgantt_quick_info.js"],"names":["gantt","config","quickinfo_buttons","quick_info_detached","attachEvent","id","showQuickInfo","events","hiding_function","_hideQuickInfo","i","length","templates","quick_info_title","start","end","ev","text","substr","quick_info_content","details","quick_info_date","task_time","this","_quick_info_box_id","hideQuickInfo","pos","_get_event_counter_part","_quick_info_box","_init_quick_info","_fill_quick_data","_show_quick_info","forced","qi","parentNode","removeChild","style","right","left","dhtmlxEvent","window","e","keyCode","nodeName","toLowerCase","$task_data","appendChild","width","offsetWidth","height","offsetHeight","scrolls","getScrollState","screen_width","$task","x","Math","min","max","dx","top","dy","setTimeout","className","replace","_obj","document","createElement","$testmode","html","buttons","locale","labels","innerHTML","event","_qi_button_click","target","srcElement","node","box","mask","indexOf","$click","split","domEv","getTaskNode","offsetLeft","offsetTop","offsetParent","scroll","_x","y","_y","getTask","titleContent","firstChild","start_date","end_date","titleDate","nextSibling","main"],"mappings":"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"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/ext/dhtmlxgantt_tooltip.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/ext/dhtmlxgantt_tooltip.js deleted file mode 100755 index a87db87c96..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/ext/dhtmlxgantt_tooltip.js +++ /dev/null @@ -1,145 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt._tooltip = {}; -gantt._tooltip_class = "gantt_tooltip"; -gantt.config.tooltip_timeout = 30;//, - // timeout_to_hide: 50, - // delta_x: 15, - // delta_y: -20 - -gantt._create_tooltip = function(){ - if (!this._tooltip_html){ - this._tooltip_html = document.createElement('div'); - this._tooltip_html.className = gantt._tooltip_class; - } - return this._tooltip_html; -}; - -gantt._show_tooltip = function(text, pos) { - if (gantt.config.touch && !gantt.config.touch_tooltip) return; - - var tip = this._create_tooltip(); - - tip.innerHTML = text; - gantt.$task_data.appendChild(tip); - - var width = tip.offsetWidth + 20; - var height = tip.offsetHeight + 40; - var max_height = this.$task.offsetHeight; - var max_width = this.$task.offsetWidth; - var scroll = this.getScrollState(); - - pos.x += scroll.x; - pos.y += scroll.y; - - pos.y = Math.min(Math.max(scroll.y, pos.y), scroll.y+max_height - height); - pos.x = Math.min(Math.max(scroll.x, pos.x), scroll.x+max_width - width); - - tip.style.left = pos.x + "px"; - tip.style.top = pos.y + "px"; -}; - -gantt._hide_tooltip = function(){ - if (this._tooltip_html && this._tooltip_html.parentNode) - this._tooltip_html.parentNode.removeChild(this._tooltip_html); - this._tooltip_id = 0; -}; - -gantt._is_tooltip = function(ev) { - var node = ev.target || ev.srcElement; - return gantt._is_node_child(node, function(node){ - return (node.className == this._tooltip_class); - }); -}; - -gantt._is_task_line = function(ev){ - var node = ev.target || ev.srcElement; - return gantt._is_node_child(node, function(node){ - return (node == this.$task_data); - }); -}; - -gantt._is_node_child = function(node, condition){ - var res = false; - while (node && !res) { - res = condition.call(gantt, node); - node = node.parentNode; - } - return res; -}; - -gantt._tooltip_pos = function(ev) { - if (ev.pageX || ev.pageY) - var pos = {x:ev.pageX, y:ev.pageY}; - - var d = _isIE ? document.documentElement : document.body; - var pos = { - x:ev.clientX + d.scrollLeft - d.clientLeft, - y:ev.clientY + d.scrollTop - d.clientTop - }; - - var box = gantt._get_position(gantt.$task); - pos.x = pos.x - box.x; - pos.y = pos.y - box.y; - return pos; -}; - -gantt.attachEvent("onMouseMove", function(event_id, ev) { // (gantt event_id, browser event) - if(this.config.tooltip_timeout){ - //making events survive timeout in ie - if(document.createEventObject && !document.createEvent) - ev = document.createEventObject(ev); - - var delay = this.config.tooltip_timeout; - - if(this._tooltip_id && !event_id){ - if(!isNaN(this.config.tooltip_hide_timeout)){ - delay = this.config.tooltip_hide_timeout; - } - } - - clearTimeout(gantt._tooltip_ev_timer); - gantt._tooltip_ev_timer = setTimeout(function(){ - gantt._init_tooltip(event_id, ev); - }, delay); - - }else{ - gantt._init_tooltip(event_id, ev); - } -}); -gantt._init_tooltip = function(event_id, ev){ - if (this._is_tooltip(ev)) return; - if (event_id == this._tooltip_id && !this._is_task_line(ev)) return; - if (!event_id) - return this._hide_tooltip(); - - this._tooltip_id = event_id; - - var task = this.getTask(event_id); - var text = this.templates.tooltip_text(task.start_date, task.end_date, task); - if (!text) - this._hide_tooltip(); - this._show_tooltip(text, this._tooltip_pos(ev)); -}; -gantt.attachEvent("onMouseLeave", function(ev){ - if (gantt._is_tooltip(ev)) return; - this._hide_tooltip(); -}); - -// gantt.attachEvent("onBeforeDrag", function() { -// gantt._tooltip.hide(); -// return true; -// }); -// gantt.attachEvent("onEventDeleted", function() { -// gantt._tooltip.hide(); -// return true; -// }); - - -/* Could be redifined */ -gantt.templates.tooltip_date_format = gantt.date.date_to_str("%Y-%m-%d"); -gantt.templates.tooltip_text = function(start, end, event) { - return "Task: " + event.text + "
Start date: " + gantt.templates.tooltip_date_format(start) + "
End date: " + gantt.templates.tooltip_date_format(end); -}; diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/ext/dhtmlxgantt_tooltip.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/ext/dhtmlxgantt_tooltip.js.map deleted file mode 100755 index 72aab40403..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/ext/dhtmlxgantt_tooltip.js.map +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -{"version":3,"file":"dhtmlxgantt_tooltip.js.map","sources":["dhtmlxgantt_tooltip.js"],"names":["gantt","_tooltip","_tooltip_class","config","tooltip_timeout","_create_tooltip","this","_tooltip_html","document","createElement","className","_show_tooltip","text","pos","touch","touch_tooltip","tip","innerHTML","$task_data","appendChild","width","offsetWidth","height","offsetHeight","max_height","$task","max_width","scroll","getScrollState","x","y","Math","min","max","style","left","top","_hide_tooltip","parentNode","removeChild","_tooltip_id","_is_tooltip","ev","node","target","srcElement","_is_node_child","_is_task_line","condition","res","call","_tooltip_pos","pageX","pageY","d","_isIE","documentElement","body","clientX","scrollLeft","clientLeft","clientY","scrollTop","clientTop","box","_get_position","attachEvent","event_id","createEventObject","createEvent","delay","isNaN","tooltip_hide_timeout","clearTimeout","_tooltip_ev_timer","setTimeout","_init_tooltip","task","getTask","templates","tooltip_text","start_date","end_date","tooltip_date_format","date","date_to_str","start","end","event"],"mappings":"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"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale.js deleted file mode 100755 index 6df0abd8e9..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale.js +++ /dev/null @@ -1,50 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.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:{ - new_task:"New task", - icon_save:"Save", - icon_cancel:"Cancel", - icon_details:"Details", - icon_edit:"Edit", - icon_delete:"Delete", - confirm_closing:"",//Your changes will be lost, are your sure ? - confirm_deleting:"Task will be deleted permanently, are you sure?", - section_description:"Description", - section_time:"Time period", - section_type:"Type", - - /* grid columns */ - - column_text : "Task name", - column_start_date : "Start time", - column_duration : "Duration", - column_add : "", - - /* link confirmation */ - link: "Link", - confirm_link_deleting:"will be deleted", - link_start: " (start)", - link_end: " (end)", - - type_task: "Task", - type_project: "Project", - type_milestone: "Milestone", - - minutes: "Minutes", - hours: "Hours", - days: "Days", - weeks: "Week", - months: "Months", - years: "Years" - } -}; - diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale.js.map deleted file mode 100755 index 602c700f0f..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale.js.map +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -{"version":3,"file":"locale.js.map","sources":["locale.js"],"names":["gantt","locale","date","month_full","month_short","day_full","day_short","labels","new_task","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","confirm_closing","confirm_deleting","section_description","section_time","section_type","column_text","column_start_date","column_duration","column_add","link","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","minutes","hours","days","weeks","months","years"],"mappings":"AAAAA,MAAMC,QACLC,MACCC,YAAY,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OAAQ,SAAU,YAAa,UAAW,WAAY,YAC1HC,aAAa,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC1FC,UAAU,SAAU,SAAU,UAAW,YAAa,WAAY,SAAU,YAC5EC,WAAW,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,QAEtDC,QACCC,SAAS,WACTC,UAAU,OACVC,YAAY,SACZC,aAAa,UACbC,UAAU,OACVC,YAAY,SACZC,gBAAgB,GAChBC,iBAAiB,kDACXC,oBAAoB,cACpBC,aAAa,cACnBC,aAAa,OAIPC,YAAc,YACdC,kBAAoB,aACpBC,gBAAkB,WAClBC,WAAa,GAGnBC,KAAM,OACNC,sBAAsB,kBACtBC,WAAY,WACZC,SAAU,SAEVC,UAAW,OACXC,aAAc,UACdC,eAAgB,YAEVC,QAAS,UACTC,MAAO,QACPC,KAAM,OACNC,MAAO,OACPC,OAAQ,SACRC,MAAO"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ar.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ar.js deleted file mode 100755 index b5b2bdb384..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ar.js +++ /dev/null @@ -1,53 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale = { - date: { - month_full: ["كانون الثاني", "شباط", "آذار", "نيسان", "أيار", "حزيران", "تموز", "آب", "أيلول", "تشرين الأول", "تشرين الثاني", "كانون الأول"], - month_short: ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"], - day_full: ["الأحد", "الأثنين", "ألثلاثاء", "الأربعاء", "ألحميس", "ألجمعة", "السبت"], - day_short: ["احد", "اثنين", "ثلاثاء", "اربعاء", "خميس", "جمعة", "سبت"] - }, - labels: { - dhx_cal_today_button: "اليوم", - day_tab: "يوم", - week_tab: "أسبوع", - month_tab: "شهر", - new_event: "حدث جديد", - icon_save: "اخزن", - icon_cancel: "الغاء", - icon_details: "تفاصيل", - icon_edit: "تحرير", - icon_delete: "حذف", - confirm_closing: "التغييرات سوف تضيع, هل انت متأكد؟", //Your changes will be lost, are your sure ? - confirm_deleting: "الحدث سيتم حذفها نهائيا ، هل أنت متأكد؟", - section_description: "الوصف", - section_time: "الفترة الزمنية", - section_type:"Type", - /* grid columns */ - - column_text : "Task name", - column_start_date : "Start time", - column_duration : "Duration", - column_add : "", - - /* link confirmation */ - link: "Link", - confirm_link_deleting:"will be deleted", - link_start: " (start)", - link_end: " (end)", - - type_task: "Task", - type_project: "Project", - type_milestone: "Milestone", - - minutes: "Minutes", - hours: "Hours", - days: "Days", - weeks: "Week", - months: "Months", - years: "Years" - } -}; - diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ar.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ar.js.map deleted file mode 100755 index 95aaa79f81..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ar.js.map +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -{"version":3,"file":"locale_ar.js.map","sources":["locale_ar.js"],"names":["gantt","locale","date","month_full","month_short","day_full","day_short","labels","dhx_cal_today_button","day_tab","week_tab","month_tab","new_event","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","confirm_closing","confirm_deleting","section_description","section_time","section_type","column_text","column_start_date","column_duration","column_add","link","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","minutes","hours","days","weeks","months","years"],"mappings":"AAAAA,MAAMC,QACLC,MACCC,YAAa,eAAgB,OAAQ,OAAQ,QAAS,OAAQ,SAAU,OAAQ,KAAM,QAAS,cAAe,eAAgB,eAC9HC,aAAc,QAAS,SAAU,OAAQ,QAAS,OAAQ,QAAS,QAAS,QAAS,SAAU,SAAU,SAAU,UACnHC,UAAW,QAAS,UAAW,WAAY,WAAY,SAAU,SAAU,SAC3EC,WAAY,MAAO,QAAS,SAAU,SAAU,OAAQ,OAAQ,QAEjEC,QACCC,qBAAsB,QACtBC,QAAS,MACTC,SAAU,QACVC,UAAW,MACXC,UAAW,WACXC,UAAW,OACXC,YAAa,QACbC,aAAc,SACdC,UAAW,QACXC,YAAa,MACbC,gBAAiB,oCACjBC,iBAAkB,0CAClBC,oBAAqB,QACrBC,aAAc,iBACdC,aAAa,OAGPC,YAAc,YACdC,kBAAoB,aACpBC,gBAAkB,WAClBC,WAAa,GAGnBC,KAAM,OACNC,sBAAsB,kBACtBC,WAAY,WACZC,SAAU,SAEVC,UAAW,OACXC,aAAc,UACdC,eAAgB,YAEVC,QAAS,UACTC,MAAO,QACPC,KAAM,OACNC,MAAO,OACPC,OAAQ,SACRC,MAAO"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_be.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_be.js deleted file mode 100755 index 485257c2ef..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_be.js +++ /dev/null @@ -1,54 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale = { - date: { - month_full: ["Студзень", "Люты", "Сакавік", "Красавік", "Maй", "Чэрвень", "Ліпень", "Жнівень", "Верасень", "Кастрычнік", "Лістапад", "Снежань"], - month_short: ["Студз", "Лют", "Сак", "Крас", "Maй", "Чэр", "Ліп", "Жнів", "Вер", "Каст", "Ліст", "Снеж"], - day_full: [ "Нядзеля", "Панядзелак", "Аўторак", "Серада", "Чацвер", "Пятніца", "Субота"], - day_short: ["Нд", "Пн", "Аўт", "Ср", "Чцв", "Пт", "Сб"] - }, - labels: { - dhx_cal_today_button: "Сёння", - day_tab: "Дзень", - week_tab: "Тыдзень", - month_tab: "Месяц", - new_event: "Новая падзея", - icon_save: "Захаваць", - icon_cancel: "Адмяніць", - icon_details: "Дэталі", - icon_edit: "Змяніць", - icon_delete: "Выдаліць", - confirm_closing: "", //Унесеныя змены будуць страчаны, працягнуць? - confirm_deleting: "Падзея будзе выдалена незваротна, працягнуць?", - section_description: "Апісанне", - section_time: "Перыяд часу", - section_type:"Тып", - /* grid columns */ - - column_text : "Задача", - column_start_date : "Пачатак", - column_duration : "Працяг", - column_add : "", - - /* link confirmation */ - link: "Сувязь", - confirm_link_deleting:"будзе выдалена", - link_start: "(пачатак)", - link_end: "(канец)", - - type_task: "Task", - type_project: "Project", - type_milestone: "Milestone", - - - minutes: "Хвiлiна", - hours: "Гадзiна", - days: "Дзень", - weeks: "Тыдзень", - months: "Месяц", - years: "Год" - } -}; - diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_be.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_be.js.map deleted file mode 100755 index 34b9b9d492..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_be.js.map +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -{"version":3,"file":"locale_be.js.map","sources":["locale_be.js"],"names":["gantt","locale","date","month_full","month_short","day_full","day_short","labels","dhx_cal_today_button","day_tab","week_tab","month_tab","new_event","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","confirm_closing","confirm_deleting","section_description","section_time","section_type","column_text","column_start_date","column_duration","column_add","link","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","minutes","hours","days","weeks","months","years"],"mappings":"AAAAA,MAAMC,QACLC,MACCC,YAAa,WAAY,OAAQ,UAAW,WAAY,MAAO,UAAW,SAAU,UAAW,WAAY,aAAc,WAAY,WACrIC,aAAc,QAAS,MAAO,MAAO,OAAQ,MAAO,MAAO,MAAO,OAAQ,MAAO,OAAQ,OAAQ,QACjGC,UAAY,UAAW,aAAc,UAAW,SAAU,SAAU,UAAW,UAC/EC,WAAY,KAAM,KAAM,MAAO,KAAM,MAAO,KAAM,OAEnDC,QACCC,qBAAsB,QACtBC,QAAS,QACTC,SAAU,UACVC,UAAW,QACXC,UAAW,eACXC,UAAW,WACXC,YAAa,WACbC,aAAc,SACdC,UAAW,UACXC,YAAa,WACbC,gBAAiB,GACjBC,iBAAkB,gDAClBC,oBAAqB,WACrBC,aAAc,cACdC,aAAa,MAGPC,YAAc,SACdC,kBAAoB,UACpBC,gBAAkB,SAClBC,WAAa,GAGnBC,KAAM,SACNC,sBAAsB,iBACtBC,WAAY,YACZC,SAAU,UAEVC,UAAW,OACXC,aAAc,UACdC,eAAgB,YAGVC,QAAS,UACTC,MAAO,UACPC,KAAM,QACNC,MAAO,UACPC,OAAQ,QACRC,MAAO"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ca.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ca.js deleted file mode 100755 index cefca7fc30..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ca.js +++ /dev/null @@ -1,57 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -/* - @Traducido por Vicente Adria Bohigues - vicenteadria@hotmail.com - */ -gantt.locale = { - date: { - month_full: ["Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre"], - month_short: ["Gen", "Feb", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Oct", "Nov", "Des"], - day_full: ["Diumenge", "Dilluns", "Dimarts", "Dimecres", "Dijous", "Divendres", "Dissabte"], - day_short: ["Dg", "Dl", "Dm", "Dc", "Dj", "Dv", "Ds"] - }, - labels: { - dhx_cal_today_button: "Hui", - day_tab: "Dia", - week_tab: "Setmana", - month_tab: "Mes", - new_event: "Nou esdeveniment", - icon_save: "Guardar", - icon_cancel: "Cancel·lar", - icon_details: "Detalls", - icon_edit: "Editar", - icon_delete: "Esborrar", - confirm_closing: "", //"Els seus canvis es perdràn, continuar ?" - confirm_deleting: "L'esdeveniment s'esborrarà definitivament, continuar ?", - section_description: "Descripció", - section_time: "Periode de temps", - section_type:"Type", - /* grid columns */ - - column_text : "Task name", - column_start_date : "Start time", - column_duration : "Duration", - column_add : "", - - /* link confirmation */ - link: "Link", - confirm_link_deleting:"will be deleted", - link_start: " (start)", - link_end: " (end)", - - type_task: "Task", - type_project: "Project", - type_milestone: "Milestone", - - - minutes: "Minutes", - hours: "Hours", - days: "Days", - weeks: "Week", - months: "Months", - years: "Years" - } -}; - diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ca.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ca.js.map deleted file mode 100755 index 31e54559ae..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ca.js.map +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -{"version":3,"file":"locale_ca.js.map","sources":["locale_ca.js"],"names":["gantt","locale","date","month_full","month_short","day_full","day_short","labels","dhx_cal_today_button","day_tab","week_tab","month_tab","new_event","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","confirm_closing","confirm_deleting","section_description","section_time","section_type","column_text","column_start_date","column_duration","column_add","link","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","minutes","hours","days","weeks","months","years"],"mappings":"AAGAA,MAAMC,QACLC,MACCC,YAAa,QAAS,SAAU,OAAQ,QAAS,OAAQ,OAAQ,SAAU,QAAS,WAAY,UAAW,WAAY,YACvHC,aAAc,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC3FC,UAAW,WAAY,UAAW,UAAW,WAAY,SAAU,YAAa,YAChFC,WAAY,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAEjDC,QACCC,qBAAsB,MACtBC,QAAS,MACTC,SAAU,UACVC,UAAW,MACXC,UAAW,mBACXC,UAAW,UACXC,YAAa,aACbC,aAAc,UACdC,UAAW,SACXC,YAAa,WACbC,gBAAiB,GACjBC,iBAAkB,yDAClBC,oBAAqB,aACrBC,aAAc,mBACdC,aAAa,OAGPC,YAAc,YACdC,kBAAoB,aACpBC,gBAAkB,WAClBC,WAAa,GAGnBC,KAAM,OACNC,sBAAsB,kBACtBC,WAAY,WACZC,SAAU,SAEVC,UAAW,OACXC,aAAc,UACdC,eAAgB,YAGVC,QAAS,UACTC,MAAO,QACPC,KAAM,OACNC,MAAO,OACPC,OAAQ,SACRC,MAAO"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_cn.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_cn.js deleted file mode 100755 index 2df35d5bc7..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_cn.js +++ /dev/null @@ -1,60 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -/* -Translation by FreezeSoul -*/ -gantt.config.day_date="%M %d日 %D"; -gantt.config.default_date="%Y年 %M %d日"; -gantt.config.month_date="%Y年 %M"; - -gantt.locale={ - date: { - month_full: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], - month_short: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], - day_full: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"], - day_short: ["日", "一", "二", "三", "四", "五", "六"] - }, - labels: { - dhx_cal_today_button: "今天", - day_tab: "日", - week_tab: "周", - month_tab: "月", - new_event: "新建日程", - icon_save: "保存", - icon_cancel: "关闭", - icon_details: "详细", - icon_edit: "编辑", - icon_delete: "删除", - confirm_closing: "请确认是否撤销修改!", //Your changes will be lost, are your sure? - confirm_deleting: "是否删除日程?", - section_description: "描述", - section_time: "时间范围", - section_type:"Type", - /* grid columns */ - - column_text : "Task name", - column_start_date : "Start time", - column_duration : "Duration", - column_add : "", - - /* link confirmation */ - link: "Link", - confirm_link_deleting:"will be deleted", - link_start: " (start)", - link_end: " (end)", - - type_task: "Task", - type_project: "Project", - type_milestone: "Milestone", - - minutes: "Minutes", - hours: "Hours", - days: "Days", - weeks: "Week", - months: "Months", - years: "Years" - } -}; - diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_cn.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_cn.js.map deleted file mode 100755 index 4f0e00a9bc..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_cn.js.map +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -{"version":3,"file":"locale_cn.js.map","sources":["locale_cn.js"],"names":["gantt","config","day_date","default_date","month_date","locale","date","month_full","month_short","day_full","day_short","labels","dhx_cal_today_button","day_tab","week_tab","month_tab","new_event","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","confirm_closing","confirm_deleting","section_description","section_time","section_type","column_text","column_start_date","column_duration","column_add","link","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","minutes","hours","days","weeks","months","years"],"mappings":"AAGAA,MAAMC,OAAOC,SAAS,YACtBF,MAAMC,OAAOE,aAAa,aAC1BH,MAAMC,OAAOG,WAAW,SAExBJ,MAAMK,QACLC,MACCC,YAAa,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,OAChFC,aAAc,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,MAAO,OAClFC,UAAW,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OACrDC,WAAY,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAE3CC,QACCC,qBAAsB,KACtBC,QAAS,IACTC,SAAU,IACVC,UAAW,IACXC,UAAW,OACXC,UAAW,KACXC,YAAa,KACbC,aAAc,KACdC,UAAW,KACXC,YAAa,KACbC,gBAAiB,aACjBC,iBAAkB,UAClBC,oBAAqB,KACrBC,aAAc,OACdC,aAAa,OAGPC,YAAc,YACdC,kBAAoB,aACpBC,gBAAkB,WAClBC,WAAa,GAGnBC,KAAM,OACNC,sBAAsB,kBACtBC,WAAY,WACZC,SAAU,SAEVC,UAAW,OACXC,aAAc,UACdC,eAAgB,YAEVC,QAAS,UACTC,MAAO,QACPC,KAAM,OACNC,MAAO,OACPC,OAAQ,SACRC,MAAO"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_cs.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_cs.js deleted file mode 100755 index 980da02a9d..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_cs.js +++ /dev/null @@ -1,54 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale = { - date: { - month_full: ["Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"], - month_short: ["Led", "Ún", "Bře", "Dub", "Kvě", "Čer", "Čec", "Srp", "Září", "Říj", "List", "Pro"], - day_full: ["Neděle", "Pondělí", "Úterý", "Středa", "Čtvrtek", "Pátek", "Sobota"], - day_short: ["Ne", "Po", "Út", "St", "Čt", "Pá", "So"] - }, - labels: { - dhx_cal_today_button: "Dnes", - day_tab: "Den", - week_tab: "Týden", - month_tab: "Měsíc", - new_event: "Nová událost", - icon_save: "Uložit", - icon_cancel: "Zpět", - icon_details: "Detail", - icon_edit: "Edituj", - icon_delete: "Smazat", - confirm_closing: "", //Vaše změny budou ztraceny, opravdu ? - confirm_deleting: "Událost bude trvale smazána, opravdu?", - section_description: "Poznámky", - section_time: "Doba platnosti", - section_type:"Type", - /* grid columns */ - - column_text : "Task name", - column_start_date : "Start time", - column_duration : "Duration", - column_add : "", - - /* link confirmation */ - link: "Link", - confirm_link_deleting:"will be deleted", - link_start: " (start)", - link_end: " (end)", - - type_task: "Task", - type_project: "Project", - type_milestone: "Milestone", - - - minutes: "Minutes", - hours: "Hours", - days: "Days", - weeks: "Week", - months: "Months", - years: "Years" - } -}; - diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_cs.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_cs.js.map deleted file mode 100755 index 44b51622cf..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_cs.js.map +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -{"version":3,"file":"locale_cs.js.map","sources":["locale_cs.js"],"names":["gantt","locale","date","month_full","month_short","day_full","day_short","labels","dhx_cal_today_button","day_tab","week_tab","month_tab","new_event","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","confirm_closing","confirm_deleting","section_description","section_time","section_type","column_text","column_start_date","column_duration","column_add","link","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","minutes","hours","days","weeks","months","years"],"mappings":"AAAAA,MAAMC,QACLC,MACCC,YAAa,QAAS,OAAQ,SAAU,QAAS,SAAU,SAAU,WAAY,QAAS,OAAQ,QAAS,WAAY,YACvHC,aAAc,MAAO,KAAM,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAAQ,MAAO,OAAQ,OAC5FC,UAAW,SAAU,UAAW,QAAS,SAAU,UAAW,QAAS,UACvEC,WAAY,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAEjDC,QACCC,qBAAsB,OACtBC,QAAS,MACTC,SAAU,QACVC,UAAW,QACXC,UAAW,eACXC,UAAW,SACXC,YAAa,OACbC,aAAc,SACdC,UAAW,SACXC,YAAa,SACbC,gBAAiB,GACjBC,iBAAkB,wCAClBC,oBAAqB,WACrBC,aAAc,iBACdC,aAAa,OAGPC,YAAc,YACdC,kBAAoB,aACpBC,gBAAkB,WAClBC,WAAa,GAGnBC,KAAM,OACNC,sBAAsB,kBACtBC,WAAY,WACZC,SAAU,SAEVC,UAAW,OACXC,aAAc,UACdC,eAAgB,YAGVC,QAAS,UACTC,MAAO,QACPC,KAAM,OACNC,MAAO,OACPC,OAAQ,SACRC,MAAO"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_da.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_da.js deleted file mode 100755 index 3acce56a8c..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_da.js +++ /dev/null @@ -1,54 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale = { - date: { - month_full: ["Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December"], - month_short: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], - day_full: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag"], - day_short: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"] - }, - labels: { - dhx_cal_today_button: "Idag", - day_tab: "Dag", - week_tab: "Uge", - month_tab: "Måned", - new_event: "Ny begivenhed", - icon_save: "Gem", - icon_cancel: "Fortryd", - icon_details: "Detaljer", - icon_edit: "Tilret", - icon_delete: "Slet", - confirm_closing: "Dine rettelser vil gå tabt.. Er dy sikker?", //Your changes will be lost, are your sure ? - confirm_deleting: "Bigivenheden vil blive slettet permanent. Er du sikker?", - section_description: "Beskrivelse", - section_time: "Tidsperiode", - section_type:"Type", - /* grid columns */ - - column_text : "Task name", - column_start_date : "Start time", - column_duration : "Duration", - column_add : "", - - /* link confirmation */ - link: "Link", - confirm_link_deleting:"will be deleted", - link_start: " (start)", - link_end: " (end)", - - type_task: "Task", - type_project: "Project", - type_milestone: "Milestone", - - - minutes: "Minutes", - hours: "Hours", - days: "Days", - weeks: "Week", - months: "Months", - years: "Years" - } -}; - diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_da.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_da.js.map deleted file mode 100755 index 0523c56ef9..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_da.js.map +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -{"version":3,"file":"locale_da.js.map","sources":["locale_da.js"],"names":["gantt","locale","date","month_full","month_short","day_full","day_short","labels","dhx_cal_today_button","day_tab","week_tab","month_tab","new_event","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","confirm_closing","confirm_deleting","section_description","section_time","section_type","column_text","column_start_date","column_duration","column_add","link","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","minutes","hours","days","weeks","months","years"],"mappings":"AAAAA,MAAMC,QACLC,MACCC,YAAa,SAAU,UAAW,QAAS,QAAS,MAAO,OAAQ,OAAQ,SAAU,YAAa,UAAW,WAAY,YACzHC,aAAc,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC3FC,UAAW,SAAU,SAAU,UAAW,SAAU,UAAW,SAAU,UACzEC,WAAY,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,QAEvDC,QACCC,qBAAsB,OACtBC,QAAS,MACTC,SAAU,MACVC,UAAW,QACXC,UAAW,gBACXC,UAAW,MACXC,YAAa,UACbC,aAAc,WACdC,UAAW,SACXC,YAAa,OACbC,gBAAiB,6CACjBC,iBAAkB,0DAClBC,oBAAqB,cACrBC,aAAc,cACdC,aAAa,OAGPC,YAAc,YACdC,kBAAoB,aACpBC,gBAAkB,WAClBC,WAAa,GAGnBC,KAAM,OACNC,sBAAsB,kBACtBC,WAAY,WACZC,SAAU,SAEVC,UAAW,OACXC,aAAc,UACdC,eAAgB,YAGVC,QAAS,UACTC,MAAO,QACPC,KAAM,OACNC,MAAO,OACPC,OAAQ,SACRC,MAAO"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_de.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_de.js deleted file mode 100755 index ea03e48aad..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_de.js +++ /dev/null @@ -1,54 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale = { - date: { - month_full: [" Januar", " Februar", " März ", " April", " Mai", " Juni", " Juli", " August", " September ", " Oktober", " November ", " Dezember"], - month_short: ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], - day_full: [ "Sonntag", "Montag", "Dienstag", " Mittwoch", " Donnerstag", "Freitag", "Samstag"], - day_short: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"] - }, - labels: { - dhx_cal_today_button: "Heute", - day_tab: "Tag", - week_tab: "Woche", - month_tab: "Monat", - new_event: "neuer Eintrag", - icon_save: "Speichern", - icon_cancel: "Abbrechen", - icon_details: "Details", - icon_edit: "Ändern", - icon_delete: "Löschen", - confirm_closing: "", //"Ihre Veränderungen werden verloren sein, wollen Sie ergänzen? " - confirm_deleting: "Der Eintrag wird gelöscht", - section_description: "Beschreibung", - section_time: "Zeitspanne", - section_type:"Type", - /* grid columns */ - - column_text : "Task-Namen", - column_start_date : "Startzeit", - column_duration : "Dauer", - column_add : "", - - /* link confirmation */ - link: "Link", - confirm_link_deleting:"werden gelöscht", - link_start: "(starten)", - link_end: "(ende)", - - type_task: "Task", - type_project: "Project", - type_milestone: "Milestone", - - - minutes: "Minuten", - hours: "Stunden", - days: "Tage", - weeks: "Wochen", - months: "Monate", - years: "Jahre" - } -}; - diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_de.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_de.js.map deleted file mode 100755 index 534e9a1a74..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_de.js.map +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -{"version":3,"file":"locale_de.js.map","sources":["locale_de.js"],"names":["gantt","locale","date","month_full","month_short","day_full","day_short","labels","dhx_cal_today_button","day_tab","week_tab","month_tab","new_event","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","confirm_closing","confirm_deleting","section_description","section_time","section_type","column_text","column_start_date","column_duration","column_add","link","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","minutes","hours","days","weeks","months","years"],"mappings":"AAAAA,MAAMC,QACLC,MACCC,YAAa,UAAW,WAAY,SAAU,SAAU,OAAQ,QAAS,QAAS,UAAW,cAAe,WAAY,aAAc,aACtIC,aAAc,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC3FC,UAAY,UAAW,SAAU,WAAY,YAAa,cAAe,UAAW,WACpFC,WAAY,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAEjDC,QACCC,qBAAsB,QACtBC,QAAS,MACTC,SAAU,QACVC,UAAW,QACXC,UAAW,gBACXC,UAAW,YACXC,YAAa,YACbC,aAAc,UACdC,UAAW,SACXC,YAAa,UACbC,gBAAiB,GACjBC,iBAAkB,4BAClBC,oBAAqB,eACrBC,aAAc,aACdC,aAAa,OAGPC,YAAc,aACdC,kBAAoB,YACpBC,gBAAkB,QAClBC,WAAa,GAGnBC,KAAM,OACNC,sBAAsB,kBACtBC,WAAY,YACZC,SAAU,SAEVC,UAAW,OACXC,aAAc,UACdC,eAAgB,YAGVC,QAAS,UACTC,MAAO,UACPC,KAAM,OACNC,MAAO,SACPC,OAAQ,SACRC,MAAO"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_el.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_el.js deleted file mode 100755 index 4966dbe1af..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_el.js +++ /dev/null @@ -1,54 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale = { - date: { - month_full: ["Ιανουάριος", "Φεβρουάριος", "Μάρτιος", "Απρίλιος", "Μάϊος", "Ιούνιος", "Ιούλιος", "Αύγουστος", "Σεπτέμβριος", "Οκτώβριος", "Νοέμβριος", "Δεκέμβριος"], - month_short: ["ΙΑΝ", "ΦΕΒ", "ΜΑΡ", "ΑΠΡ", "ΜΑΙ", "ΙΟΥΝ", "ΙΟΥΛ", "ΑΥΓ", "ΣΕΠ", "ΟΚΤ", "ΝΟΕ", "ΔΕΚ"], - day_full: ["Κυριακή", "Δευτέρα", "Τρίτη", "Τετάρτη", "Πέμπτη", "Παρασκευή", "Κυριακή"], - day_short: ["ΚΥ", "ΔΕ", "ΤΡ", "ΤΕ", "ΠΕ", "ΠΑ", "ΣΑ"] - }, - labels: { - dhx_cal_today_button: "Σήμερα", - day_tab: "Ημέρα", - week_tab: "Εβδομάδα", - month_tab: "Μήνας", - new_event: "Νέο έργο", - icon_save: "Αποθήκευση", - icon_cancel: "Άκυρο", - icon_details: "Λεπτομέρειες", - icon_edit: "Επεξεργασία", - icon_delete: "Διαγραφή", - confirm_closing: "", //Your changes will be lost, are your sure ? - confirm_deleting: "Το έργο θα διαγραφεί οριστικά. Θέλετε να συνεχίσετε;", - section_description: "Περιγραφή", - section_time: "Χρονική περίοδος", - section_type:"Type", - /* grid columns */ - - column_text : "Task name", - column_start_date : "Start time", - column_duration : "Duration", - column_add : "", - - /* link confirmation */ - link: "Link", - confirm_link_deleting:"will be deleted", - link_start: " (start)", - link_end: " (end)", - - type_task: "Task", - type_project: "Project", - type_milestone: "Milestone", - - - minutes: "Minutes", - hours: "Hours", - days: "Days", - weeks: "Week", - months: "Months", - years: "Years" - } -}; - diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_el.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_el.js.map deleted file mode 100755 index 769f3668bc..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_el.js.map +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -{"version":3,"file":"locale_el.js.map","sources":["locale_el.js"],"names":["gantt","locale","date","month_full","month_short","day_full","day_short","labels","dhx_cal_today_button","day_tab","week_tab","month_tab","new_event","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","confirm_closing","confirm_deleting","section_description","section_time","section_type","column_text","column_start_date","column_duration","column_add","link","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","minutes","hours","days","weeks","months","years"],"mappings":"AAAAA,MAAMC,QACLC,MACCC,YAAa,aAAc,cAAe,UAAW,WAAY,QAAS,UAAW,UAAW,YAAa,cAAe,YAAa,YAAa,cACtJC,aAAc,MAAO,MAAO,MAAO,MAAO,MAAO,OAAQ,OAAQ,MAAO,MAAO,MAAO,MAAO,OAC7FC,UAAW,UAAW,UAAW,QAAS,UAAW,SAAU,YAAa,WAC5EC,WAAY,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAEjDC,QACCC,qBAAsB,SACtBC,QAAS,QACTC,SAAU,WACVC,UAAW,QACXC,UAAW,WACXC,UAAW,aACXC,YAAa,QACbC,aAAc,eACdC,UAAW,cACXC,YAAa,WACbC,gBAAiB,GACjBC,iBAAkB,uDAClBC,oBAAqB,YACrBC,aAAc,mBACdC,aAAa,OAGPC,YAAc,YACdC,kBAAoB,aACpBC,gBAAkB,WAClBC,WAAa,GAGnBC,KAAM,OACNC,sBAAsB,kBACtBC,WAAY,WACZC,SAAU,SAEVC,UAAW,OACXC,aAAc,UACdC,eAAgB,YAGVC,QAAS,UACTC,MAAO,QACPC,KAAM,OACNC,MAAO,OACPC,OAAQ,SACRC,MAAO"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_es.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_es.js deleted file mode 100755 index f27d647de5..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_es.js +++ /dev/null @@ -1,57 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -/* - @Autor Manuel Fernandez Panzuela - www.mfernandez.es - */ -gantt.locale = { - date: { - month_full: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"], - month_short: ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"], - day_full: ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"], - day_short: ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb"] - }, - labels: { - dhx_cal_today_button: "Hoy", - day_tab: "Día", - week_tab: "Semana", - month_tab: "Mes", - new_event: "Nuevo evento", - icon_save: "Guardar", - icon_cancel: "Cancelar", - icon_details: "Detalles", - icon_edit: "Editar", - icon_delete: "Eliminar", - confirm_closing: "", //"Sus cambios se perderán, continuar ?" - confirm_deleting: "El evento se borrará definitivamente, ¿continuar?", - section_description: "Descripción", - section_time: "Período", - section_type:"Type", - /* grid columns */ - - column_text : "Task name", - column_start_date : "Start time", - column_duration : "Duration", - column_add : "", - - /* link confirmation */ - link: "Link", - confirm_link_deleting:"will be deleted", - link_start: " (start)", - link_end: " (end)", - - type_task: "Task", - type_project: "Project", - type_milestone: "Milestone", - - - minutes: "Minutes", - hours: "Hours", - days: "Days", - weeks: "Week", - months: "Months", - years: "Years" - } -}; - diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_es.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_es.js.map deleted file mode 100755 index 65e79e043e..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_es.js.map +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -{"version":3,"file":"locale_es.js.map","sources":["locale_es.js"],"names":["gantt","locale","date","month_full","month_short","day_full","day_short","labels","dhx_cal_today_button","day_tab","week_tab","month_tab","new_event","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","confirm_closing","confirm_deleting","section_description","section_time","section_type","column_text","column_start_date","column_duration","column_add","link","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","minutes","hours","days","weeks","months","years"],"mappings":"AAGAA,MAAMC,QACLC,MACCC,YAAa,QAAS,UAAW,QAAS,QAAS,OAAQ,QAAS,QAAS,SAAU,aAAc,UAAW,YAAa,aAC7HC,aAAc,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC3FC,UAAW,UAAW,QAAS,SAAU,YAAa,SAAU,UAAW,UAC3EC,WAAY,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,QAEvDC,QACCC,qBAAsB,MACtBC,QAAS,MACTC,SAAU,SACVC,UAAW,MACXC,UAAW,eACXC,UAAW,UACXC,YAAa,WACbC,aAAc,WACdC,UAAW,SACXC,YAAa,WACbC,gBAAiB,GACjBC,iBAAkB,oDAClBC,oBAAqB,cACrBC,aAAc,UACdC,aAAa,OAGPC,YAAc,YACdC,kBAAoB,aACpBC,gBAAkB,WAClBC,WAAa,GAGnBC,KAAM,OACNC,sBAAsB,kBACtBC,WAAY,WACZC,SAAU,SAEVC,UAAW,OACXC,aAAc,UACdC,eAAgB,YAGVC,QAAS,UACTC,MAAO,QACPC,KAAM,OACNC,MAAO,OACPC,OAAQ,SACRC,MAAO"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_fi.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_fi.js deleted file mode 100755 index 17b3605df0..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_fi.js +++ /dev/null @@ -1,54 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale = { - date: { - month_full: ["Tammikuu", "Helmikuu", "Maaliskuu", "Huhtikuu", "Toukokuu", "Kesäkuu", "Heinäkuu", "Elokuu", "Syyskuu", "Lokakuu", "Marraskuu", "Joulukuu"], - month_short: ["Tam", "Hel", "Maa", "Huh", "Tou", "Kes", "Hei", "Elo", "Syy", "Lok", "Mar", "Jou"], - day_full: ["Sunnuntai", "Maanantai", "Tiistai", "Keskiviikko", "Torstai", "Perjantai", "Lauantai"], - day_short: ["Su", "Ma", "Ti", "Ke", "To", "Pe", "La"] - }, - labels: { - dhx_cal_today_button: "Tänään", - day_tab: "Päivä", - week_tab: "Viikko", - month_tab: "Kuukausi", - new_event: "Uusi tapahtuma", - icon_save: "Tallenna", - icon_cancel: "Peru", - icon_details: "Tiedot", - icon_edit: "Muokkaa", - icon_delete: "Poista", - confirm_closing: "", //Your changes will be lost, are your sure ? - confirm_deleting: "Haluatko varmasti poistaa tapahtuman?", - section_description: "Kuvaus", - section_time: "Aikajakso", - section_type:"Type", - /* grid columns */ - - column_text : "Task name", - column_start_date : "Start time", - column_duration : "Duration", - column_add : "", - - /* link confirmation */ - link: "Link", - confirm_link_deleting:"will be deleted", - link_start: " (start)", - link_end: " (end)", - - type_task: "Task", - type_project: "Project", - type_milestone: "Milestone", - - - minutes: "Minutes", - hours: "Hours", - days: "Days", - weeks: "Week", - months: "Months", - years: "Years" - } -}; - diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_fi.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_fi.js.map deleted file mode 100755 index a8891fd5b2..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_fi.js.map +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -{"version":3,"file":"locale_fi.js.map","sources":["locale_fi.js"],"names":["gantt","locale","date","month_full","month_short","day_full","day_short","labels","dhx_cal_today_button","day_tab","week_tab","month_tab","new_event","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","confirm_closing","confirm_deleting","section_description","section_time","section_type","column_text","column_start_date","column_duration","column_add","link","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","minutes","hours","days","weeks","months","years"],"mappings":"AAAAA,MAAMC,QACLC,MACCC,YAAa,WAAY,WAAY,YAAa,WAAY,WAAY,eAAgB,gBAAiB,SAAU,UAAW,UAAW,YAAa,YACxJC,aAAc,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC3FC,UAAW,YAAa,YAAa,UAAW,cAAe,UAAW,YAAa,YACvFC,WAAY,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAEjDC,QACCC,qBAAsB,SACtBC,QAAS,QACTC,SAAU,SACVC,UAAW,WACXC,UAAW,iBACXC,UAAW,WACXC,YAAa,OACbC,aAAc,SACdC,UAAW,UACXC,YAAa,SACbC,gBAAiB,GACjBC,iBAAkB,wCAClBC,oBAAqB,SACrBC,aAAc,YACdC,aAAa,OAGPC,YAAc,YACdC,kBAAoB,aACpBC,gBAAkB,WAClBC,WAAa,GAGnBC,KAAM,OACNC,sBAAsB,kBACtBC,WAAY,WACZC,SAAU,SAEVC,UAAW,OACXC,aAAc,UACdC,eAAgB,YAGVC,QAAS,UACTC,MAAO,QACPC,KAAM,OACNC,MAAO,OACPC,OAAQ,SACRC,MAAO"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_fr.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_fr.js deleted file mode 100755 index 81fed8c01d..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_fr.js +++ /dev/null @@ -1,52 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale = { - date: { - month_full: ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"], - month_short: ["Jan", "Fév", "Mar", "Avr", "Mai", "Juin", "Juil", "Aôu", "Sep", "Oct", "Nov", "Déc"], - day_full: ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"], - day_short: ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"] - }, - labels:{ - new_task:"Tâche neuve", - icon_save:"Enregistrer", - icon_cancel:"Annuler", - icon_details:"Détails", - icon_edit:"Modifier", - icon_delete:"Effacer", - confirm_closing:"",//Vos modifications seront perdus, êtes-vous sûr ? - confirm_deleting:"L'événement sera effacé sans appel, êtes-vous sûr ?", - - section_description:"Description", - section_time:"Période", - section_type:"Type", - - /* grid columns */ - - column_text : "Tâche neuve", - column_start_date : "Date initiale", - column_duration : "Durée", - column_add : "", - - - /* link confirmation */ - - confirm_link_deleting:"seront supprimées", - link_start: "(début)", - link_end: "(fin)", - - type_task: "Task", - type_project: "Project", - type_milestone: "Milestone", - - - minutes: "Minutes", - hours: "Heures", - days: "Jours", - weeks: "Semaine", - months: "Mois", - years: "Années" - } -}; diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_fr.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_fr.js.map deleted file mode 100755 index 5894cf620e..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_fr.js.map +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -{"version":3,"file":"locale_fr.js.map","sources":["locale_fr.js"],"names":["gantt","locale","date","month_full","month_short","day_full","day_short","labels","new_task","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","confirm_closing","confirm_deleting","section_description","section_time","section_type","column_text","column_start_date","column_duration","column_add","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","minutes","hours","days","weeks","months","years"],"mappings":"AAAAA,MAAMC,QACLC,MACCC,YAAa,UAAW,UAAW,OAAQ,QAAS,MAAO,OAAQ,UAAW,OAAQ,YAAa,UAAW,WAAY,YAC1HC,aAAc,MAAO,MAAO,MAAO,MAAO,MAAO,OAAQ,OAAQ,MAAO,MAAO,MAAO,MAAO,OAC7FC,UAAW,WAAY,QAAS,QAAS,WAAY,QAAS,WAAY,UAC1EC,WAAY,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,QAEvDC,QACCC,SAAS,cACTC,UAAU,cACVC,YAAY,UACZC,aAAa,UACbC,UAAU,WACVC,YAAY,UACZC,gBAAgB,GAChBC,iBAAiB,sDAEjBC,oBAAoB,cACpBC,aAAa,UACbC,aAAa,OAIPC,YAAe,cACfC,kBAAoB,gBACpBC,gBAAkB,QAClBC,WAAa,GAKnBC,sBAAsB,oBACtBC,WAAY,UACZC,SAAU,QAEVC,UAAW,OACXC,aAAc,UACdC,eAAgB,YAGbC,QAAS,UACTC,MAAO,SACPC,KAAM,QACNC,MAAO,UACPC,OAAQ,OACRC,MAAO"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_he.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_he.js deleted file mode 100755 index ff665b6add..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_he.js +++ /dev/null @@ -1,54 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale = { - date: { - month_full: ["ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני", "יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר"], - month_short: ["ינו", "פבר", "מרץ", "אפר", "מאי", "יונ", "יול", "אוג", "ספט", "אוק", "נוב", "דצמ"], - day_full: ["ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת"], - day_short: ["א", "ב", "ג", "ד", "ה", "ו", "ש"] - }, - labels: { - dhx_cal_today_button: "היום", - day_tab: "יום", - week_tab: "שבוע", - month_tab: "חודש", - new_event: "ארוע חדש", - icon_save: "שמור", - icon_cancel: "בטל", - icon_details: "פרטים", - icon_edit: "ערוך", - icon_delete: "מחק", - confirm_closing: "", //Your changes will be lost, are your sure ? - confirm_deleting: "ארוע ימחק סופית.להמשיך?", - section_description: "הסבר", - section_time: "תקופה", - section_type:"Type", - /* grid columns */ - - column_text : "Task name", - column_start_date : "Start time", - column_duration : "Duration", - column_add : "", - - /* link confirmation */ - link: "Link", - confirm_link_deleting:"will be deleted", - link_start: " (start)", - link_end: " (end)", - - type_task: "Task", - type_project: "Project", - type_milestone: "Milestone", - - - minutes: "Minutes", - hours: "Hours", - days: "Days", - weeks: "Week", - months: "Months", - years: "Years" - } -}; - diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_he.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_he.js.map deleted file mode 100755 index 67bd8d3368..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_he.js.map +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -{"version":3,"file":"locale_he.js.map","sources":["locale_he.js"],"names":["gantt","locale","date","month_full","month_short","day_full","day_short","labels","dhx_cal_today_button","day_tab","week_tab","month_tab","new_event","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","confirm_closing","confirm_deleting","section_description","section_time","section_type","column_text","column_start_date","column_duration","column_add","link","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","minutes","hours","days","weeks","months","years"],"mappings":"AAAAA,MAAMC,QACLC,MACCC,YAAa,QAAS,SAAU,MAAO,QAAS,MAAO,OAAQ,OAAQ,SAAU,SAAU,UAAW,SAAU,SAChHC,aAAc,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC3FC,UAAW,QAAS,MAAO,QAAS,QAAS,QAAS,OAAQ,OAC9DC,WAAY,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAE3CC,QACCC,qBAAsB,OACtBC,QAAS,MACTC,SAAU,OACVC,UAAW,OACXC,UAAW,WACXC,UAAW,OACXC,YAAa,MACbC,aAAc,QACdC,UAAW,OACXC,YAAa,MACbC,gBAAiB,GACjBC,iBAAkB,0BAClBC,oBAAqB,OACrBC,aAAc,QACdC,aAAa,OAGPC,YAAc,YACdC,kBAAoB,aACpBC,gBAAkB,WAClBC,WAAa,GAGnBC,KAAM,OACNC,sBAAsB,kBACtBC,WAAY,WACZC,SAAU,SAEVC,UAAW,OACXC,aAAc,UACdC,eAAgB,YAGVC,QAAS,UACTC,MAAO,QACPC,KAAM,OACNC,MAAO,OACPC,OAAQ,SACRC,MAAO"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_hu.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_hu.js deleted file mode 100755 index 67cbcbb42b..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_hu.js +++ /dev/null @@ -1,54 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale = { - date: { - month_full: ["Január", "Február", "Március", "Április", "Május", "Június", "Július", "Augusztus", "Szeptember", "Október", "November", "December"], - month_short: ["Jan", "Feb", "Már", "Ápr", "Máj", "Jún", "Júl", "Aug", "Sep", "Okt", "Nov", "Dec"], - day_full: ["Vasárnap", "Hétfõ", "Kedd", "Szerda", "Csütörtök", "Péntek", "szombat"], - day_short: ["Va", "Hé", "Ke", "Sze", "Csü", "Pé", "Szo"] - }, - labels: { - dhx_cal_today_button: "Ma", - day_tab: "Nap", - week_tab: "Hét", - month_tab: "Hónap", - new_event: "Új esemény", - icon_save: "Mentés", - icon_cancel: "Mégse", - icon_details: "Részletek", - icon_edit: "Szerkesztés", - icon_delete: "Törlés", - confirm_closing: "", //A változások elvesznek, biztosan folytatja? " - confirm_deleting: "Az esemény törölve lesz, biztosan folytatja?", - section_description: "Leírás", - section_time: "Idõszak", - section_type:"Type", - /* grid columns */ - - column_text : "Task name", - column_start_date : "Start time", - column_duration : "Duration", - column_add : "", - - /* link confirmation */ - link: "Link", - confirm_link_deleting:"will be deleted", - link_start: " (start)", - link_end: " (end)", - - type_task: "Task", - type_project: "Project", - type_milestone: "Milestone", - - - minutes: "Minutes", - hours: "Hours", - days: "Days", - weeks: "Week", - months: "Months", - years: "Years" - } -}; - diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_hu.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_hu.js.map deleted file mode 100755 index a5c9163cea..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_hu.js.map +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -{"version":3,"file":"locale_hu.js.map","sources":["locale_hu.js"],"names":["gantt","locale","date","month_full","month_short","day_full","day_short","labels","dhx_cal_today_button","day_tab","week_tab","month_tab","new_event","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","confirm_closing","confirm_deleting","section_description","section_time","section_type","column_text","column_start_date","column_duration","column_add","link","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","minutes","hours","days","weeks","months","years"],"mappings":"AAAAA,MAAMC,QACLC,MACCC,YAAa,SAAU,UAAW,UAAW,UAAW,QAAS,SAAU,SAAU,YAAa,aAAc,UAAW,WAAY,YACvIC,aAAc,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC3FC,UAAW,WAAY,QAAS,OAAQ,SAAU,YAAa,SAAU,WACzEC,WAAY,KAAM,KAAM,KAAM,MAAO,MAAO,KAAM,QAEnDC,QACCC,qBAAsB,KACtBC,QAAS,MACTC,SAAU,MACVC,UAAW,QACXC,UAAW,aACXC,UAAW,SACXC,YAAa,QACbC,aAAc,YACdC,UAAW,cACXC,YAAa,SACbC,gBAAiB,GACjBC,iBAAkB,+CAClBC,oBAAqB,SACrBC,aAAc,UACdC,aAAa,OAGPC,YAAc,YACdC,kBAAoB,aACpBC,gBAAkB,WAClBC,WAAa,GAGnBC,KAAM,OACNC,sBAAsB,kBACtBC,WAAY,WACZC,SAAU,SAEVC,UAAW,OACXC,aAAc,UACdC,eAAgB,YAGVC,QAAS,UACTC,MAAO,QACPC,KAAM,OACNC,MAAO,OACPC,OAAQ,SACRC,MAAO"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_id.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_id.js deleted file mode 100755 index ba82dc187b..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_id.js +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale = { date: { month_full: ["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"], month_short: ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Ags", "Sep", "Okt", "Nov", "Des"], day_full: ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"], day_short: ["Ming", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab"] }, labels: { dhx_cal_today_button: "Hari Ini", day_tab: "Hari", week_tab: "Minggu", month_tab: "Bulan", new_event: "Acara Baru", icon_save: "Simpan", icon_cancel: "Batal", icon_details: "Detail", icon_edit: "Edit", icon_delete: "Hapus", confirm_closing: "", //Perubahan tidak akan disimpan ? confirm_deleting: "Acara akan dihapus", section_description: "Keterangan", section_time: "Periode", section_type:"Type", /* grid columns */ column_text : "Task name", column_start_date : "Start time", column_duration : "Duration", column_add : "", /* link confirmation */ link: "Link", confirm_link_deleting:"will be deleted", link_start: " (start)", link_end: " (end)", type_task: "Task", type_project: "Project", type_milestone: "Milestone", minutes: "Minutes", hours: "Hours", days: "Days", weeks: "Week", months: "Months", years: "Years" } }; \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_id.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_id.js.map deleted file mode 100755 index c4f2c0f0f1..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_id.js.map +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -{"version":3,"file":"locale_id.js.map","sources":["locale_id.js"],"names":["gantt","locale","date","month_full","month_short","day_full","day_short","labels","dhx_cal_today_button","day_tab","week_tab","month_tab","new_event","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","confirm_closing","confirm_deleting","section_description","section_time","section_type","column_text","column_start_date","column_duration","column_add","link","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","minutes","hours","days","weeks","months","years"],"mappings":"AAAAA,MAAMC,QACLC,MACCC,YAAa,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OAAQ,UAAW,YAAa,UAAW,WAAY,YAC5HC,aAAc,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC3FC,UAAW,SAAU,QAAS,SAAU,OAAQ,QAAS,QAAS,SAClEC,WAAY,OAAQ,MAAO,MAAO,MAAO,MAAO,MAAO,QAExDC,QACCC,qBAAsB,WACtBC,QAAS,OACTC,SAAU,SACVC,UAAW,QACXC,UAAW,aACXC,UAAW,SACXC,YAAa,QACbC,aAAc,SACdC,UAAW,OACXC,YAAa,QACbC,gBAAiB,GACjBC,iBAAkB,qBAClBC,oBAAqB,aACrBC,aAAc,UACdC,aAAa,OAGPC,YAAc,YACdC,kBAAoB,aACpBC,gBAAkB,WAClBC,WAAa,GAGnBC,KAAM,OACNC,sBAAsB,kBACtBC,WAAY,WACZC,SAAU,SAEVC,UAAW,OACXC,aAAc,UACdC,eAAgB,YAGVC,QAAS,UACTC,MAAO,QACPC,KAAM,OACNC,MAAO,OACPC,OAAQ,SACRC,MAAO"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_it.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_it.js deleted file mode 100755 index db695646bc..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_it.js +++ /dev/null @@ -1,54 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale = { - date: { - month_full: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"], - month_short: ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"], - day_full: ["Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato"], - day_short: ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"] - }, - labels: { - dhx_cal_today_button: "Oggi", - day_tab: "Giorno", - week_tab: "Settimana", - month_tab: "Mese", - new_event: "Nuovo evento", - icon_save: "Salva", - icon_cancel: "Chiudi", - icon_details: "Dettagli", - icon_edit: "Modifica", - icon_delete: "Elimina", - confirm_closing: "", //Le modifiche apportate saranno perse, siete sicuri? - confirm_deleting: "L'evento sarà eliminato, siete sicuri?", - section_description: "Descrizione", - section_time: "Periodo di tempo", - section_type:"Type", - /* grid columns */ - - column_text : "Task name", - column_start_date : "Start time", - column_duration : "Duration", - column_add : "", - - /* link confirmation */ - link: "Link", - confirm_link_deleting:"will be deleted", - link_start: " (start)", - link_end: " (end)", - - type_task: "Task", - type_project: "Project", - type_milestone: "Milestone", - - - minutes: "Minutes", - hours: "Hours", - days: "Days", - weeks: "Week", - months: "Months", - years: "Years" - } -}; - diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_it.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_it.js.map deleted file mode 100755 index 9ba62a9af2..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_it.js.map +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -{"version":3,"file":"locale_it.js.map","sources":["locale_it.js"],"names":["gantt","locale","date","month_full","month_short","day_full","day_short","labels","dhx_cal_today_button","day_tab","week_tab","month_tab","new_event","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","confirm_closing","confirm_deleting","section_description","section_time","section_type","column_text","column_start_date","column_duration","column_add","link","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","minutes","hours","days","weeks","months","years"],"mappings":"AAAAA,MAAMC,QACLC,MACCC,YAAa,UAAW,WAAY,QAAS,SAAU,SAAU,SAAU,SAAU,SAAU,YAAa,UAAW,WAAY,YACnIC,aAAc,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC3FC,UAAW,WAAY,SAAU,UAAW,YAAa,UAAW,UAAW,UAC/EC,WAAY,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,QAEvDC,QACCC,qBAAsB,OACtBC,QAAS,SACTC,SAAU,YACVC,UAAW,OACXC,UAAW,eACXC,UAAW,QACXC,YAAa,SACbC,aAAc,WACdC,UAAW,WACXC,YAAa,UACbC,gBAAiB,GACjBC,iBAAkB,yCAClBC,oBAAqB,cACrBC,aAAc,mBACdC,aAAa,OAGPC,YAAc,YACdC,kBAAoB,aACpBC,gBAAkB,WAClBC,WAAa,GAGnBC,KAAM,OACNC,sBAAsB,kBACtBC,WAAY,WACZC,SAAU,SAEVC,UAAW,OACXC,aAAc,UACdC,eAAgB,YAGVC,QAAS,UACTC,MAAO,QACPC,KAAM,OACNC,MAAO,OACPC,OAAQ,SACRC,MAAO"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_jp.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_jp.js deleted file mode 100755 index d46fc8a3b4..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_jp.js +++ /dev/null @@ -1,57 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -/* - Translation by Genexus Japan Inc. - */ -gantt.locale = { - date: { - month_full: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], - month_short: [ "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], - day_full: ["日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"], - day_short: ["日", "月", "火", "水", "木", "金", "土"] - }, - labels: { - dhx_cal_today_button: "今日", - day_tab: "日", - week_tab: "週", - month_tab: "月", - new_event: "新イベント", - icon_save: "保存", - icon_cancel: "キャンセル", - icon_details: "詳細", - icon_edit: "編集", - icon_delete: "削除", - confirm_closing: "", //変更が取り消されます、宜しいですか? - confirm_deleting: "イベント完全に削除されます、宜しいですか?", - section_description: "デスクリプション", - section_time: "期間", - section_type:"Type", - /* grid columns */ - - column_text : "Task name", - column_start_date : "Start time", - column_duration : "Duration", - column_add : "", - - /* link confirmation */ - link: "Link", - confirm_link_deleting:"will be deleted", - link_start: " (start)", - link_end: " (end)", - - type_task: "Task", - type_project: "Project", - type_milestone: "Milestone", - - - minutes: "Minutes", - hours: "Hours", - days: "Days", - weeks: "Week", - months: "Months", - years: "Years" - } -}; - diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_jp.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_jp.js.map deleted file mode 100755 index 70dfcff405..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_jp.js.map +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -{"version":3,"file":"locale_jp.js.map","sources":["locale_jp.js"],"names":["gantt","locale","date","month_full","month_short","day_full","day_short","labels","dhx_cal_today_button","day_tab","week_tab","month_tab","new_event","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","confirm_closing","confirm_deleting","section_description","section_time","section_type","column_text","column_start_date","column_duration","column_add","link","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","minutes","hours","days","weeks","months","years"],"mappings":"AAGAA,MAAMC,QACLC,MACCC,YAAa,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,MAAO,OACjFC,aAAe,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,MAAO,OACnFC,UAAW,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OACrDC,WAAY,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAE3CC,QACCC,qBAAsB,KACtBC,QAAS,IACTC,SAAU,IACVC,UAAW,IACXC,UAAW,QACXC,UAAW,KACXC,YAAa,QACbC,aAAc,KACdC,UAAW,KACXC,YAAa,KACbC,gBAAiB,GACjBC,iBAAkB,wBAClBC,oBAAqB,WACrBC,aAAc,KACdC,aAAa,OAGPC,YAAc,YACdC,kBAAoB,aACpBC,gBAAkB,WAClBC,WAAa,GAGnBC,KAAM,OACNC,sBAAsB,kBACtBC,WAAY,WACZC,SAAU,SAEVC,UAAW,OACXC,aAAc,UACdC,eAAgB,YAGVC,QAAS,UACTC,MAAO,QACPC,KAAM,OACNC,MAAO,OACPC,OAAQ,SACRC,MAAO"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_nb.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_nb.js deleted file mode 100755 index ff5edb32c9..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_nb.js +++ /dev/null @@ -1,54 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale = { - date: { - month_full: ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"], - month_short: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"], - day_full: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag"], - day_short: ["Søn", "Mon", "Tir", "Ons", "Tor", "Fre", "Lør"] - }, - labels: { - dhx_cal_today_button: "I dag", - day_tab: "Dag", - week_tab: "Uke", - month_tab: "Måned", - new_event: "Ny hendelse", - icon_save: "Lagre", - icon_cancel: "Avbryt", - icon_details: "Detaljer", - icon_edit: "Rediger", - icon_delete: "Slett", - confirm_closing: "", //Your changes will be lost, are your sure ? - confirm_deleting: "Hendelsen vil bli slettet permanent. Er du sikker?", - section_description: "Beskrivelse", - section_time: "Tidsperiode", - section_type:"Type", - /* grid columns */ - - column_text : "Task name", - column_start_date : "Start time", - column_duration : "Duration", - column_add : "", - - /* link confirmation */ - link: "Link", - confirm_link_deleting:"will be deleted", - link_start: " (start)", - link_end: " (end)", - - type_task: "Task", - type_project: "Project", - type_milestone: "Milestone", - - - minutes: "Minutes", - hours: "Hours", - days: "Days", - weeks: "Week", - months: "Months", - years: "Years" - } -}; - diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_nb.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_nb.js.map deleted file mode 100755 index 46e395e05e..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_nb.js.map +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -{"version":3,"file":"locale_nb.js.map","sources":["locale_nb.js"],"names":["gantt","locale","date","month_full","month_short","day_full","day_short","labels","dhx_cal_today_button","day_tab","week_tab","month_tab","new_event","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","confirm_closing","confirm_deleting","section_description","section_time","section_type","column_text","column_start_date","column_duration","column_add","link","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","minutes","hours","days","weeks","months","years"],"mappings":"AAAAA,MAAMC,QACLC,MACCC,YAAa,SAAU,UAAW,OAAQ,QAAS,MAAO,OAAQ,OAAQ,SAAU,YAAa,UAAW,WAAY,YACxHC,aAAc,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC3FC,UAAW,SAAU,SAAU,UAAW,SAAU,UAAW,SAAU,UACzEC,WAAY,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,QAEvDC,QACCC,qBAAsB,QACtBC,QAAS,MACTC,SAAU,MACVC,UAAW,QACXC,UAAW,cACXC,UAAW,QACXC,YAAa,SACbC,aAAc,WACdC,UAAW,UACXC,YAAa,QACbC,gBAAiB,GACjBC,iBAAkB,qDAClBC,oBAAqB,cACrBC,aAAc,cACdC,aAAa,OAGPC,YAAc,YACdC,kBAAoB,aACpBC,gBAAkB,WAClBC,WAAa,GAGnBC,KAAM,OACNC,sBAAsB,kBACtBC,WAAY,WACZC,SAAU,SAEVC,UAAW,OACXC,aAAc,UACdC,eAAgB,YAGVC,QAAS,UACTC,MAAO,QACPC,KAAM,OACNC,MAAO,OACPC,OAAQ,SACRC,MAAO"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_nl.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_nl.js deleted file mode 100755 index e5363a64b0..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_nl.js +++ /dev/null @@ -1,54 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale = { - date: { - month_full: ["Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"], - month_short: ["Jan", "Feb", "mrt", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], - day_full: ["Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag"], - day_short: ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za"] - }, - labels: { - dhx_cal_today_button: "Vandaag", - day_tab: "Dag", - week_tab: "Week", - month_tab: "Maand", - new_event: "Nieuw item", - icon_save: "Opslaan", - icon_cancel: "Annuleren", - icon_details: "Details", - icon_edit: "Bewerken", - icon_delete: "Verwijderen", - confirm_closing: "", //Your changes will be lost, are your sure ? - confirm_deleting: "Item zal permanent worden verwijderd, doorgaan?", - section_description: "Beschrijving", - section_time: "Tijd periode", - section_type:"Type", - /* grid columns */ - - column_text : "Taak omschrijving", - column_start_date : "Startdatum", - column_duration : "Duur", - column_add : "", - - /* link confirmation */ - link: "Koppeling", - confirm_link_deleting:"zal worden verwijderd", - link_start: " (start)", - link_end: " (eind)", - - type_task: "Task", - type_project: "Project", - type_milestone: "Milestone", - - - minutes: "minuten", - hours: "uren", - days: "dagen", - weeks: "weken", - months: "maanden", - years: "jaren" - } -}; - diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_nl.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_nl.js.map deleted file mode 100755 index 2ad7ff0315..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_nl.js.map +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -{"version":3,"file":"locale_nl.js.map","sources":["locale_nl.js"],"names":["gantt","locale","date","month_full","month_short","day_full","day_short","labels","dhx_cal_today_button","day_tab","week_tab","month_tab","new_event","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","confirm_closing","confirm_deleting","section_description","section_time","section_type","column_text","column_start_date","column_duration","column_add","link","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","minutes","hours","days","weeks","months","years"],"mappings":"AAAAA,MAAMC,QACLC,MACCC,YAAa,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OAAQ,WAAY,YAAa,UAAW,WAAY,YAC7HC,aAAc,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC3FC,UAAW,SAAU,UAAW,UAAW,WAAY,YAAa,UAAW,YAC/EC,WAAY,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAEjDC,QACCC,qBAAsB,UACtBC,QAAS,MACTC,SAAU,OACVC,UAAW,QACXC,UAAW,aACXC,UAAW,UACXC,YAAa,YACbC,aAAc,UACdC,UAAW,WACXC,YAAa,cACbC,gBAAiB,GACjBC,iBAAkB,kDAClBC,oBAAqB,eACrBC,aAAc,eACdC,aAAa,OAGPC,YAAc,oBACdC,kBAAoB,aACpBC,gBAAkB,OAClBC,WAAa,GAGnBC,KAAM,YACNC,sBAAsB,wBACtBC,WAAY,WACZC,SAAU,UAEVC,UAAW,OACXC,aAAc,UACdC,eAAgB,YAGVC,QAAS,UACTC,MAAO,OACPC,KAAM,QACNC,MAAO,QACPC,OAAQ,UACRC,MAAO"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_no.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_no.js deleted file mode 100755 index b18049c68c..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_no.js +++ /dev/null @@ -1,54 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale = { - date: { - month_full: ["Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"], - month_short: ["Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Des"], - day_full: ["Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag"], - day_short: ["Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"] - }, - labels: { - dhx_cal_today_button: "Idag", - day_tab: "Dag", - week_tab: "Uke", - month_tab: "Måned", - new_event: "Ny", - icon_save: "Lagre", - icon_cancel: "Avbryt", - icon_details: "Detaljer", - icon_edit: "Endre", - icon_delete: "Slett", - confirm_closing: "Endringer blir ikke lagret, er du sikker?", //Endringer blir ikke lagret, er du sikker? - confirm_deleting: "Oppføringen vil bli slettet, er du sikker?", - section_description: "Beskrivelse", - section_time: "Tidsperiode", - section_type:"Type", - /* grid columns */ - - column_text : "Task name", - column_start_date : "Start time", - column_duration : "Duration", - column_add : "", - - /* link confirmation */ - link: "Link", - confirm_link_deleting:"will be deleted", - link_start: " (start)", - link_end: " (end)", - - type_task: "Task", - type_project: "Project", - type_milestone: "Milestone", - - - minutes: "Minutes", - hours: "Hours", - days: "Days", - weeks: "Week", - months: "Months", - years: "Years" - } -}; - diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_no.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_no.js.map deleted file mode 100755 index e9bfea2da6..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_no.js.map +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -{"version":3,"file":"locale_no.js.map","sources":["locale_no.js"],"names":["gantt","locale","date","month_full","month_short","day_full","day_short","labels","dhx_cal_today_button","day_tab","week_tab","month_tab","new_event","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","confirm_closing","confirm_deleting","section_description","section_time","section_type","column_text","column_start_date","column_duration","column_add","link","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","minutes","hours","days","weeks","months","years"],"mappings":"AAAAA,MAAMC,QACLC,MACCC,YAAa,SAAU,UAAW,OAAQ,QAAS,MAAO,OAAQ,OAAQ,SAAU,YAAa,UAAW,WAAY,YACxHC,aAAc,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC3FC,UAAW,SAAU,SAAU,UAAW,SAAU,UAAW,SAAU,UACzEC,WAAY,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,QAEvDC,QACCC,qBAAsB,OACtBC,QAAS,MACTC,SAAU,MACVC,UAAW,QACXC,UAAW,KACXC,UAAW,QACXC,YAAa,SACbC,aAAc,WACdC,UAAW,QACXC,YAAa,QACbC,gBAAiB,4CACjBC,iBAAkB,6CAClBC,oBAAqB,cACrBC,aAAc,cACdC,aAAa,OAGPC,YAAc,YACdC,kBAAoB,aACpBC,gBAAkB,WAClBC,WAAa,GAGnBC,KAAM,OACNC,sBAAsB,kBACtBC,WAAY,WACZC,SAAU,SAEVC,UAAW,OACXC,aAAc,UACdC,eAAgB,YAGVC,QAAS,UACTC,MAAO,QACPC,KAAM,OACNC,MAAO,OACPC,OAAQ,SACRC,MAAO"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_pl.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_pl.js deleted file mode 100755 index b16e18f694..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_pl.js +++ /dev/null @@ -1,54 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale = { - date: { - month_full: ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"], - month_short: ["Sty", "Lut", "Mar", "Kwi", "Maj", "Cze", "Lip", "Sie", "Wrz", "Paź", "Lis", "Gru"], - day_full: ["Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota"], - day_short: ["Nie", "Pon", "Wto", "Śro", "Czw", "Pią", "Sob"] - }, - labels: { - dhx_cal_today_button: "Dziś", - day_tab: "Dzień", - week_tab: "Tydzień", - month_tab: "Miesiąc", - new_event: "Nowe zdarzenie", - icon_save: "Zapisz", - icon_cancel: "Anuluj", - icon_details: "Szczegóły", - icon_edit: "Edytuj", - icon_delete: "Usuń", - confirm_closing: "", //Zmiany zostaną usunięte, jesteś pewien? - confirm_deleting: "Zdarzenie zostanie usunięte na zawsze, kontynuować?", - section_description: "Opis", - section_time: "Okres czasu", - section_type: "Typ", - /* grid columns */ - - column_text : "Nazwa zadania", - column_start_date : "Początek", - column_duration : "Czas trwania", - column_add : "", - - /* link confirmation */ - link: "Link", - confirm_link_deleting:"zostanie usunięty", - link_start: " (początek)", - link_end: " (koniec)", - - type_task: "Zadanie", - type_project: "Projekt", - type_milestone: "Milestone", - - - minutes: "Minuty", - hours: "Godziny", - days: "Dni", - weeks: "Tydzień", - months: "Miesiące", - years: "Lata" - } -}; - diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_pl.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_pl.js.map deleted file mode 100755 index dd77fa7b6c..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_pl.js.map +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -{"version":3,"file":"locale_pl.js.map","sources":["locale_pl.js"],"names":["gantt","locale","date","month_full","month_short","day_full","day_short","labels","dhx_cal_today_button","day_tab","week_tab","month_tab","new_event","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","confirm_closing","confirm_deleting","section_description","section_time","section_type","column_text","column_start_date","column_duration","column_add","link","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","minutes","hours","days","weeks","months","years"],"mappings":"AAAAA,MAAMC,QACLC,MACCC,YAAa,UAAW,OAAQ,SAAU,WAAY,MAAO,WAAY,SAAU,WAAY,WAAY,cAAe,WAAY,YACtIC,aAAc,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC3FC,UAAW,YAAa,eAAgB,SAAU,QAAS,WAAY,SAAU,UACjFC,WAAY,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,QAEvDC,QACCC,qBAAsB,OACtBC,QAAS,QACTC,SAAU,UACVC,UAAW,UACXC,UAAW,iBACXC,UAAW,SACXC,YAAa,SACbC,aAAc,YACdC,UAAW,SACXC,YAAa,OACbC,gBAAiB,GACjBC,iBAAkB,sDAClBC,oBAAqB,OACrBC,aAAc,cACdC,aAAc,MAGdC,YAAc,gBACdC,kBAAoB,WACpBC,gBAAkB,eAClBC,WAAa,GAGbC,KAAM,OACNC,sBAAsB,oBACtBC,WAAY,cACZC,SAAU,YAEVC,UAAW,UACXC,aAAc,UACdC,eAAgB,YAGhBC,QAAS,SACTC,MAAO,UACPC,KAAM,MACNC,MAAO,UACPC,OAAQ,WACRC,MAAO"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_pt.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_pt.js deleted file mode 100755 index df38e1b499..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_pt.js +++ /dev/null @@ -1,63 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -/* - - TRANSLATION BY MATTHEUS PIROVANI RORIZ GONЗALVES - - mattheusroriz@hotmail.com / mattheus.pirovani@gmail.com / - - www.atrixian.com.br - - */ - -gantt.locale = { - date: { - month_full: ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], - month_short: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"], - day_full: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"], - day_short: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab"] - }, - labels: { - dhx_cal_today_button: "Hoje", - day_tab: "Dia", - week_tab: "Semana", - month_tab: "Mês", - new_event: "Novo evento", - icon_save: "Salvar", - icon_cancel: "Cancelar", - icon_details: "Detalhes", - icon_edit: "Editar", - icon_delete: "Deletar", - confirm_closing: "Suas alterações serão perdidas. Você tem certeza?", //Your changes will be lost, are your sure ? - confirm_deleting: "Tem certeza que deseja excluir?", - section_description: "Descrição", - section_time: "Período de tempo", - section_type:"Type", - /* grid columns */ - - column_text : "Nome tarefa", - column_start_date : "Data início", - column_duration : "Duração", - column_add : "", - - /* link confirmation */ - link: "Link", - confirm_link_deleting:"será apagado", - link_start: " (início)", - link_end: " (fim)", - - type_task: "Task", - type_project: "Project", - type_milestone: "Milestone", - - - minutes: "Minutos", - hours: "Horas", - days: "Dias", - weeks: "Semanas", - months: "Meses", - years: "Anos" - } -}; \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_pt.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_pt.js.map deleted file mode 100755 index 67e974f6e1..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_pt.js.map +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -{"version":3,"file":"locale_pt.js.map","sources":["locale_pt.js"],"names":["gantt","locale","date","month_full","month_short","day_full","day_short","labels","dhx_cal_today_button","day_tab","week_tab","month_tab","new_event","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","confirm_closing","confirm_deleting","section_description","section_time","section_type","column_text","column_start_date","column_duration","column_add","link","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","minutes","hours","days","weeks","months","years"],"mappings":"AAUAA,MAAMC,QACLC,MACCC,YAAa,UAAW,YAAa,QAAS,QAAS,OAAQ,QAAS,QAAS,SAAU,WAAY,UAAW,WAAY,YAC9HC,aAAc,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC3FC,UAAW,UAAW,UAAW,QAAS,SAAU,SAAU,QAAS,UACvEC,WAAY,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,QAEvDC,QACCC,qBAAsB,OACtBC,QAAS,MACTC,SAAU,SACVC,UAAW,MACXC,UAAW,cACXC,UAAW,SACXC,YAAa,WACbC,aAAc,WACdC,UAAW,SACXC,YAAa,UACbC,gBAAiB,oDACjBC,iBAAkB,kCAClBC,oBAAqB,YACrBC,aAAc,mBACdC,aAAa,OAGbC,YAAc,cACdC,kBAAoB,cACpBC,gBAAkB,UAClBC,WAAa,GAGbC,KAAM,OACNC,sBAAsB,eACtBC,WAAY,YACZC,SAAU,SAEVC,UAAW,OACXC,aAAc,UACdC,eAAgB,YAGhBC,QAAS,UACTC,MAAO,QACPC,KAAM,OACNC,MAAO,UACPC,OAAQ,QACRC,MAAO"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ro.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ro.js deleted file mode 100755 index 2d6de367a8..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ro.js +++ /dev/null @@ -1,58 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -/* - Traducere de Ovidiu Lixandru: http://www.madball.ro - */ - -gantt.locale = { - date:{ - month_full:["Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie", "Iulie", "August", "Septembrie", "Octombrie", "November", "December"], - month_short:["Ian", "Feb", "Mar", "Apr", "Mai", "Iun", "Iul", "Aug", "Sep", "Oct", "Nov", "Dec"], - day_full:["Duminica", "Luni", "Marti", "Miercuri", "Joi", "Vineri", "Sambata"], - day_short:["Du", "Lu", "Ma", "Mi", "Jo", "Vi", "Sa"] - }, - labels:{ - dhx_cal_today_button:"Astazi", - day_tab:"Zi", - week_tab:"Saptamana", - month_tab:"Luna", - new_event:"Eveniment nou", - icon_save:"Salveaza", - icon_cancel:"Anuleaza", - icon_details:"Detalii", - icon_edit:"Editeaza", - icon_delete:"Sterge", - confirm_closing:"Schimbarile nu vor fi salvate, esti sigur?",//Your changes will be lost, are your sure ? - confirm_deleting:"Evenimentul va fi sters permanent, esti sigur?", - section_description:"Descriere", - section_time:"Interval", - section_type:"Type", - /* grid columns */ - - column_text : "Task name", - column_start_date : "Start time", - column_duration : "Duration", - column_add : "", - - /* link confirmation */ - link: "Link", - confirm_link_deleting:"will be deleted", - link_start: " (start)", - link_end: " (end)", - - type_task: "Task", - type_project: "Project", - type_milestone: "Milestone", - - - minutes: "Minutes", - hours: "Hours", - days: "Days", - weeks: "Week", - months: "Months", - years: "Years" - } -}; - diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ro.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ro.js.map deleted file mode 100755 index 8ec0a13bc7..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ro.js.map +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -{"version":3,"file":"locale_ro.js.map","sources":["locale_ro.js"],"names":["gantt","locale","date","month_full","month_short","day_full","day_short","labels","dhx_cal_today_button","day_tab","week_tab","month_tab","new_event","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","confirm_closing","confirm_deleting","section_description","section_time","section_type","column_text","column_start_date","column_duration","column_add","link","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","minutes","hours","days","weeks","months","years"],"mappings":"AAIAA,MAAMC,QACLC,MACCC,YAAY,WAAY,YAAa,SAAU,UAAW,MAAO,QAAS,QAAS,SAAU,aAAc,YAAa,WAAY,YACpIC,aAAa,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC1FC,UAAU,WAAY,OAAQ,QAAS,WAAY,MAAO,SAAU,WACpEC,WAAW,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAEhDC,QACCC,qBAAqB,SACrBC,QAAQ,KACRC,SAAS,YACTC,UAAU,OACVC,UAAU,gBACVC,UAAU,WACVC,YAAY,WACZC,aAAa,UACbC,UAAU,WACVC,YAAY,SACZC,gBAAgB,6CAChBC,iBAAiB,iDACjBC,oBAAoB,YACpBC,aAAa,WACbC,aAAa,OAGPC,YAAc,YACdC,kBAAoB,aACpBC,gBAAkB,WAClBC,WAAa,GAGnBC,KAAM,OACNC,sBAAsB,kBACtBC,WAAY,WACZC,SAAU,SAEVC,UAAW,OACXC,aAAc,UACdC,eAAgB,YAGVC,QAAS,UACTC,MAAO,QACPC,KAAM,OACNC,MAAO,OACPC,OAAQ,SACRC,MAAO"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ru.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ru.js deleted file mode 100755 index c0b448a9ad..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ru.js +++ /dev/null @@ -1,54 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale = { - date: { - month_full: ["Январь", "Февраль", "Март", "Апрель", "Maй", "Июнь", "Июль", "Август", "Сентябрь", "Oктябрь", "Ноябрь", "Декабрь"], - month_short: ["Янв", "Фев", "Maр", "Aпр", "Maй", "Июн", "Июл", "Aвг", "Сен", "Окт", "Ноя", "Дек"], - day_full: [ "Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"], - day_short: ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"] - }, - labels: { - dhx_cal_today_button: "Сегодня", - day_tab: "День", - week_tab: "Неделя", - month_tab: "Месяц", - new_event: "Новое событие", - icon_save: "Сохранить", - icon_cancel: "Отменить", - icon_details: "Детали", - icon_edit: "Изменить", - icon_delete: "Удалить", - confirm_closing: "", //Ваши изменения будут потеряны, продолжить? - confirm_deleting: "Событие будет удалено безвозвратно, продолжить?", - section_description: "Описание", - section_time: "Период времени", - section_type:"Тип", - /* grid columns */ - - column_text : "Задача", - column_start_date : "Начало", - column_duration : "Длительность", - column_add : "", - - /* link confirmation */ - link: "Связь", - confirm_link_deleting:"будет удалена", - link_start: " (начало)", - link_end: " (конец)", - - type_task: "Task", - type_project: "Project", - type_milestone: "Milestone", - - - minutes: "Минута", - hours: "Час", - days: "День", - weeks: "Неделя", - months: "Месяц", - years: "Год" - } -}; - diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ru.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ru.js.map deleted file mode 100755 index 89a03e25ef..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ru.js.map +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -{"version":3,"file":"locale_ru.js.map","sources":["locale_ru.js"],"names":["gantt","locale","date","month_full","month_short","day_full","day_short","labels","dhx_cal_today_button","day_tab","week_tab","month_tab","new_event","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","confirm_closing","confirm_deleting","section_description","section_time","section_type","column_text","column_start_date","column_duration","column_add","link","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","minutes","hours","days","weeks","months","years"],"mappings":"AAAAA,MAAMC,QACLC,MACCC,YAAa,SAAU,UAAW,OAAQ,SAAU,MAAO,OAAQ,OAAQ,SAAU,WAAY,UAAW,SAAU,WACtHC,aAAc,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC3FC,UAAY,cAAe,cAAe,UAAW,QAAS,UAAW,UAAW,WACpFC,WAAY,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAEjDC,QACCC,qBAAsB,UACtBC,QAAS,OACTC,SAAU,SACVC,UAAW,QACXC,UAAW,gBACXC,UAAW,YACXC,YAAa,WACbC,aAAc,SACdC,UAAW,WACXC,YAAa,UACbC,gBAAiB,GACjBC,iBAAkB,kDAClBC,oBAAqB,WACrBC,aAAc,iBACdC,aAAa,MAGPC,YAAc,SACdC,kBAAoB,SACpBC,gBAAkB,eAClBC,WAAa,GAGnBC,KAAM,QACNC,sBAAsB,gBACtBC,WAAY,YACZC,SAAU,WAEVC,UAAW,OACXC,aAAc,UACdC,eAAgB,YAGVC,QAAS,SACTC,MAAO,MACPC,KAAM,OACNC,MAAO,SACPC,OAAQ,QACRC,MAAO"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_si.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_si.js deleted file mode 100755 index b8ce9d5492..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_si.js +++ /dev/null @@ -1,54 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale = { - date: { - month_full: ["Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December"], - month_short: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], - day_full: ["Nedelja", "Ponedeljek", "Torek", "Sreda", "Četrtek", "Petek", "Sobota"], - day_short: ["Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob"] - }, - labels: { - dhx_cal_today_button: "Danes", - day_tab: "Dan", - week_tab: "Teden", - month_tab: "Mesec", - new_event: "Nov dogodek", - icon_save: "Shrani", - icon_cancel: "Prekliči", - icon_details: "Podrobnosti", - icon_edit: "Uredi", - icon_delete: "Izbriši", - confirm_closing: "", //Spremembe ne bodo shranjene. Želite nadaljevati ? - confirm_deleting: "Dogodek bo izbrisan. Želite nadaljevati?", - section_description: "Opis", - section_time: "Časovni okvir", - section_type:"Type", - /* grid columns */ - - column_text : "Task name", - column_start_date : "Start time", - column_duration : "Duration", - column_add : "", - - /* link confirmation */ - link: "Link", - confirm_link_deleting:"will be deleted", - link_start: " (start)", - link_end: " (end)", - - type_task: "Task", - type_project: "Project", - type_milestone: "Milestone", - - - minutes: "Minutes", - hours: "Hours", - days: "Days", - weeks: "Week", - months: "Months", - years: "Years" - } -}; - diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_si.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_si.js.map deleted file mode 100755 index 321a97ad3c..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_si.js.map +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -{"version":3,"file":"locale_si.js.map","sources":["locale_si.js"],"names":["gantt","locale","date","month_full","month_short","day_full","day_short","labels","dhx_cal_today_button","day_tab","week_tab","month_tab","new_event","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","confirm_closing","confirm_deleting","section_description","section_time","section_type","column_text","column_start_date","column_duration","column_add","link","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","minutes","hours","days","weeks","months","years"],"mappings":"AAAAA,MAAMC,QACLC,MACCC,YAAa,SAAU,UAAW,QAAS,QAAS,MAAO,QAAS,QAAS,SAAU,YAAa,UAAW,WAAY,YAC3HC,aAAc,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC3FC,UAAW,UAAW,aAAc,QAAS,QAAS,UAAW,QAAS,UAC1EC,WAAY,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,QAEvDC,QACCC,qBAAsB,QACtBC,QAAS,MACTC,SAAU,QACVC,UAAW,QACXC,UAAW,cACXC,UAAW,SACXC,YAAa,WACbC,aAAc,cACdC,UAAW,QACXC,YAAa,UACbC,gBAAiB,GACjBC,iBAAkB,2CAClBC,oBAAqB,OACrBC,aAAc,gBACdC,aAAa,OAGPC,YAAc,YACdC,kBAAoB,aACpBC,gBAAkB,WAClBC,WAAa,GAGnBC,KAAM,OACNC,sBAAsB,kBACtBC,WAAY,WACZC,SAAU,SAEVC,UAAW,OACXC,aAAc,UACdC,eAAgB,YAGVC,QAAS,UACTC,MAAO,QACPC,KAAM,OACNC,MAAO,OACPC,OAAQ,SACRC,MAAO"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_sk.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_sk.js deleted file mode 100755 index 1af549f58e..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_sk.js +++ /dev/null @@ -1,54 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale = { - date: { - month_full: ["Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December"], - month_short: ["Jan", "Feb", "Mar", "Apr", "Máj", "Jún", "Júl", "Aug", "Sept", "Okt", "Nov", "Dec"], - day_full: ["Nedeľa", "Pondelok", "Utorok", "Streda", "Štvrtok", "Piatok", "Sobota"], - day_short: ["Ne", "Po", "Ut", "St", "Št", "Pi", "So"] - }, - labels: { - dhx_cal_today_button: "Dnes", - day_tab: "Deň", - week_tab: "Týždeň", - month_tab: "Mesiac", - new_event: "Nová udalosť", - icon_save: "Uložiť", - icon_cancel: "Späť", - icon_details: "Detail", - icon_edit: "Edituj", - icon_delete: "Zmazať", - confirm_closing: "Vaše zmeny nebudú uložené. Skutočne?", //Vaše změny budou ztraceny, opravdu ? - confirm_deleting: "Udalosť bude natrvalo vymazaná. Skutočne?", - section_description: "Poznámky", - section_time: "Doba platnosti", - section_type:"Type", - /* grid columns */ - - column_text : "Task name", - column_start_date : "Start time", - column_duration : "Duration", - column_add : "", - - /* link confirmation */ - link: "Link", - confirm_link_deleting:"will be deleted", - link_start: " (start)", - link_end: " (end)", - - type_task: "Task", - type_project: "Project", - type_milestone: "Milestone", - - - minutes: "Minutes", - hours: "Hours", - days: "Days", - weeks: "Week", - months: "Months", - years: "Years" - } -}; - diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_sk.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_sk.js.map deleted file mode 100755 index 526c156efe..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_sk.js.map +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -{"version":3,"file":"locale_sk.js.map","sources":["locale_sk.js"],"names":["gantt","locale","date","month_full","month_short","day_full","day_short","labels","dhx_cal_today_button","day_tab","week_tab","month_tab","new_event","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","confirm_closing","confirm_deleting","section_description","section_time","section_type","column_text","column_start_date","column_duration","column_add","link","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","minutes","hours","days","weeks","months","years"],"mappings":"AAAAA,MAAMC,QACLC,MACCC,YAAa,SAAU,UAAW,QAAS,QAAS,MAAO,MAAO,MAAO,SAAU,YAAa,UAAW,WAAY,YACvHC,aAAc,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAAQ,MAAO,MAAO,OAC5FC,UAAW,SAAU,WAAY,SAAU,SAAU,UAAW,SAAU,UAC1EC,WAAY,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAEjDC,QACCC,qBAAsB,OACtBC,QAAS,MACTC,SAAU,SACVC,UAAW,SACXC,UAAW,eACXC,UAAW,SACXC,YAAa,OACbC,aAAc,SACdC,UAAW,SACXC,YAAa,SACbC,gBAAiB,uCACjBC,iBAAkB,4CAClBC,oBAAqB,WACrBC,aAAc,iBACdC,aAAa,OAGPC,YAAc,YACdC,kBAAoB,aACpBC,gBAAkB,WAClBC,WAAa,GAGnBC,KAAM,OACNC,sBAAsB,kBACtBC,WAAY,WACZC,SAAU,SAEVC,UAAW,OACXC,aAAc,UACdC,eAAgB,YAGVC,QAAS,UACTC,MAAO,QACPC,KAAM,OACNC,MAAO,OACPC,OAAQ,SACRC,MAAO"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_sv.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_sv.js deleted file mode 100755 index a313f139be..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_sv.js +++ /dev/null @@ -1,54 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale = { - date: { - month_full: ["Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"], - month_short: ["Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"], - day_full: ["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag"], - day_short: ["Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör"] - }, - labels: { - dhx_cal_today_button: "Idag", - day_tab: "Dag", - week_tab: "Vecka", - month_tab: "Månad", - new_event: "Ny händelse", - icon_save: "Spara", - icon_cancel: "Ångra", - icon_details: "Detajer", - icon_edit: "Ändra", - icon_delete: "Ta bort", - confirm_closing: "", //Dina förändingar kommer gå förlorade, är du säker? - confirm_deleting: "Är du säker på att du vill ta bort händelsen permanent?", - section_description: "Beskrivning", - section_time: "Tid", - section_type:"Type", - /* grid columns */ - - column_text : "Task name", - column_start_date : "Start time", - column_duration : "Duration", - column_add : "", - - /* link confirmation */ - link: "Link", - confirm_link_deleting:"will be deleted", - link_start: " (start)", - link_end: " (end)", - - type_task: "Task", - type_project: "Project", - type_milestone: "Milestone", - - - minutes: "Minutes", - hours: "Hours", - days: "Days", - weeks: "Week", - months: "Months", - years: "Years" - } -}; - diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_sv.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_sv.js.map deleted file mode 100755 index be6c654843..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_sv.js.map +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -{"version":3,"file":"locale_sv.js.map","sources":["locale_sv.js"],"names":["gantt","locale","date","month_full","month_short","day_full","day_short","labels","dhx_cal_today_button","day_tab","week_tab","month_tab","new_event","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","confirm_closing","confirm_deleting","section_description","section_time","section_type","column_text","column_start_date","column_duration","column_add","link","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","minutes","hours","days","weeks","months","years"],"mappings":"AAAAA,MAAMC,QACLC,MACCC,YAAa,UAAW,WAAY,OAAQ,QAAS,MAAO,OAAQ,OAAQ,UAAW,YAAa,UAAW,WAAY,YAC3HC,aAAc,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC3FC,UAAW,SAAU,SAAU,SAAU,SAAU,UAAW,SAAU,UACxEC,WAAY,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,QAEvDC,QACCC,qBAAsB,OACtBC,QAAS,MACTC,SAAU,QACVC,UAAW,QACXC,UAAW,cACXC,UAAW,QACXC,YAAa,QACbC,aAAc,UACdC,UAAW,QACXC,YAAa,UACbC,gBAAiB,GACjBC,iBAAkB,0DAClBC,oBAAqB,cACrBC,aAAc,MACdC,aAAa,OAGPC,YAAc,YACdC,kBAAoB,aACpBC,gBAAkB,WAClBC,WAAa,GAGnBC,KAAM,OACNC,sBAAsB,kBACtBC,WAAY,WACZC,SAAU,SAEVC,UAAW,OACXC,aAAc,UACdC,eAAgB,YAGVC,QAAS,UACTC,MAAO,QACPC,KAAM,OACNC,MAAO,OACPC,OAAQ,SACRC,MAAO"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_tr.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_tr.js deleted file mode 100755 index 57182aa038..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_tr.js +++ /dev/null @@ -1,54 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale = { - date: { - month_full: ["Ocak", "Þubat", "Mart", "Nisan", "Mayýs", "Haziran", "Temmuz", "Aðustos", "Eylül", "Ekim", "Kasým", "Aralýk"], - month_short: ["Oca", "Þub", "Mar", "Nis", "May", "Haz", "Tem", "Aðu", "Eyl", "Eki", "Kas", "Ara"], - day_full: ["Pazar", "Pazartes,", "Salý", "Çarþamba", "Perþembe", "Cuma", "Cumartesi"], - day_short: ["Paz", "Pts", "Sal", "Çar", "Per", "Cum", "Cts"] - }, - labels: { - dhx_cal_today_button: "Bugün", - day_tab: "Gün", - week_tab: "Hafta", - month_tab: "Ay", - new_event: "Uygun", - icon_save: "Kaydet", - icon_cancel: "Ýptal", - icon_details: "Detaylar", - icon_edit: "Düzenle", - icon_delete: "Sil", - confirm_closing: "", //Your changes will be lost, are your sure ? - confirm_deleting: "Etkinlik silinecek, devam?", - section_description: "Açýklama", - section_time: "Zaman aralýðý", - section_type:"Type", - /* grid columns */ - - column_text : "Task name", - column_start_date : "Start time", - column_duration : "Duration", - column_add : "", - - /* link confirmation */ - link: "Link", - confirm_link_deleting:"will be deleted", - link_start: " (start)", - link_end: " (end)", - - type_task: "Task", - type_project: "Project", - type_milestone: "Milestone", - - - minutes: "Minutes", - hours: "Hours", - days: "Days", - weeks: "Week", - months: "Months", - years: "Years" - } -}; - diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_tr.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_tr.js.map deleted file mode 100755 index 2f6965ea2f..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_tr.js.map +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -{"version":3,"file":"locale_tr.js.map","sources":["locale_tr.js"],"names":["gantt","locale","date","month_full","month_short","day_full","day_short","labels","dhx_cal_today_button","day_tab","week_tab","month_tab","new_event","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","confirm_closing","confirm_deleting","section_description","section_time","section_type","column_text","column_start_date","column_duration","column_add","link","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","minutes","hours","days","weeks","months","years"],"mappings":"AAAAA,MAAMC,QACLC,MACCC,YAAa,OAAQ,QAAS,OAAQ,QAAS,QAAS,UAAW,SAAU,UAAW,QAAS,OAAQ,QAAS,UAClHC,aAAc,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC3FC,UAAW,QAAS,YAAa,OAAQ,WAAY,WAAY,OAAQ,aACzEC,WAAY,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,QAEvDC,QACCC,qBAAsB,QACtBC,QAAS,MACTC,SAAU,QACVC,UAAW,KACXC,UAAW,QACXC,UAAW,SACXC,YAAa,QACbC,aAAc,WACdC,UAAW,UACXC,YAAa,MACbC,gBAAiB,GACjBC,iBAAkB,6BAClBC,oBAAqB,WACrBC,aAAc,gBACdC,aAAa,OAGPC,YAAc,YACdC,kBAAoB,aACpBC,gBAAkB,WAClBC,WAAa,GAGnBC,KAAM,OACNC,sBAAsB,kBACtBC,WAAY,WACZC,SAAU,SAEVC,UAAW,OACXC,aAAc,UACdC,eAAgB,YAGVC,QAAS,UACTC,MAAO,QACPC,KAAM,OACNC,MAAO,OACPC,OAAQ,SACRC,MAAO"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ua.js b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ua.js deleted file mode 100755 index c6fa711f26..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ua.js +++ /dev/null @@ -1,54 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -gantt.locale = { - date: { - month_full: ["Січень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень"], - month_short: ["Січ", "Лют", "Бер", "Кві", "Тра", "Чер", "Лип", "Сер", "Вер", "Жов", "Лис", "Гру"], - day_full: ["Неділя", "Понеділок", "Вівторок", "Середа", "Четвер", "П'ятниця", "Субота"], - day_short: ["Нед", "Пон", "Вів", "Сер", "Чет", "Птн", "Суб"] - }, - labels: { - dhx_cal_today_button: "Сьогодні", - day_tab: "День", - week_tab: "Тиждень", - month_tab: "Місяць", - new_event: "Нова подія", - icon_save: "Зберегти", - icon_cancel: "Відміна", - icon_details: "Деталі", - icon_edit: "Редагувати", - icon_delete: "Вилучити", - confirm_closing: "", //Ваші зміни втратяться. Ви впевнені ? - confirm_deleting: "Подія вилучиться назавжди. Ви впевнені?", - section_description: "Опис", - section_time: "Часовий проміжок", - section_type:"Тип", - /* grid columns */ - - column_text : "Task name", - column_start_date : "Start time", - column_duration : "Duration", - column_add : "", - - /* link confirmation */ - link: "Link", - confirm_link_deleting:"will be deleted", - link_start: " (start)", - link_end: " (end)", - - type_task: "Task", - type_project: "Project", - type_milestone: "Milestone", - - - minutes: "Minutes", - hours: "Hours", - days: "Days", - weeks: "Week", - months: "Months", - years: "Years" - } -}; - diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ua.js.map b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ua.js.map deleted file mode 100755 index bbf1fedeaf..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ua.js.map +++ /dev/null @@ -1,5 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -{"version":3,"file":"locale_ua.js.map","sources":["locale_ua.js"],"names":["gantt","locale","date","month_full","month_short","day_full","day_short","labels","dhx_cal_today_button","day_tab","week_tab","month_tab","new_event","icon_save","icon_cancel","icon_details","icon_edit","icon_delete","confirm_closing","confirm_deleting","section_description","section_time","section_type","column_text","column_start_date","column_duration","column_add","link","confirm_link_deleting","link_start","link_end","type_task","type_project","type_milestone","minutes","hours","days","weeks","months","years"],"mappings":"AAAAA,MAAMC,QACLC,MACCC,YAAa,SAAU,QAAS,WAAY,UAAW,UAAW,UAAW,SAAU,UAAW,WAAY,UAAW,WAAY,WACrIC,aAAc,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC3FC,UAAW,SAAU,YAAa,WAAY,SAAU,SAAU,WAAY,UAC9EC,WAAY,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,QAEvDC,QACCC,qBAAsB,WACtBC,QAAS,OACTC,SAAU,UACVC,UAAW,SACXC,UAAW,aACXC,UAAW,WACXC,YAAa,UACbC,aAAc,SACdC,UAAW,aACXC,YAAa,WACbC,gBAAiB,GACjBC,iBAAkB,0CAClBC,oBAAqB,OACrBC,aAAc,mBACdC,aAAa,MAGPC,YAAc,YACdC,kBAAoB,aACpBC,gBAAkB,WAClBC,WAAa,GAGnBC,KAAM,OACNC,sBAAsB,kBACtBC,WAAY,WACZC,SAAU,SAEVC,UAAW,OACXC,aAAc,UACdC,eAAgB,YAGVC,QAAS,UACTC,MAAO,QACPC,KAAM,OACNC,MAAO,OACPC,OAAQ,SACRC,MAAO"} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_broadway.css b/phpgwapi/js/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_broadway.css deleted file mode 100755 index 78737fc41b..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_broadway.css +++ /dev/null @@ -1,1371 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -/*lighten(@alterColor,7%)*/ -.gantt_grid { - background-color: #d6d6d6; - border-right: 1px solid #d6d6d6 !important; -} -.gantt_grid_scale { - background-color: #4f4f4f; - background-size: 5px 5px; - background-size: 4px 4px; - background-position: 0px 0px, 2px 2px; - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05)), linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05)); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05)), linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05)); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05)), linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05)); - color: #e1e1e1; - font-size: 14px; -} -.gantt_grid_scale .gantt_grid_head_cell { - border-top: none !important; - border-right: 1px solid #4f4f4f !important; - border-left: 1px solid #5b5b5b !important; -} -.gantt_grid_data .gantt_row, -.gantt_grid_data .gantt_row.odd { - background-color: #dbdbdb; - border-top: 1px solid #f6f6f6; - border-bottom: 1px solid #bababa; -} -.gantt_grid_data .gantt_row .gantt_cell, -.gantt_grid_data .gantt_row.odd .gantt_cell { - border-right: none; -} -.gridHoverStyle { - border-top: 1px solid #ededed; - background-color: #ededed; -} -.gridSelection { - background-color: #fff3a1; - border-top-color: #fff087; -} -.timelineSelection { - background-color: #fff3a1; -} -/*Tree icons*/ -.gantt_cell .gantt_tree_icon.gantt_folder_open { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAPCAYAAAACsSQRAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODhBMDIwQzhDRUI3MTFFMjg4RUJDNUMzQkZEREM2RDIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODhBMDIwQzlDRUI3MTFFMjg4RUJDNUMzQkZEREM2RDIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4OEEwMjBDNkNFQjcxMUUyODhFQkM1QzNCRkREQzZEMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4OEEwMjBDN0NFQjcxMUUyODhFQkM1QzNCRkREQzZEMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PntuzoIAAACySURBVHjaYmTAAjo6Ov4z4AAVFRWM6GJM6ALt7e0OUCYjFowsDwfIEjDbDRgZGSf8//8fUzEj4wGgeAGQeQFJ+CIj0IALQEl9BjIB0NADTJQYAHWdAxMDFQBVDGEB+ukgxYYAcQNSzCCnh4NY0o89VkOAAbMfV5gBNR0AytuDXAs01AEUxbhcwoAj1c4HaUTi9wMNwWnb/0ERO0xA/z6k0IyP4NgBGpRApgEfgHgBQIABAAcyQOF3e6FiAAAAAElFTkSuQmCC); -} -.gantt_cell .gantt_tree_icon.gantt_folder_closed { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAPCAYAAAACsSQRAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODhBMDIwQzhDRUI3MTFFMjg4RUJDNUMzQkZEREM2RDIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODhBMDIwQzlDRUI3MTFFMjg4RUJDNUMzQkZEREM2RDIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4OEEwMjBDNkNFQjcxMUUyODhFQkM1QzNCRkREQzZEMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4OEEwMjBDN0NFQjcxMUUyODhFQkM1QzNCRkREQzZEMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PntuzoIAAACySURBVHjaYmTAAjo6Ov4z4AAVFRWM6GJM6ALt7e0OUCYjFowsDwfIEjDbDRgZGSf8//8fUzEj4wGgeAGQeQFJ+CIj0IALQEl9BjIB0NADTJQYAHWdAxMDFQBVDGEB+ukgxYYAcQNSzCCnh4NY0o89VkOAAbMfV5gBNR0AytuDXAs01AEUxbhcwoAj1c4HaUTi9wMNwWnb/0ERO0xA/z6k0IyP4NgBGpRApgEfgHgBQIABAAcyQOF3e6FiAAAAAElFTkSuQmCC); -} -.gantt_cell .gantt_tree_icon.gantt_file { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkQ2NjJFM0ZDRUI3MTFFMkFGNzc4M0YxNUM2NzkwMTIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RkQ2NjJFNDBDRUI3MTFFMkFGNzc4M0YxNUM2NzkwMTIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGRDY2MkUzRENFQjcxMUUyQUY3NzgzRjE1QzY3OTAxMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpGRDY2MkUzRUNFQjcxMUUyQUY3NzgzRjE1QzY3OTAxMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PhnnqLUAAAExSURBVHjanFPtUcMwDI28AB0BJkg6AWEEJqAbxPxLJkh+phuUDdiAbtAwAYxAJ0jf60k51ecWDt3pZFtPn5akSKjv+3uIBlyLSMW3eZ4niD1423Xdt8dLYjzCqCluEJyNcPJq9+CMJzMGaAtet20rZJ7Bb+eIIhHYw0UGLvIRwBoRplx04CrgWModgwAXhTXj8Usjr73xMAwzJbNInBwU/8ASoqV9LbInYqwc2tJBrZdd8XcaVT4GpFOa52topL1Ks9CGVuGXL/vU40fqZPlGA7E5GX1NvQ7U4sSw1AWdMNIm07CfxIn1K6rcB2sI5yCXhXPyjPO7fuOLNfNikAAi+OnWILEUYFfLICWjXGptO12cyRk20G+sduiq/y7TOXJ2G906R13n0n0nmz2m63wSYAB0aMIyVTQbywAAAABJRU5ErkJggg==); -} -/* - Gantt part -*/ -.chartHeaderBg { - background-color: #dbdbdb; -} -.gantt_task .gantt_task_scale .gantt_scale_cell { - border-left: 1px solid #f6f6f6; - border-right: 1px solid #bababa; - color: #494949; - font-size: 14px; -} -/* - Tasks -*/ -.taskProgressStyle { - border-right: 1px solid #1cb3fb; - box-shadow: -1px 0px 0 1px #04a1eb inset; -} -.gantt_task_line { - background-size: 4px 4px; - background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent); - background-image: linear-gradient(135deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(0deg, transparent, transparent); -} -.gantt_task_line .gantt_task_content { - text-align: left; - font-weight: bold; - padding: 0 8px; - box-sizing: border-box; -} -.gantt_task_link .gantt_link_arrow_right { - border-width: 5px 5px 5px 5px; - margin-top: -2px; -} -.gantt_task_link .gantt_link_arrow_left { - border-width: 5px 5px 5px 5px; - margin-left: -7px; - margin-top: -2px; -} -.gantt_task_link .gantt_link_arrow_top { - border-width: 5px 5px 5px 5px; -} -.gantt_task_link .gantt_link_arrow_down { - border-width: 5px 5px 5px 5px; -} -.gantt_task_line .gantt_task_progress_drag { - bottom: -4px; - height: 16px; - margin-left: -8px; - width: 16px; -} -/* - project highlight -*/ -.gantt_row.gantt_project, -.gantt_row.odd.gantt_project { - background-color: #edffef; -} -.gantt_task_row.gantt_project, -.gantt_task_row.odd.gantt_project { - background-color: #f5fff6; -} -.gantt_task_line.gantt_project { - background-color: #65c16f; - border: 1px solid #3c9445; -} -.gantt_task_line.gantt_project .gantt_task_progress { - background-color: #46ad51; - border-right: 1px solid #5abc65; - box-shadow: -1px 0px 0 1px #45a94f inset; -} -/* - milestone -*/ -/* - lightbox -*/ -.dhx_cal_light { - background-color: #ffffff; - border: none !important; -} -.dhx_cal_light .dhx_cal_lsection { - color: #959595; -} -.dhx_cal_light .dhx_cal_larea { - border-bottom: none; -} -.dhx_cal_light .dhx_cal_ltitle { - background-color: #4f4f4f; - background-size: 5px 5px; - background-size: 4px 4px; - background-position: 0px 0px, 2px 2px; - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05)), linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05)); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05)), linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05)); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05)), linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05)); - font-size: 14px; - color: #e1e1e1; - position: relative; - padding-top: 12px; - padding-bottom: 12px; - font-weight: normal; -} -.dhx_cal_light .dhx_cal_ltitle .dhx_title { - font-size: 13px; -} -.dhx_cal_light .dhx_btn_set { - margin: 5px 10px; -} -.buttonBg { - background: #fff; -} -.dhx_btn_set.dhx_save_btn_set { - background: #46ad51; - text-shadow: 0 -1px 0 #307738; - color: #fff; -} -.dhx_btn_set.dhx_delete_btn_set { - margin-left: 0; - text-shadow: 0 -1px 0 #6f6f6f; - background: #ec8e00; - text-shadow: 0 -1px 0 #aa6600; - color: #fff; -} -.dhx_delete_btn { - margin-top: 2px; - width: 20px; -} -.dhx_cal_light_wide { - padding-left: 0 !important; - padding-right: 0 !important; -} -.dhx_cal_light_wide .dhx_cal_larea { - border-left: none !important; - border-right: none !important; -} -.dhx_cal_ltitle .dhx_cancel_btn { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAMCAYAAABbayygAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QYLEgAjh/DRnAAAAMdJREFUGNN1kcsNwjAQRF9iCkgJdJCUkBJQpDkDFUALdBAqAM6WQglQAlxzSglQgAUH1tIKgS9ezzztz0Vd18QYW0lXfpzsFeM49sAGOEpaf0FHYAnsS6evYoy9g3qDAB6Flb4BtYk568Huu6RmBhBCaFNKV4MPrso9hNAClABd1z2ABfB00BNYmEf5NeTrT/wBh2GogDNQOa8CzuZ9QOuvccPkgZqU0gXA7xFgL2nr1pP1ne/xlCEAi0/5nfc4lzT9+cK5pOkNX8hRT8hMyVwAAAAASUVORK5CYII=); - width: 30px; - top: 0px; - right: 0; - background-position: 6px 12px; - background-repeat: no-repeat; - position: absolute; - height: 100%; -} -/* - Message -*/ -.dhtmlx_popup_button.dhtmlx_ok_button { - background: #46ad51; - text-shadow: 0 -1px 0 #307738; - color: #fff; - font-weight: bold; -} -.dhtmlx_popup_button.dhtmlx_cancel_button { - font-weight: bold; -} -/* - Quick info -*/ -.dhx_qi_big_icon.icon_edit { - color: #454544; -} -.dhx_qi_big_icon.icon_delete { - text-shadow: 0 -1px 0 #6f6f6f; - background: #ec8e00; - text-shadow: 0 -1px 0 #aa6600; - color: #fff; - font-weight: bold; -} -/* - links dnd -*/ -.gantt_container { - font-family: "Arial"; - font-size: 13px; - border: 1px solid #bababa; - position: relative; - white-space: nowrap; -} -.gantt_grid { - border-right: 1px solid #bababa; -} -.gantt_task_scroll { - overflow-x: scroll; -} -.gantt_task { - position: relative; -} -.gantt_task, -.gantt_grid { - overflow-x: hidden; - overflow-y: hidden; - display: inline-block; - vertical-align: top; -} -.gantt_grid_scale, -.gantt_task_scale { - color: #494949; - font-size: 12px; - border-bottom: 1px solid #bababa; -} -.gantt_grid_scale { - background-color: #4f4f4f; - background-size: 5px 5px; - background-size: 4px 4px; - background-position: 0px 0px, 2px 2px; - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05)), linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05)); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05)), linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05)); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05)), linear-gradient(45deg, rgba(255, 255, 255, 0.05) 25%, transparent 25%, transparent 75%, rgba(255, 255, 255, 0.05) 75%, rgba(255, 255, 255, 0.05)); - color: #e1e1e1; - font-size: 14px; -} -.gantt_task_scale { - background-color: #dbdbdb; -} -.gantt_scale_line { - box-sizing: border-box; - -moz-box-sizing: border-box; - border-top: 1px solid #bababa; -} -.gantt_scale_line:first-child { - border-top: none; -} -.gantt_grid_head_cell { - display: inline-block; - vertical-align: top; - border-right: 1px solid #bababa; - text-align: center; - position: relative; - cursor: default; - height: 100%; - box-sizing: border-box; - -moz-box-sizing: border-box; - line-height: 33px; - -moz-user-select: -moz-none; - -webkit-user-select: none; - -user-select: none; -} -.gantt_scale_line { - clear: both; -} -.gantt_grid_data { - width: 100%; - overflow: hidden; -} -.gantt_row { - position: relative; - -webkit-user-select: none; - -moz-user-select: none; - -moz-user-select: -moz-none; -} -.gantt_add, -.gantt_grid_head_add { - width: 100%; - height: 100%; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QYHCygkHejN0gAAAD1JREFUOMtjtN15mYESwIJLwvHo6v/I/P3WoYzY1DExUAiGgQGMtjsvYwQYsWC/dSjjcAmD0YREo0AkFgAASgkTQxnJ6ggAAAAASUVORK5CYII=); - background-position: center center; - background-repeat: no-repeat; - cursor: pointer; - position: relative; - -moz-opacity: 0.3; - opacity: 0.3; -} -.gantt_grid_head_cell.gantt_grid_head_add { - -moz-opacity: 0.6; - opacity: 0.6; - top: 0; -} -.gantt_grid_head_cell.gantt_grid_head_add:hover { - -moz-opacity: 1; - opacity: 1; -} -.gantt_grid_data .gantt_row:hover, -.gantt_grid_data .gantt_row.odd:hover { - border-top: 1px solid #ededed; - background-color: #ededed; -} -.gantt_grid_data .gantt_row:hover .gantt_add, -.gantt_grid_data .gantt_row.odd:hover .gantt_add { - -moz-opacity: 1; - opacity: 1; -} -.gantt_task_row, -.gantt_row { - border-bottom: 1px solid #ebebeb; -} -.gantt_row, -.gantt_task_row { - background-color: #ffffff; -} -.gantt_row.odd, -.gantt_task_row.odd { - background-color: #ffffff; -} -.gantt_row, -.gantt_cell, -.gantt_task_row, -.gantt_task_cell, -.gantt_grid_head_cell, -.gantt_scale_cell { - box-sizing: border-box; - -moz-box-sizing: border-box; -} -.gantt_grid_head_cell, -.gantt_scale_cell { - line-height: inherit; -} -.gantt_cell { - display: inline-block; - vertical-align: top; - border-right: 1px solid #ebebeb; - padding-left: 6px; - padding-right: 6px; - height: 100%; - overflow: hidden; - white-space: nowrap; - font-size: 13px; -} -.gantt_grid_scale .gantt_last_cell, -.gantt_grid_data .gantt_last_cell, -.gantt_task_scale .gantt_last_cell, -.gantt_task_bg .gantt_last_cell { - border-right-width: 0px; -} -.gantt_task_bg { - overflow: hidden; -} -.gantt_scale_cell { - display: inline-block; - white-space: nowrap; - overflow: hidden; - border-right: 1px solid #bababa; - text-align: center; - height: 100%; -} -.gantt_task_cell { - display: inline-block; - height: 100%; - border-right: 1px solid #ebebeb; -} -.gantt_ver_scroll { - width: 0px; - background-color: transparent; - height: 1px; - overflow-x: hidden; - overflow-y: scroll; - display: none; - position: absolute; - right: 0px; -} -.gantt_ver_scroll > div { - width: 1px; - height: 1px; -} -.gantt_hor_scroll { - height: 0px; - background-color: transparent; - width: 100%; - clear: both; - overflow-x: scroll; - overflow-y: hidden; - display: none; -} -.gantt_hor_scroll > div { - width: 5000px; - height: 1px; -} -.gantt_tree_indent { - width: 15px; - height: 100%; - display: inline-block; -} -.gantt_tree_content, -.gantt_tree_icon { - vertical-align: top; -} -.gantt_tree_icon { - width: 28px; - height: 100%; - display: inline-block; - background-repeat: no-repeat; - background-position: center center; -} -.gantt_tree_content { - height: 100%; - display: inline-block; -} -.gantt_tree_icon.gantt_open { - background-image: url(data:image/gif;base64,R0lGODlhEgASAOMHAMrKyt3d3ejp6d7f3+/v75aWlvf39////wAAAP///////////////////////////yH5BAEKAA8ALAAAAAASABIAAAQt8MlJq704672L/x9WZKNVXieVIipKsVMaS0hdSzL+tuY+9yJXEAUCcY7IJCUCADs=); - width: 18px; - cursor: pointer; -} -.gantt_tree_icon.gantt_close { - background-image: url(data:image/gif;base64,R0lGODlhEgASAOMIAMrKyt3d3ejp6d7f3+/v75aWlvf39wAAAP///////////////////////////////yH5BAEKAAYALAAAAAASABIAAAQp0MhJq704672L/x9WZKNVXieVVqvUTm95zLOLkreY7yqOgiCOcEikRAAAOw==); - width: 18px; - cursor: pointer; -} -.gantt_tree_icon.gantt_blank { - width: 18px; -} -.gantt_tree_icon.gantt_folder_open { - background-image: url(data:image/gif;base64,R0lGODlhEgASAJECAJeXl7Gvrf///wAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTdDRDM3QzVDMDZEMTFFMUJGMzhFMDhCN0RGRjBGQ0YiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTdDRDM3QzZDMDZEMTFFMUJGMzhFMDhCN0RGRjBGQ0YiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1N0NEMzdDM0MwNkQxMUUxQkYzOEUwOEI3REZGMEZDRiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMzdDNEMwNkQxMUUxQkYzOEUwOEI3REZGMEZDRiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAEAAAIALAAAAAASABIAAAIzlI+pywcPm3mhWgkCsjBOvVkimElG9ZlCBlXd+2XjjLKg5GqoeZXqvsOQXK/ijUZTKVUFADs=); -} -.gantt_tree_icon.gantt_folder_closed { - background-image: url(data:image/gif;base64,R0lGODlhEgASAJECAJeXl7Gvrf///wAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTAyMTU1RTNDMDZEMTFFMUJGNzZCRThBRkFCRjg4MTIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTAyMTU1RTRDMDZEMTFFMUJGNzZCRThBRkFCRjg4MTIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MDIxNTVFMUMwNkQxMUUxQkY3NkJFOEFGQUJGODgxMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1MDIxNTVFMkMwNkQxMUUxQkY3NkJFOEFGQUJGODgxMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAEAAAIALAAAAAASABIAAAIwlI+pywcPm3mhWgkCsjBOvVkimElG9ZlCuYIY6TYs+6bmHDO4igfdD3GNhheV0VQAADs=); -} -.gantt_tree_icon.gantt_file { - background-image: url(data:image/gif;base64,R0lGODlhEgASAJECAJeXl7Gvrf///wAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NzkxQzI4RjZDMDZEMTFFMTgwRjhBQURDQzI3NDU3QUEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NzkxQzI4RjdDMDZEMTFFMTgwRjhBQURDQzI3NDU3QUEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3OTFDMjhGNEMwNkQxMUUxODBGOEFBRENDMjc0NTdBQSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3OTFDMjhGNUMwNkQxMUUxODBGOEFBRENDMjc0NTdBQSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAEAAAIALAAAAAASABIAAAIylI+pwN16QJiUQiFThRlJm3RRFYSlR5qXMKmXaMDuuMoyOi8n/e6xn8NMHETgh5RaKQsAOw==); -} -.gantt_grid_head_cell .gantt_sort { - position: absolute; - right: 5px; - top: 8px; - width: 7px; - height: 13px; - background-repeat: no-repeat; - background-position: center center; -} -.gantt_grid_head_cell .gantt_sort.gantt_asc { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR42mNgQAL1/VP/M2ADIIntF2/9x1AAlrh0C47hCmA60DFYwX88gIFGwNDY5D8uDFbg7hvwHx2jmIBTAlkB0e4BAEjlaNtBWJPnAAAAAElFTkSuQmCC); -} -.gantt_grid_head_cell .gantt_sort.gantt_desc { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR4nGNgQAKGxib/GbABkIS7b8B/DAUwCRiGK0CXwFBAb1DfP/U/LszwHwi2X7qFgUEArBtdAVwCBmAKMCSQFSDzAWXXaOHsXeqkAAAAAElFTkSuQmCC); -} -.gantt_inserted, -.gantt_updated { - font-weight: bold; -} -.gantt_deleted { - text-decoration: line-through; -} -.gantt_invalid { - background-color: FFE0E0; -} -.gantt_error { - color: red; -} -.dhtmlx_message_area { - position: fixed; - right: 5px; - width: 250px; - z-index: 1000; -} -.dhtmlx-info { - min-width: 120px; - padding: 4px 4px 4px 20px; - font-family: "Arial"; - z-index: 10000; - margin: 5px; - margin-bottom: 10px; - -webkit-transition: all .5s ease; - -moz-transition: all .5s ease; - -o-transition: all .5s ease; - transition: all .5s ease; -} -.dhtmlx-info.hidden { - height: 0px; - padding: 0px; - border-width: 0px; - margin: 0px; - overflow: hidden; -} -.dhtmlx_modal_box { - overflow: hidden; - display: inline-block; - min-width: 250px; - width: 250px; - text-align: center; - position: fixed; - z-index: 20000; - box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07); - font-family: "Arial"; - border-radius: 6px; - border: 1px solid #bababa; - background: #ffffff; -} -.dhtmlx_popup_title { - border-top-left-radius: 6px; - border-top-right-radius: 6px; - border-width: 0px; -} -.dhtmlx_button, -.dhtmlx_popup_button { - border: 1px solid #bababa; - height: 30px; - line-height: 30px; - display: inline-block; - margin: 0 5px; - border-radius: 4px; - background: #fff; -} -.dhtmlx-info, -.dhtmlx_popup_button, -.dhtmlx_button { - user-select: none; - -webkit-user-select: none; - -moz-user-select: -moz-none; - cursor: pointer; -} -.dhtmlx_popup_text { - overflow: hidden; -} -.dhtmlx_popup_controls { - border-radius: 6px; - padding: 10px; -} -.dhtmlx_popup_button { - min-width: 100px; -} -div.dhx_modal_cover { - background-color: #000; - cursor: default; - filter: progid:DXImageTransform.Microsoft.Alpha(opacity=20); - opacity: 0.2; - position: fixed; - z-index: 19999; - left: 0px; - top: 0px; - width: 100%; - height: 100%; - border: none; - zoom: 1; -} -.dhtmlx-info img, -.dhtmlx_modal_box img { - float: left; - margin-right: 20px; -} -.dhtmlx-alert-error, -.dhtmlx-confirm-error { - border: 1px solid #ff0000; -} -/*Skin section*/ -.dhtmlx_button input, -.dhtmlx_popup_button div { - border-radius: 4px; - font-size: 14px; - -moz-box-sizing: content-box; - box-sizing: content-box; - padding: 0px; - margin: 0px; - vertical-align: top; -} -.dhtmlx_popup_title { - color: #fff; - text-shadow: 1px 1px #000; - height: 40px; - line-height: 40px; - font-size: 20px; -} -.dhtmlx_popup_text { - margin: 15px 15px 5px 15px; - font-size: 14px; - color: #000; - min-height: 30px; - border-radius: 6px; -} -.dhtmlx-info, -.dhtmlx-error { - font-size: 14px; - color: #000; - box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07); - padding: 0px; - background-color: #FFF; - border-radius: 3px; - border: 1px solid #ffffff; -} -.dhtmlx-info div { - padding: 5px 10px 5px 10px; - background-color: #fff; - border-radius: 3px; - border: 1px solid #bababa; -} -.dhtmlx-error { - background-color: #d81b1b; - border: 1px solid #ff3c3c; - box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07); -} -.dhtmlx-error div { - background-color: #d81b1b; - border: 1px solid #940000; - color: #FFF; -} -.gantt_grid div, -.gantt_data_area div { - -ms-touch-action: none; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} -.gantt_data_area { - position: relative; - overflow-x: hidden; - overflow-y: hidden; - -moz-user-select: -moz-none; - -webkit-user-select: none; - -user-select: none; -} -.gantt_links_area { - position: absolute; - left: 0px; - top: 0px; -} -.gantt_task_content, -.gantt_task_progress, -.gantt_side_content { - line-height: inherit; - overflow: hidden; - height: 100%; -} -.gantt_task_content { - font-size: 13px; - color: #ffffff; - width: 100%; - position: absolute; - white-space: nowrap; - text-align: center; -} -.gantt_task_progress { - text-align: center; - z-index: 0; - background: #04a4f0; - border-right: 1px solid #1cb3fb; - box-shadow: -1px 0px 0 1px #04a1eb inset; -} -.gantt_task_line { - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - border-radius: 2px; - position: absolute; - -moz-box-sizing: border-box; - box-sizing: border-box; - background-color: #17b2fb; - border: 1px solid #049ae1; - -webkit-user-select: none; - -moz-user-select: none; - -moz-user-select: -moz-none; -} -.gantt_task_line.gantt_drag_move div { - cursor: move; -} -.gantt_side_content { - position: absolute; - white-space: nowrap; - color: #6e6e6e; - bottom: 7px; - font-size: 11px; - font-size: 12px; -} -.gantt_side_content.gantt_left { - right: 100%; - padding-right: 15px; -} -.gantt_side_content.gantt_right { - left: 100%; - padding-left: 15px; -} -.gantt_side_content.gantt_link_crossing { - bottom: 8.75px; -} -.gantt_task_link .gantt_line_wrapper, -.gantt_link_arrow { - position: absolute; - cursor: pointer; -} -.gantt_line_wrapper div { - background-color: #ffa011; -} -.gantt_task_link:hover .gantt_line_wrapper div { - box-shadow: 0 0 5px 0px #ffa011; -} -.gantt_task_link div.gantt_link_arrow { - background-color: transparent; - border-style: solid; - width: 0px; - height: 0px; -} -.gantt_link_control { - position: absolute; - width: 13px; - top: 0px; -} -.gantt_link_control div { - display: none; - cursor: pointer; - box-sizing: border-box; - position: relative; - top: 50%; - margin-top: -7.5px; - vertical-align: middle; - border: 1px solid #929292; - -webkit-border-radius: 6.5px; - -moz-border-radius: 6.5px; - border-radius: 6.5px; - height: 13px; - width: 13px; - background-color: #f0f0f0; -} -.gantt_link_control div:hover { - background-color: #ffffff; -} -.gantt_link_control.task_left { - left: -13px; -} -.gantt_link_control.task_right { - right: -13px; -} -.gantt_task_line.gantt_selected .gantt_link_control div, -.gantt_task_line:hover .gantt_link_control div { - display: block; -} -.gantt_link_target .gantt_link_control div { - display: block; -} -.gantt_link_source, -.gantt_link_target { - box-shadow: 0px 0px 3px #04a4f0; -} -.gantt_link_target.link_start_allow, -.gantt_link_target.link_finish_allow { - box-shadow: 0px 0px 3px #ffbf5e; -} -.gantt_link_target.link_start_deny, -.gantt_link_target.link_finish_deny { - box-shadow: 0px 0px 3px #e87e7b; -} -.link_start_allow .gantt_link_control.task_left div, -.link_finish_allow .gantt_link_control.task_right div { - background-color: #ffbf5e; - border-color: #ffa011; -} -.link_start_deny .gantt_link_control.task_left div, -.link_finish_deny .gantt_link_control.task_right div { - background-color: #e87e7b; - border-color: #dd3e3a; -} -.gantt_link_arrow_right { - border-width: 2.5px 0 2.5px 5px; - border-color: transparent transparent transparent #ffa011; - margin-top: -1px; -} -.gantt_link_arrow_left { - border-width: 2.5px 5px 2.5px 0; - margin-top: -1px; - border-color: transparent #ffa011 transparent transparent; -} -.gantt_link_arrow_top { - border-width: 0 2.5px 5px 2.5px; - border-color: transparent transparent #ffa011 transparent; -} -.gantt_link_arrow_down { - border-width: 2.5px 5px 0 2.5px; - border-color: #ffa011 transparent transparent transparent; -} -.gantt_task_drag, -.gantt_task_progress_drag { - cursor: w-resize; - height: 100%; - display: none; - position: absolute; -} -.gantt_task_line.gantt_selected .gantt_task_progress_drag, -.gantt_task_line:hover .gantt_task_progress_drag, -.gantt_task_line.gantt_selected .gantt_task_drag, -.gantt_task_line:hover .gantt_task_drag { - display: block; -} -.gantt_task_drag { - width: 6px; - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAACCAYAAAB7Xa1eAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QYDDjkw3UJvAwAAABRJREFUCNdj/P//PwM2wASl/6PTAKrrBf4+lD8LAAAAAElFTkSuQmCC); - z-index: 1; - top: 0px; -} -.gantt_task_drag.task_left { - left: 0px; -} -.gantt_task_drag.task_right { - right: 0px; -} -.gantt_task_progress_drag { - height: 8px; - width: 8px; - bottom: -4px; - margin-left: -4px; - background-position: bottom; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MkY3Rjk0RUVDMkYzMTFFMkI1OThEQTA3ODU0OTkzMEEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MkY3Rjk0RUZDMkYzMTFFMkI1OThEQTA3ODU0OTkzMEEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyRjdGOTRFQ0MyRjMxMUUyQjU5OERBMDc4NTQ5OTMwQSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyRjdGOTRFREMyRjMxMUUyQjU5OERBMDc4NTQ5OTMwQSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PobPBzIAAADkSURBVHjaYpk2bRoDDsAExL1QdjEQ/8OmiAWHZk4gXqymqhQM4ty6fU8OSMUA8XdiDBAB4k0a6iqWRga6EKcwMQXduHlnL5DpB8Rv0J2JDFSA+JiOtgZcMwiA2CAxkBxUDVYDLEAKgIpV9XQ0MZwFEgPJAZnHoWpRDAgC4n2W5saiQKfjClQGkBxQDciL+6B6wAbkA/EqJwdrTkUFOQZCAKQGpBbIXA3SCzJggo+XK7OEuBgDsQCkFqgHrBfsBT5eHgZSAUwP2IBfv36TbABMDygdtK1Zv6UESLORaAbIhG6AAAMAKN8wE24DXWcAAAAASUVORK5CYII=); - background-repeat: no-repeat; - z-index: 2; -} -.gantt_link_tooltip { - box-shadow: 3px 3px 3px #888888; - background-color: #ffffff; - border-left: 1px dotted #cecece; - border-top: 1px dotted #cecece; - font-family: Tahoma; - font-size: 8pt; - color: #444444; - padding: 6px; - line-height: 20px; -} -.gantt_link_direction { - height: 0px; - border: 0px none #ffa011; - border-bottom-style: dashed; - border-bottom-width: 2px; - transform-origin: 0% 0%; - -ms-transform-origin: 0% 0%; - -webkit-transform-origin: 0% 0%; - z-index: 2; - margin-left: 1px; - position: absolute; -} -.gantt_grid_data .gantt_row.gantt_selected, -.gantt_grid_data .gantt_row.odd.gantt_selected { - background-color: #fff3a1; - border-top-color: #fff087; -} -.gantt_task_row.gantt_selected { - background-color: #fff3a1; -} -.gantt_task_row.gantt_selected .gantt_task_cell { - border-right-color: #ffec6e; -} -.gantt_task_line.gantt_selected { - box-shadow: 0 0 5px #04a4f0; -} -.gantt_task_line.gantt_project.gantt_selected { - box-shadow: 0 0 5px #46ad51; -} -.gantt_task_line.gantt_milestone { - visibility: hidden; - background-color: #db7dc5; - border: 0px solid #cd49ae; - box-sizing: content-box; - -moz-box-sizing: content-box; -} -.gantt_task_line.gantt_milestone div { - visibility: visible; -} -.gantt_task_line.gantt_milestone .gantt_task_content { - background: inherit; - border: inherit; - border-width: 1px; - border-radius: inherit; - box-sizing: border-box; - -moz-box-sizing: border-box; - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); -} -.dhx_unselectable, -.dhx_unselectable div { - -webkit-user-select: none; - -moz-user-select: none; - -moz-user-select: -moz-none; -} -.dhx_cal_light { - -webkit-tap-highlight-color: transparent; - border-radius: 6px; - font-family: "Arial"; - font-size: 13px; - border: 1px solid #bababa; - color: #494949; - font-size: 12px; - position: absolute; - z-index: 10001; - width: 550px; - height: 250px; - box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07); -} -.dhx_cal_light_wide { - width: 650px; -} -.dhx_cal_light select { - font-family: "Arial"; - border: 1px solid #bababa; - font-size: 13px; - padding: 2px; - margin: 0px; -} -.dhx_cal_ltitle { - padding: 7px 10px; - overflow: hidden; - white-space: nowrap; - -webkit-border-top-left-radius: 6px; - -webkit-border-bottom-left-radius: 0; - -webkit-border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 0; - -moz-border-radius-topleft: 6px; - -moz-border-radius-bottomleft: 0; - -moz-border-radius-topright: 6px; - -moz-border-radius-bottomright: 0; - border-top-left-radius: 6px; - border-bottom-left-radius: 0; - border-top-right-radius: 6px; - border-bottom-right-radius: 0; -} -.dhx_cal_ltitle span { - white-space: nowrap; -} -.dhx_cal_lsection { - color: #727272; - font-weight: bold; - padding: 12px 0px 5px 10px; -} -.dhx_cal_lsection .dhx_fullday { - float: right; - margin-right: 5px; - font-size: 12px; - font-weight: normal; - line-height: 20px; - vertical-align: top; - cursor: pointer; -} -.dhx_cal_lsection { - font-size: 13px; -} -.dhx_cal_ltext { - padding: 2px 10px; - overflow: hidden; -} -.dhx_cal_ltext textarea { - overflow: auto; - font-family: "Arial"; - font-size: 13px; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - border: 1px solid #bababa; - height: 100%; - width: 100%; - outline: none !important; - resize: none; -} -.dhx_time { - font-weight: bold; -} -.dhx_cal_light .dhx_title { - padding-left: 10px; -} -.dhx_cal_larea { - border: 1px solid #bababa; - border-left: none; - border-right: none; - background-color: #fff; - overflow: hidden; - height: 1px; -} -.dhx_btn_set { - margin: 10px 7px 5px 10px; - padding: 5px 15px 5px 10px; - float: left; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - border-width: 0; - border-color: #bababa; - border-style: solid; - height: 32px; - font-weight: bold; - background: #fff; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - cursor: pointer; -} -.dhx_btn_set div { - float: left; - font-size: 13px; - height: 22px; - line-height: 22px; - background-repeat: no-repeat; - vertical-align: middle; -} -.dhx_save_btn { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAPCAYAAAACsSQRAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTBBQUI0RDhDRUJEMTFFMjhFM0ZENTlERUM1OEQzRTYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTBBQUI0RDlDRUJEMTFFMjhFM0ZENTlERUM1OEQzRTYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBMEFBQjRENkNFQkQxMUUyOEUzRkQ1OURFQzU4RDNFNiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBMEFBQjREN0NFQkQxMUUyOEUzRkQ1OURFQzU4RDNFNiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PjdPZV0AAACtSURBVHjanJPbDYUgEESvtwJKoQRLoRNL0RK0ArUCS9AOpAMclDVkw0s2mQ9XcpwJY2OM+VWMgDQ9/CsAEtoh9W6skw+S0Akd5hl1J6kADJBwADs9j9MmIszQ5GJo793qf2nwLUYc0E7xONbaBmloZKAsgCCLW0p2qCsBEEQ6F33gcBbg304I1JYA+BWHQFlAqCcclAXEykaguQSQaiyBVEmbm8RfLFgzo3MJMACZSGxiH8QaMAAAAABJRU5ErkJggg==); - margin-top: 2px; - width: 21px; -} -.dhx_cancel_btn { - margin-top: 2px; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDkzMDA3MzlDMzA0MTFFMjg2QTVFMzFEQzgwRkJERDYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDkzMDA3M0FDMzA0MTFFMjg2QTVFMzFEQzgwRkJERDYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowOTMwMDczN0MzMDQxMUUyODZBNUUzMURDODBGQkRENiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowOTMwMDczOEMzMDQxMUUyODZBNUUzMURDODBGQkRENiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmYuYOUAAAEdSURBVHjaYvz//z8DJYAFXWDlypU8QKoIiD2A2AwqfAqIdwBxX3h4+Bdk9YzILgBqtgdS84FYEYeF94E4EWjIQZgAE5LmQCB1AKoZZKMPEAtAMYh9GSp3AKjWD8UFQAEhIPshEIOc3wHENUBb/qJ57SyQMoJyPwKxElDNO1gYFEE17wMKVmIJlzNQzeegrjaA6qmBecEbSvfh0GwMxGeBhoPoemQ9MAO0kEIbl2YTqPAFKK2IbMB3AjabYIkRZmQD7kNpMyI0G0PpO8gGbIUFJj7NQDk2INWIrIcJKfBAKcwJqvkcDs0TgFgXGo19KCkRmpDWQdWDEk0NUoCBoq0FqhkE/IEWbKJKUmZEz43QzFSKIzN1481M5ACAAAMAlfl/lCwRpagAAAAASUVORK5CYII=); - width: 20px; -} -.dhx_delete_btn { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAYAAAAmlE46AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzQzRjMxM0NDRUJEMTFFMjlCNDZDQzhFQUM0ODRCMEIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzQzRjMxM0RDRUJEMTFFMjlCNDZDQzhFQUM0ODRCMEIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDNDNGMzEzQUNFQkQxMUUyOUI0NkNDOEVBQzQ4NEIwQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDNDNGMzEzQkNFQkQxMUUyOUI0NkNDOEVBQzQ4NEIwQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PoU+5FoAAACMSURBVHja7JPdDYAgDIQLE+gmjuAIbOIKjMRIbAAb1BZLUozgz7OXfIbWKxeCAiKCwmNfXnsNP5S4mIkMrSYiEaY2LOFloO6QVF1JamPGc2IvpaeSbqXY4LkOLwU6OTyvgzBasxwnBnivYOGj/sEXg27gbd/JpWZiOf0pV7Anlq9UGqs07hTFC7sAAwCbSNs8SyqFMAAAAABJRU5ErkJggg==); - margin-top: 2px; - width: 20px; -} -.dhx_cal_cover { - width: 100%; - height: 100%; - position: absolute; - z-index: 10000; - top: 0px; - left: 0px; - background-color: black; - opacity: 0.1; - filter: progid:DXImageTransform.Microsoft.Alpha(opacity=10); -} -.dhx_custom_button { - padding: 0px 3px 0px 3px; - font-family: "Arial"; - font-size: 13px; - font-weight: normal; - margin-right: 5px; - margin-top: 0px; - cursor: pointer; -} -.dhx_custom_button div { - cursor: pointer; - float: left; - height: 21px; - line-height: 21px; - vertical-align: middle; -} -.dhx_cal_light_wide { - width: 580px; - padding: 2px 4px; -} -.dhx_cal_light_wide .dhx_cal_larea { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - border: 1px solid #bababa; -} -.dhx_cal_light_wide .dhx_cal_lsection { - border: 0px; - float: left; - text-align: right; - width: 80px; - height: 20px; - padding: 5px 10px 0px 0px; -} -.dhx_cal_light_wide .dhx_wrap_section { - position: relative; - padding: 10px 0; - overflow: hidden; - border-bottom: 1px solid #ebebeb; -} -.dhx_cal_light_wide .dhx_section_time { - overflow: hidden; - padding-top: 2px !important; - padding-right: 0px; - height: 20px !important; -} -.dhx_cal_light_wide .dhx_cal_ltext { - padding-right: 0px; -} -.dhx_cal_light_wide .dhx_cal_larea { - padding: 0 10px; - width: 100%; -} -.dhx_cal_light_wide .dhx_section_time { - background: transparent; -} -.dhx_cal_light_wide .dhx_cal_checkbox label { - padding-left: 0px; -} -.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday { - float: none; - margin-right: 0px; - font-weight: bold; - cursor: pointer; -} -.dhx_cal_light_wide .dhx_custom_button { - position: absolute; - top: 0; - right: 0; - margin-top: 2px; -} -.dhx_cal_light_wide .dhx_repeat_right { - margin-right: 55px; -} -.dhx_cal_light_wide.dhx_cal_light_full { - width: 738px; -} -.dhx_cal_wide_checkbox input { - margin-top: 8px; - margin-left: 14px; -} -.dhx_cal_light input { - font-size: 13px; -} -.dhx_custom_button { - float: right; - height: 21px; - width: 90px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - -ms-border-radius: 4px; - -o-border-radius: 4px; - border-radius: 4px; -} -.dhx_section_time { - background-color: white; - white-space: nowrap; - padding: 2px 10px 5px; - padding-top: 2px !important; -} -.dhx_section_time .dhx_time_selects { - float: left; - height: 25px; -} -.dhx_section_time .dhx_time_selects select { - height: 23px; - padding: 2px; - border: 1px solid #bababa; -} -.dhx_gantt_duration { - width: 100px; - height: 23px; - float: left; - white-space: nowrap; - margin-left: 20px; - line-height: 23px; -} -.dhx_gantt_duration .dhx_gantt_duration_value, -.dhx_gantt_duration .dhx_gantt_duration_dec, -.dhx_gantt_duration .dhx_gantt_duration_inc { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - text-align: center; - vertical-align: top; - height: 100%; - border: 1px solid #bababa; -} -.dhx_gantt_duration .dhx_gantt_duration_value { - width: 40px; - padding: 3px 4px; - border-left-width: 0; - border-right-width: 0; -} -.dhx_gantt_duration .dhx_gantt_duration_dec, -.dhx_gantt_duration .dhx_gantt_duration_inc { - width: 20px; - padding: 1px; - padding-bottom: 3px; - background: #fff; -} -.dhx_gantt_duration .dhx_gantt_duration_dec { - -moz-border-top-left-radius: 4px; - -moz-border-bottom-left-radius: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; -} -.dhx_gantt_duration .dhx_gantt_duration_inc { - margin-right: 4px; - -moz-border-top-right-radius: 4px; - -moz-border-bottom-right-radius: 4px; - -webkit-border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; -} -/* Quick info */ -.dhx_cal_quick_info { - border: 1px solid #bababa; - border-radius: 6px; - position: absolute; - z-index: 300; - box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07); - background-color: #ffffff; - width: 300px; - transition: left 0.5s ease, right 0.5s; - -moz-transition: left 0.5s ease, right 0.5s; - -webkit-transition: left 0.5s ease, right 0.5s; - -o-transition: left 0.5s ease, right 0.5s; -} -.dhx_no_animate { - transition: none; - -moz-transition: none; - -webkit-transition: none; - -o-transition: none; -} -.dhx_cal_quick_info.dhx_qi_left .dhx_qi_big_icon { - float: right; -} -.dhx_cal_qi_title { - -webkit-border-top-left-radius: 6px; - -webkit-border-bottom-left-radius: 0; - -webkit-border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 0; - -moz-border-radius-topleft: 6px; - -moz-border-radius-bottomleft: 0; - -moz-border-radius-topright: 6px; - -moz-border-radius-bottomright: 0; - border-top-left-radius: 6px; - border-bottom-left-radius: 0; - border-top-right-radius: 6px; - border-bottom-right-radius: 0; - padding: 5px 0px 8px 12px; - color: #494949; - background-color: #dbdbdb; - border-bottom: 1px solid #bababa; -} -.dhx_cal_qi_tdate { - font-size: 14px; - font-weight: bold; -} -.dhx_cal_qi_tcontent { - font-size: 13px; -} -.dhx_cal_qi_content { - padding: 16px 8px; - font-size: 13px; - color: #494949; - overflow: hidden; -} -.dhx_cal_qi_controls { - -webkit-border-top-left-radius: 0; - -webkit-border-bottom-left-radius: 6px; - -webkit-border-top-right-radius: 0; - -webkit-border-bottom-right-radius: 6px; - -moz-border-radius-topleft: 0; - -moz-border-radius-bottomleft: 6px; - -moz-border-radius-topright: 0; - -moz-border-radius-bottomright: 6px; - border-top-left-radius: 0; - border-bottom-left-radius: 6px; - border-top-right-radius: 0; - border-bottom-right-radius: 6px; - padding-left: 7px; -} -.dhx_cal_qi_controls .dhx_menu_icon { - margin-top: 6px; - background-repeat: no-repeat; -} -.dhx_cal_qi_controls .dhx_menu_icon.icon_edit { - width: 20px; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH3QYFCjI5ZQj5bAAAAFNJREFUOMvt0zEOACAIA0DkwTymH8bJTRTKZGJXyaWEKPKTCQAH4Ls37cItcDUzsxHNDLZNhCq7Gt1wh9ErV7EjyGAhyGLphlnsClWuS32rn0czAV+vNGrM/LBtAAAAAElFTkSuQmCC); -} -.dhx_cal_qi_controls .dhx_menu_icon.icon_delete { - width: 20px; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAYAAAAmlE46AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzQzRjMxM0NDRUJEMTFFMjlCNDZDQzhFQUM0ODRCMEIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzQzRjMxM0RDRUJEMTFFMjlCNDZDQzhFQUM0ODRCMEIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDNDNGMzEzQUNFQkQxMUUyOUI0NkNDOEVBQzQ4NEIwQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDNDNGMzEzQkNFQkQxMUUyOUI0NkNDOEVBQzQ4NEIwQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PoU+5FoAAACMSURBVHja7JPdDYAgDIQLE+gmjuAIbOIKjMRIbAAb1BZLUozgz7OXfIbWKxeCAiKCwmNfXnsNP5S4mIkMrSYiEaY2LOFloO6QVF1JamPGc2IvpaeSbqXY4LkOLwU6OTyvgzBasxwnBnivYOGj/sEXg27gbd/JpWZiOf0pV7Anlq9UGqs07hTFC7sAAwCbSNs8SyqFMAAAAABJRU5ErkJggg==); -} -.dhx_qi_big_icon { - font-size: 13px; - border-radius: 4px; - font-weight: bold; - background: #fff; - margin: 5px 9px 8px 0px; - min-width: 60px; - line-height: 32px; - vertical-align: middle; - padding: 0px 10px 0px 5px; - cursor: pointer; - border: 1px solid #bababa; -} -.dhx_cal_qi_controls div { - float: left; - height: 32px; - text-align: center; - line-height: 32px; -} -.gantt_tooltip { - box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07); - background-color: white; - border-left: 1px solid rgba(0, 0, 0, 0.07); - border-top: 1px solid rgba(0, 0, 0, 0.07); - font-family: "Arial"; - font-size: 8pt; - color: #494949; - padding: 10px; - position: absolute; - z-index: 500; -} -.gantt_noselect { - -moz-user-select: -moz-none; - -webkit-user-select: none; - -user-select: none; -} -.gantt_drag_marker { - position: absolute; - font-family: "Arial"; - font-size: 13px; -} -.gantt_drag_marker .gantt_tree_indent, -.gantt_drag_marker .gantt_tree_icon.gantt_blank, -.gantt_drag_marker .gantt_tree_icon.gantt_open, -.gantt_drag_marker .gantt_tree_icon.gantt_close { - display: none; -} -.gantt_drag_marker, -.gantt_drag_marker .gantt_row.odd { - background-color: #ffffff; -} -.gantt_drag_marker .gantt_row { - border-left: 1px solid #d2d2d2; - border-top: 1px solid #d2d2d2; -} -.gantt_drag_marker .gantt_cell { - border-color: #d2d2d2; -} -.gantt_row.gantt_over, -.gantt_task_row.gantt_over { - background-color: #0070fe; -} -.gantt_row.gantt_transparent .gantt_cell { - opacity: 0.7; -} -.gantt_task_row.gantt_transparent { - background-color: #dbf3fe; -} -.dhtmlx_popup_button.dhtmlx_delete_button { - background: #46ad51; - text-shadow: 0 -1px 0 #307738; - color: #fff; - font-weight: bold; -} diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_meadow.css b/phpgwapi/js/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_meadow.css deleted file mode 100755 index a09aa8d088..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_meadow.css +++ /dev/null @@ -1,1267 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -/* - Header -*/ -.chartHeaderBg { - background-color: #f4f2ea; -} -/* - Grid -*/ -.gridHoverStyle { - background-color: #ffebbc !important; -} -.gantt_grid_scale .gantt_grid_head_cell { - border-top: none !important; - border-right: none !important; -} -.gantt_grid_data .gantt_cell { - border-right: none; -} -.gridSelection { - background-color: #ffebbc !important; -} -.timelineSelection { - background-color: #ffebbc !important; -} -/* - Plot -*/ -/* - milestone -*/ -.gantt_task_line .gantt_task_progress_drag { - bottom: -4px; - height: 16px; - margin-left: -8px; - width: 16px; -} -.gantt_task .gantt_task_scale .gantt_scale_cell { - border-right: 1px solid #cac8bd; -} -/* - project highlight -*/ -.gantt_row.gantt_project .gantt_cell, -.gantt_row.odd.gantt_project .gantt_cell { - background-color: #edf3ff; -} -.gantt_task_row.gantt_project .gantt_task_cell, -.gantt_task_row.odd.gantt_project .gantt_task_cell { - background-color: #f5f8ff; -} -.gantt_task_line.gantt_project { - background-color: #c7d8f7; - border: 1px solid #7ba3ed; -} -.gantt_task_line.gantt_project .gantt_task_progress { - background-color: #9ab9f1; -} -/* - lightbox -*/ -.dhx_cal_light .dhx_cal_ltitle { - padding: 7px 10px; -} -.dhx_cal_light .dhx_cal_ltext textarea { - border: 1px solid #d8d6ce; -} -.dhx_cal_light .dhx_cal_larea { - border-color: #d8d6ce !important; - background-color: #fcfaf3; -} -.dhx_cal_light .dhx_cal_larea .dhx_section_time { - background-color: #fcfaf3; -} -.buttonBg { - background: #e0ded7; -} -.dhx_cal_light .dhx_btn_set { - height: 27px; - margin: 5px 10px; - padding: 0px 15px 0px 10px; -} -.dhx_cal_light .dhx_btn_set div { - height: 25px; - margin-top: 0; - background-position: center center; - line-height: 25px; -} -.dhx_btn_set.dhx_save_btn_set { - border: 1px solid #98d27e; - background: #a7d991; -} -.dhx_btn_set.dhx_cancel_btn_set { - background: #e0ded7; - border: 1px solid #cac8bd; -} -.dhx_btn_set.dhx_delete_btn_set { - border: 1px solid #ffad54; - background: #ffb96d; -} -.dhx_cal_light_wide { - padding: 0 !important; -} -.dhx_cal_light_wide .dhx_cal_larea { - border-left: none !important; - border-right: none !important; -} -.dhx_cal_light_wide .dhx_cal_larea .dhx_cal_lsection { - width: 90px; -} -.dhx_cal_light_wide .dhx_btn_set { - margin: 7px 10px; -} -/* - Message -*/ -.dhtmlx_popup_button.dhtmlx_ok_button { - border: 1px solid #98d27e; - background: #a7d991; -} -/* - QuickInfo -*/ -.gantt_data_area .dhx_cal_quick_info { - background-color: #f4f2ea; -} -.gantt_data_area .dhx_cal_qi_content { - background: #fcfaf3; - border-bottom: 1px solid #cac8bd; -} -.dhx_qi_big_icon.icon_delete { - border-color: #ffad54; - background: #ffb96d; -} -/* links dnd */ -.gantt_container { - font-family: "Verdana"; - font-size: 11px; - border: 1px solid #cac8bd; - position: relative; - white-space: nowrap; -} -.gantt_grid { - border-right: 1px solid #cac8bd; -} -.gantt_task_scroll { - overflow-x: scroll; -} -.gantt_task { - position: relative; -} -.gantt_task, -.gantt_grid { - overflow-x: hidden; - overflow-y: hidden; - display: inline-block; - vertical-align: top; -} -.gantt_grid_scale, -.gantt_task_scale { - color: #3f3f3f; - font-size: 8pt; - border-bottom: 1px solid #cac8bd; -} -.gantt_grid_scale { - background-color: #f4f2ea; -} -.gantt_task_scale { - background-color: #f4f2ea; -} -.gantt_scale_line { - box-sizing: border-box; - -moz-box-sizing: border-box; - border-top: 1px solid #cac8bd; -} -.gantt_scale_line:first-child { - border-top: none; -} -.gantt_grid_head_cell { - display: inline-block; - vertical-align: top; - border-right: 1px solid #cac8bd; - text-align: center; - position: relative; - cursor: default; - height: 100%; - box-sizing: border-box; - -moz-box-sizing: border-box; - line-height: 28px; - -moz-user-select: -moz-none; - -webkit-user-select: none; - -user-select: none; -} -.gantt_scale_line { - clear: both; -} -.gantt_grid_data { - width: 100%; - overflow: hidden; -} -.gantt_row { - position: relative; - -webkit-user-select: none; - -moz-user-select: none; - -moz-user-select: -moz-none; -} -.gantt_add, -.gantt_grid_head_add { - width: 100%; - height: 100%; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDAzOTZDREFDN0FGMTFFMkE1MDhCNkFCRDk3RkY4NTkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDAzOTZDREJDN0FGMTFFMkE1MDhCNkFCRDk3RkY4NTkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowMDM5NkNEOEM3QUYxMUUyQTUwOEI2QUJEOTdGRjg1OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowMDM5NkNEOUM3QUYxMUUyQTUwOEI2QUJEOTdGRjg1OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PnzqpNoAAAEFSURBVHjapJPPDsFAEMbHZqXSi1ZC3Dg7O9bbeA7v4czZE4hLSRwkbiI4cCAN4Uyqs/pPs1vbrTDJHL7Mb77sbr8WeuMu/FOEMQaStplYdgYHFBnKjK1atZqI8+ViZZ2AMmS5x1QxFNHLNVAx1EPMNVAxBBFtvxnfuq4LUKDTTLwXXsFqNprKE1RMM2y+9oe9FV3Bw5++/3svfMRWpS0MV7fFx0Ka2e62kQEhBEbzoTA0DAPqtXqinbMD643IFGkR3KcL1Cib0yA4/DBY4A2u15ug45oFHD05x44sO+kc+FwhI0j4RZBQlUT5kH+0JS4VBpKfqaSVYDDpJ1rz9eNxlxq8BBgAcMHBu6BPeX8AAAAASUVORK5CYII=); - background-position: center center; - background-repeat: no-repeat; - cursor: pointer; - position: relative; - -moz-opacity: 0.3; - opacity: 0.3; -} -.gantt_grid_head_cell.gantt_grid_head_add { - -moz-opacity: 0.6; - opacity: 0.6; - top: 0; -} -.gantt_grid_head_cell.gantt_grid_head_add:hover { - -moz-opacity: 1; - opacity: 1; -} -.gantt_grid_data .gantt_row:hover, -.gantt_grid_data .gantt_row.odd:hover { - background-color: #ffebbc !important; -} -.gantt_grid_data .gantt_row:hover .gantt_add, -.gantt_grid_data .gantt_row.odd:hover .gantt_add { - -moz-opacity: 1; - opacity: 1; -} -.gantt_task_row, -.gantt_row { - border-bottom: 1px solid #eae9e5; -} -.gantt_row, -.gantt_task_row { - background-color: #ffffff; -} -.gantt_row.odd, -.gantt_task_row.odd { - background-color: #ffffff; -} -.gantt_row, -.gantt_cell, -.gantt_task_row, -.gantt_task_cell, -.gantt_grid_head_cell, -.gantt_scale_cell { - box-sizing: border-box; - -moz-box-sizing: border-box; -} -.gantt_grid_head_cell, -.gantt_scale_cell { - line-height: inherit; -} -.gantt_cell { - display: inline-block; - vertical-align: top; - border-right: 1px solid #eae9e5; - padding-left: 6px; - padding-right: 6px; - height: 100%; - overflow: hidden; - white-space: nowrap; - font-size: 8pt; -} -.gantt_grid_scale .gantt_last_cell, -.gantt_grid_data .gantt_last_cell, -.gantt_task_scale .gantt_last_cell, -.gantt_task_bg .gantt_last_cell { - border-right-width: 0px; -} -.gantt_task_bg { - overflow: hidden; -} -.gantt_scale_cell { - display: inline-block; - white-space: nowrap; - overflow: hidden; - border-right: 1px solid #cac8bd; - text-align: center; - height: 100%; -} -.gantt_task_cell { - display: inline-block; - height: 100%; - border-right: 1px solid #eae9e5; -} -.gantt_ver_scroll { - width: 0px; - background-color: transparent; - height: 1px; - overflow-x: hidden; - overflow-y: scroll; - display: none; - position: absolute; - right: 0px; -} -.gantt_ver_scroll > div { - width: 1px; - height: 1px; -} -.gantt_hor_scroll { - height: 0px; - background-color: transparent; - width: 100%; - clear: both; - overflow-x: scroll; - overflow-y: hidden; - display: none; -} -.gantt_hor_scroll > div { - width: 5000px; - height: 1px; -} -.gantt_tree_indent { - width: 15px; - height: 100%; - display: inline-block; -} -.gantt_tree_content, -.gantt_tree_icon { - vertical-align: top; -} -.gantt_tree_icon { - width: 28px; - height: 100%; - display: inline-block; - background-repeat: no-repeat; - background-position: center center; -} -.gantt_tree_content { - height: 100%; - display: inline-block; -} -.gantt_tree_icon.gantt_open { - background-image: url(data:image/gif;base64,R0lGODlhEgASAJEAAP///4SEhAAAAP///yH5BAUUAAMALAAAAAASABIAAAIqnI+py+0Powq01haA3iDgLWwek2mhNi6ZwLLdZ4owcL4kJ5OWJfX+DykAADs=); - width: 18px; - cursor: pointer; -} -.gantt_tree_icon.gantt_close { - background-image: url(data:image/gif;base64,R0lGODlhEgASAJEAAP///4SEhAAAAP///yH5BAUUAAMALAAAAAASABIAAAImnI+py+0Powq01haA3iBgvnlMBnafgKLmWK4LCYpvK0+WJeX6DhUAOw==); - width: 18px; - cursor: pointer; -} -.gantt_tree_icon.gantt_blank { - width: 18px; -} -.gantt_tree_icon.gantt_folder_open { - background-image: url(data:image/gif;base64,R0lGODlhEgASAMQfAPXMWPK9N/fipOzLbPrVaP/89frqwv3tuvvprfLES+7PdP7xyP7z0vPAQfvtyMuaIv/32/735OSqFv3de+7ReP7lmf7gh/nv0v/67unFXfb29vK/PenFSaGEPfLnyv///yH5BAEAAB8ALAAAAAASABIAAAWS4Cc+ZGk+YvqZRVtgGiag6sNBThlFWnTQqQcE4sqRFj/VashsYR6HZI0JWSAjDwQCOGIgERULg/EQzJRQsGVCYHTK51qYTQDkFPj4iA4AJHIUgQoGQA8EdX4NhHgKAxeFfQkJGwGLeI6Fkg2UlQ8Dn5hBCZuchKChIxKkGw05Ga8DHlwkqg2tJ1xBtDlKvTUkviEAOw==); -} -.gantt_tree_icon.gantt_folder_closed { - background-image: url(data:image/gif;base64,R0lGODlhEgASAMQfAPvjpP/24fPHVvnUdvzotdSiKv/23vvrw/LCS/C+RfnelvPMaf/88/nbi/rsyerYq/TLYv7y1v7wzeCsLO+8P86dJfvv0MuaIsydKPPOc+SqGKGEPe/AS+zVneWwLf///yH5BAEAAB8ALAAAAAASABIAAAWZ4CdeZGleYvpdA+O+zNUBqHoZOB4EceHUqVtuF+n9VCtdQCI5BC6FA3BkCEQkBALAACVMV9eDVhGJQGnIixigaAwiG6jie2G7BxDLpVJozG13EAICPxUeGRleQQMLgggJUhiHC3pBggKPFJETGZRAF5gJCRSaFxgTC55BCByioz+nEKojGgmtHBwPJAUCELo2J8FfSMTFxsUhADs=); -} -.gantt_tree_icon.gantt_file { - background-image: url(data:image/gif;base64,R0lGODlhEgASAMQVAPv7+2RkZPf39/r6+vj4+Pn5+fT09Pb29vX19fHx8fDw8Onp6fLy8u7u7uzs7PPz8+vr6+rq6uXl5ejo6O/v7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABUALAAAAAASABIAAAV4YCWOZGkGaKqaVSAMQCwLQnAOj6ErzUTXpQDgQDgcGJTFDzgSEp4HRCKytDUBMKzAoIAsJACrSCjTGhINR5hELg8ECEZifS3HCgQEgj62xwZPAnwtbgMDBQU0g21Yh4iIi3aGkzBihH52lgEEmDIEli0qoigspSYhADs=); -} -.gantt_grid_head_cell .gantt_sort { - position: absolute; - right: 5px; - top: 8px; - width: 7px; - height: 13px; - background-repeat: no-repeat; - background-position: center center; -} -.gantt_grid_head_cell .gantt_sort.gantt_asc { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR42mNgQAL1/VP/M2ADIIntF2/9x1AAlrh0C47hCmA60DFYwX88gIFGwNDY5D8uDFbg7hvwHx2jmIBTAlkB0e4BAEjlaNtBWJPnAAAAAElFTkSuQmCC); -} -.gantt_grid_head_cell .gantt_sort.gantt_desc { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR4nGNgQAKGxib/GbABkIS7b8B/DAUwCRiGK0CXwFBAb1DfP/U/LszwHwi2X7qFgUEArBtdAVwCBmAKMCSQFSDzAWXXaOHsXeqkAAAAAElFTkSuQmCC); -} -.gantt_inserted, -.gantt_updated { - font-weight: bold; -} -.gantt_deleted { - text-decoration: line-through; -} -.gantt_invalid { - background-color: FFE0E0; -} -.gantt_error { - color: red; -} -.dhtmlx_message_area { - position: fixed; - right: 5px; - width: 250px; - z-index: 1000; -} -.dhtmlx-info { - min-width: 120px; - padding: 4px 4px 4px 20px; - font-family: "Verdana"; - z-index: 10000; - margin: 5px; - margin-bottom: 10px; - -webkit-transition: all .5s ease; - -moz-transition: all .5s ease; - -o-transition: all .5s ease; - transition: all .5s ease; -} -.dhtmlx-info.hidden { - height: 0px; - padding: 0px; - border-width: 0px; - margin: 0px; - overflow: hidden; -} -.dhtmlx_modal_box { - overflow: hidden; - display: inline-block; - min-width: 250px; - width: 250px; - text-align: center; - position: fixed; - z-index: 20000; - box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07); - font-family: "Verdana"; - border-radius: 6px; - border: 1px solid #cac8bd; - background: #fcfaf3; -} -.dhtmlx_popup_title { - border-top-left-radius: 6px; - border-top-right-radius: 6px; - border-width: 0px; -} -.dhtmlx_button, -.dhtmlx_popup_button { - border: 1px solid #cac8bd; - height: 25px; - line-height: 25px; - display: inline-block; - margin: 0 5px; - border-radius: 4px; - background: #e0ded7; -} -.dhtmlx-info, -.dhtmlx_popup_button, -.dhtmlx_button { - user-select: none; - -webkit-user-select: none; - -moz-user-select: -moz-none; - cursor: pointer; -} -.dhtmlx_popup_text { - overflow: hidden; -} -.dhtmlx_popup_controls { - border-radius: 6px; - padding: 10px; -} -.dhtmlx_popup_button { - min-width: 100px; -} -div.dhx_modal_cover { - background-color: #000; - cursor: default; - filter: progid:DXImageTransform.Microsoft.Alpha(opacity=20); - opacity: 0.2; - position: fixed; - z-index: 19999; - left: 0px; - top: 0px; - width: 100%; - height: 100%; - border: none; - zoom: 1; -} -.dhtmlx-info img, -.dhtmlx_modal_box img { - float: left; - margin-right: 20px; -} -.dhtmlx-alert-error, -.dhtmlx-confirm-error { - border: 1px solid #ff0000; -} -/*Skin section*/ -.dhtmlx_button input, -.dhtmlx_popup_button div { - border-radius: 4px; - font-size: 14px; - -moz-box-sizing: content-box; - box-sizing: content-box; - padding: 0px; - margin: 0px; - vertical-align: top; -} -.dhtmlx_popup_title { - color: #fff; - text-shadow: 1px 1px #000; - height: 40px; - line-height: 40px; - font-size: 20px; -} -.dhtmlx_popup_text { - margin: 15px 15px 5px 15px; - font-size: 14px; - color: #000; - min-height: 30px; - border-radius: 6px; -} -.dhtmlx-info, -.dhtmlx-error { - font-size: 14px; - color: #000; - box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07); - padding: 0px; - background-color: #FFF; - border-radius: 3px; - border: 1px solid #ffffff; -} -.dhtmlx-info div { - padding: 5px 10px 5px 10px; - background-color: #fff; - border-radius: 3px; - border: 1px solid #cac8bd; -} -.dhtmlx-error { - background-color: #d81b1b; - border: 1px solid #ff3c3c; - box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07); -} -.dhtmlx-error div { - background-color: #d81b1b; - border: 1px solid #940000; - color: #FFF; -} -.gantt_grid div, -.gantt_data_area div { - -ms-touch-action: none; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} -.gantt_data_area { - position: relative; - overflow-x: hidden; - overflow-y: hidden; - -moz-user-select: -moz-none; - -webkit-user-select: none; - -user-select: none; -} -.gantt_links_area { - position: absolute; - left: 0px; - top: 0px; -} -.gantt_task_content, -.gantt_task_progress, -.gantt_side_content { - line-height: inherit; - overflow: hidden; - height: 100%; -} -.gantt_task_content { - font-size: 11px; - color: #3f3f3f; - width: 100%; - position: absolute; - white-space: nowrap; - text-align: center; -} -.gantt_task_progress { - text-align: center; - z-index: 0; - background: #a7d991; -} -.gantt_task_line { - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - border-radius: 2px; - position: absolute; - -moz-box-sizing: border-box; - box-sizing: border-box; - background-color: #e1ffd4; - border: 1px solid #7fbc64; - -webkit-user-select: none; - -moz-user-select: none; - -moz-user-select: -moz-none; -} -.gantt_task_line.gantt_drag_move div { - cursor: move; -} -.gantt_side_content { - position: absolute; - white-space: nowrap; - color: #6e6e6e; - bottom: 7px; - font-size: 11px; - font-size: 10px; -} -.gantt_side_content.gantt_left { - right: 100%; - padding-right: 15px; -} -.gantt_side_content.gantt_right { - left: 100%; - padding-left: 15px; -} -.gantt_side_content.gantt_link_crossing { - bottom: 6.75px; -} -.gantt_task_link .gantt_line_wrapper, -.gantt_link_arrow { - position: absolute; - cursor: pointer; -} -.gantt_line_wrapper div { - background-color: #ffb96d; -} -.gantt_task_link:hover .gantt_line_wrapper div { - box-shadow: 0 0 5px 0px #ffb96d; -} -.gantt_task_link div.gantt_link_arrow { - background-color: transparent; - border-style: solid; - width: 0px; - height: 0px; -} -.gantt_link_control { - position: absolute; - width: 13px; - top: 0px; -} -.gantt_link_control div { - display: none; - cursor: pointer; - box-sizing: border-box; - position: relative; - top: 50%; - margin-top: -7.5px; - vertical-align: middle; - border: 1px solid #929292; - -webkit-border-radius: 6.5px; - -moz-border-radius: 6.5px; - border-radius: 6.5px; - height: 13px; - width: 13px; - background-color: #f0f0f0; -} -.gantt_link_control div:hover { - background-color: #ffffff; -} -.gantt_link_control.task_left { - left: -13px; -} -.gantt_link_control.task_right { - right: -13px; -} -.gantt_task_line.gantt_selected .gantt_link_control div, -.gantt_task_line:hover .gantt_link_control div { - display: block; -} -.gantt_link_target .gantt_link_control div { - display: block; -} -.gantt_link_source, -.gantt_link_target { - box-shadow: 0px 0px 3px #a7d991; -} -.gantt_link_target.link_start_allow, -.gantt_link_target.link_finish_allow { - box-shadow: 0px 0px 3px #ffdeba; -} -.gantt_link_target.link_start_deny, -.gantt_link_target.link_finish_deny { - box-shadow: 0px 0px 3px #e87e7b; -} -.link_start_allow .gantt_link_control.task_left div, -.link_finish_allow .gantt_link_control.task_right div { - background-color: #ffdeba; - border-color: #ffb96d; -} -.link_start_deny .gantt_link_control.task_left div, -.link_finish_deny .gantt_link_control.task_right div { - background-color: #e87e7b; - border-color: #dd3e3a; -} -.gantt_link_arrow_right { - border-width: 4px 0 4px 6px; - border-color: transparent transparent transparent #ffb96d; - margin-top: -1px; -} -.gantt_link_arrow_left { - border-width: 4px 6px 4px 0; - margin-top: -1px; - border-color: transparent #ffb96d transparent transparent; -} -.gantt_link_arrow_top { - border-width: 0 4px 6px 4px; - border-color: transparent transparent #ffb96d transparent; -} -.gantt_link_arrow_down { - border-width: 4px 6px 0 4px; - border-color: #ffb96d transparent transparent transparent; -} -.gantt_task_drag, -.gantt_task_progress_drag { - cursor: w-resize; - height: 100%; - display: none; - position: absolute; -} -.gantt_task_line.gantt_selected .gantt_task_progress_drag, -.gantt_task_line:hover .gantt_task_progress_drag, -.gantt_task_line.gantt_selected .gantt_task_drag, -.gantt_task_line:hover .gantt_task_drag { - display: block; -} -.gantt_task_drag { - width: 6px; - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAACCAYAAACUn8ZgAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTgyOEUzQzJDODQ3MTFFMjg3NDRCMUFBMTM1M0U1OTYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OTgyOEUzQzNDODQ3MTFFMjg3NDRCMUFBMTM1M0U1OTYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo5ODI4RTNDMEM4NDcxMUUyODc0NEIxQUExMzUzRTU5NiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo5ODI4RTNDMUM4NDcxMUUyODc0NEIxQUExMzUzRTU5NiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pj3qIQcAAAAaSURBVHjaYvz//z8DLsAEIhoaGv5jowECDAASbgp+4xzYLgAAAABJRU5ErkJggg==); - z-index: 1; - top: 0px; -} -.gantt_task_drag.task_left { - left: 0px; -} -.gantt_task_drag.task_right { - right: 0px; -} -.gantt_task_progress_drag { - height: 8px; - width: 8px; - bottom: -4px; - margin-left: -4px; - background-position: bottom; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAJCAYAAAAGuM1UAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Q0JCMkQyRDhDOTFDMTFFMjg3RTFCNUEzNUQwRDMxNjEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Q0JCMkQyRDlDOTFDMTFFMjg3RTFCNUEzNUQwRDMxNjEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDQkIyRDJENkM5MUMxMUUyODdFMUI1QTM1RDBEMzE2MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDQkIyRDJEN0M5MUMxMUUyODdFMUI1QTM1RDBEMzE2MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Ppy3ICwAAADsSURBVHjafFBbaoNQEB1vghtIPlJX4Z/iX/cSsoZQGl80JZvIAvxVf1yNX6EFH+ADK8Y6nblQaGzagXNnmHPODHMVRIR5+L7/Sqm2bfv0i2TDT3ied4zjGBlU7+f8XPzCwrZtsSzLb9PTXQMRfhRFWFUVdl0nURQFco+45xsDNdwwDOVUNuR5LlHXNWZZhsyR5sDahRDC1XXdsSwLFCHgo+/hc5okhusVVFUFTdNgHMfHIAhQ0N2OaZowkbtpGhiG4Qa0RX6OYRicvCU9b2maPqzWa/grKtpE93D5zoZtkiRnyhv4Py6E3ZcAAwDb89Sl5rtPtAAAAABJRU5ErkJggg==); - background-repeat: no-repeat; - z-index: 2; -} -.gantt_link_tooltip { - box-shadow: 3px 3px 3px #888888; - background-color: #ffffff; - border-left: 1px dotted #cecece; - border-top: 1px dotted #cecece; - font-family: Tahoma; - font-size: 8pt; - color: #444444; - padding: 6px; - line-height: 20px; -} -.gantt_link_direction { - height: 0px; - border: 0px none #ffb96d; - border-bottom-style: dashed; - border-bottom-width: 2px; - transform-origin: 0% 0%; - -ms-transform-origin: 0% 0%; - -webkit-transform-origin: 0% 0%; - z-index: 2; - margin-left: 1px; - position: absolute; -} -.gantt_grid_data .gantt_row.gantt_selected, -.gantt_grid_data .gantt_row.odd.gantt_selected { - background-color: #ffebbc !important; -} -.gantt_task_row.gantt_selected { - background-color: #ffebbc !important; -} -.gantt_task_row.gantt_selected .gantt_task_cell { - border-right-color: #ffdc89; -} -.gantt_task_line.gantt_selected { - box-shadow: 0 0 5px #a7d991; -} -.gantt_task_line.gantt_project.gantt_selected { - box-shadow: 0 0 5px #9ab9f1; -} -.gantt_task_line.gantt_milestone { - visibility: hidden; - background-color: #db7dc5; - border: 0px solid #cd49ae; - box-sizing: content-box; - -moz-box-sizing: content-box; -} -.gantt_task_line.gantt_milestone div { - visibility: visible; -} -.gantt_task_line.gantt_milestone .gantt_task_content { - background: inherit; - border: inherit; - border-width: 1px; - border-radius: inherit; - box-sizing: border-box; - -moz-box-sizing: border-box; - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); -} -.dhx_unselectable, -.dhx_unselectable div { - -webkit-user-select: none; - -moz-user-select: none; - -moz-user-select: -moz-none; -} -.dhx_cal_light { - -webkit-tap-highlight-color: transparent; - background: #f4f2ea; - border-radius: 6px; - font-family: "Verdana"; - font-size: 11px; - border: 1px solid #cac8bd; - color: #3f3f3f; - font-size: 8pt; - position: absolute; - z-index: 10001; - width: 550px; - height: 250px; - box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07); -} -.dhx_cal_light_wide { - width: 650px; -} -.dhx_cal_light select { - font-family: "Verdana"; - border: 1px solid #cac8bd; - font-size: 11px; - padding: 2px; - margin: 0px; -} -.dhx_cal_ltitle { - padding: 7px 10px; - overflow: hidden; - white-space: nowrap; - -webkit-border-top-left-radius: 6px; - -webkit-border-bottom-left-radius: 0; - -webkit-border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 0; - -moz-border-radius-topleft: 6px; - -moz-border-radius-bottomleft: 0; - -moz-border-radius-topright: 6px; - -moz-border-radius-bottomright: 0; - border-top-left-radius: 6px; - border-bottom-left-radius: 0; - border-top-right-radius: 6px; - border-bottom-right-radius: 0; -} -.dhx_cal_ltitle span { - white-space: nowrap; -} -.dhx_cal_lsection { - color: #727272; - font-weight: bold; - padding: 12px 0px 5px 10px; -} -.dhx_cal_lsection .dhx_fullday { - float: right; - margin-right: 5px; - font-size: 12px; - font-weight: normal; - line-height: 20px; - vertical-align: top; - cursor: pointer; -} -.dhx_cal_lsection { - font-size: 13px; -} -.dhx_cal_ltext { - padding: 2px 10px; - overflow: hidden; -} -.dhx_cal_ltext textarea { - overflow: auto; - font-family: "Verdana"; - font-size: 11px; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - border: 1px solid #cac8bd; - height: 100%; - width: 100%; - outline: none !important; - resize: none; -} -.dhx_time { - font-weight: bold; -} -.dhx_cal_light .dhx_title { - padding-left: 10px; -} -.dhx_cal_larea { - border: 1px solid #cac8bd; - border-left: none; - border-right: none; - background-color: #fff; - overflow: hidden; - height: 1px; -} -.dhx_btn_set { - margin: 10px 7px 5px 10px; - padding: 5px 15px 5px 10px; - float: left; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - border-width: 0; - border-color: #cac8bd; - border-style: solid; - height: 27px; - color: #4f4f4f; - background: #e0ded7; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - cursor: pointer; -} -.dhx_btn_set div { - float: left; - font-size: 13px; - height: 17px; - line-height: 17px; - background-repeat: no-repeat; - vertical-align: middle; -} -.dhx_save_btn { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUUzMDA3NzlDOTFEMTFFMkJBQTNFMTU1NTdFNUNFMTMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUUzMDA3N0FDOTFEMTFFMkJBQTNFMTU1NTdFNUNFMTMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBRTMwMDc3N0M5MUQxMUUyQkFBM0UxNTU1N0U1Q0UxMyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBRTMwMDc3OEM5MUQxMUUyQkFBM0UxNTU1N0U1Q0UxMyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PtHrmoUAAAF4SURBVHjaYvr//z8DNTATA5UA1QxiIUdTQEAAG5CaA8S6QGyyYcOGvyzkGMLIyLgSGC4BHBwcr1RUVBhJdhHQEGagIctAhjAzM/9OSkrqd3Nz+ws3CKjAA0hNA+JcoDO34jIESC0FGhIM4tvb2y8FGjIbyPwPD2wNDQ1RIKUItG09UIM3LkOAOBzEB3rnaF5eXieQ+RYl1jo6Og4oKCicAtrGCjXMA82Q+TBD+Pj4HtfU1NQDmTewRf/jjIyMNmDgfYAatgnJMFDsxIIYrKysX7Ozs9sFBAT240xHQO/t8PT0BGliQHLZdiA3AabGz89vlrm5+RIg8x++BPkzPj5+Msj/UMM4gBTciwYGBttiY2MnAJmfiUnZj4CB2MzFxfUGWVBcXPx6WVlZE0ie6CwiJye3D+il6UCvgZ0PCreCggKQ4adIzWu/w8LCpoO8wsLC8j0yMnKipqbmelh6wQUYQUUADmACxDpADArwl4RSPT6DBqYYAQgwANyusz7jloxAAAAAAElFTkSuQmCC); - margin-top: 2px; - width: 21px; -} -.dhx_cancel_btn { - margin-top: 2px; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjQxN0VEOUZDOTFEMTFFMkFFMjE4MDI4MUJDNDQ1NDkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjQxN0VEQTBDOTFEMTFFMkFFMjE4MDI4MUJDNDQ1NDkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCNDE3RUQ5REM5MUQxMUUyQUUyMTgwMjgxQkM0NDU0OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCNDE3RUQ5RUM5MUQxMUUyQUUyMTgwMjgxQkM0NDU0OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pq9E2PUAAAH/SURBVHjaYvz//z8DNQAjTQ0KCAjgAVJFQOwBxGZQ4VNAvAOI+zZs2PCFoEFAQ+wZGRkXAMUVsNrMyPgAKJcANOwgToOAhgQCqXUgtqCg4ANXV9ctzs7Od0D8vXv3quzYsSPw06dP0lDl/kDDNmEYBDRECGjbYyCfS09Pb0dNTc1sNja2M0CpF1C1EjExMfu/fPmiBHXZZ5CrgYa9A/FZYCaysLCU/vnzh0tUVPRGU1NTPVDoNBD/R3ItyKVKAgICj/79+8cIdJksSA9QrBIkz4RkUBCINjU1XQUNWGRDQC4zBhrycMGCBYW2trbLkPWgGPTz50+wk6WlpTegBT6yIaCYXMfJybkRJPf7928ZDIOYmZl/g+jjx4+/xmcISPz27dsfYNowDOLi4gIb8PDhQ1N8hkDVGIBobm7ulxgGAb0EClyGX79+leAzBCjH9vXr13pkPSgGhYeHTwd6DxhUP62ghjzCZggw2icCw0YdGNDfQXrgkQVjGBgYHPHx8Zm9cePGHGhA/gdq/ANkysGUAHELMO3ogji+vr6zQXpwZREFkEErV66M//btmwi2LAIMyzdAlyz09/efDAoufJlW8tWrVx7Tp08PevDggc779+8VYFlGQUHhSmZm5joxMTFQ5n1OTDHCCsT6QAxKJ2JQsVdA/ASIL4J8TrPyCCDAAK8E80CvM3cMAAAAAElFTkSuQmCC); - width: 20px; -} -.dhx_delete_btn { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjkzQUQ0MjVDOTFEMTFFMkEwRERFNzQ5NzZCRjlBODgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjkzQUQ0MjZDOTFEMTFFMkEwRERFNzQ5NzZCRjlBODgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCOTNBRDQyM0M5MUQxMUUyQTBEREU3NDk3NkJGOUE4OCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCOTNBRDQyNEM5MUQxMUUyQTBEREU3NDk3NkJGOUE4OCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pmbo+yIAAAB9SURBVHjaYvz//z8DNQALPsmAgAC4LRs2bGDEaxLIRdiwv78/kPqfBsNQPk71jDCvIdtOLEB2JRMDlQAjUmCnkaF/FtYwgoUDsTQypprXRg0a0QYhp2yGpqamzefOnfMhpMnIyGhLXV2dL06DgMAYigmBs1CM0yCyAUCAAQAlK4lJjSOjGQAAAABJRU5ErkJggg==); - margin-top: 2px; - width: 20px; -} -.dhx_cal_cover { - width: 100%; - height: 100%; - position: absolute; - z-index: 10000; - top: 0px; - left: 0px; - background-color: black; - opacity: 0.1; - filter: progid:DXImageTransform.Microsoft.Alpha(opacity=10); -} -.dhx_custom_button { - padding: 0px 3px 0px 3px; - font-family: "Verdana"; - font-size: 11px; - font-weight: normal; - margin-right: 5px; - margin-top: 0px; - cursor: pointer; -} -.dhx_custom_button div { - cursor: pointer; - float: left; - height: 21px; - line-height: 21px; - vertical-align: middle; -} -.dhx_cal_light_wide { - width: 580px; - padding: 2px 4px; -} -.dhx_cal_light_wide .dhx_cal_larea { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - border: 1px solid #cac8bd; -} -.dhx_cal_light_wide .dhx_cal_lsection { - border: 0px; - float: left; - text-align: right; - width: 80px; - height: 20px; - padding: 5px 10px 0px 0px; -} -.dhx_cal_light_wide .dhx_wrap_section { - position: relative; - padding: 10px 0; - overflow: hidden; - border-bottom: 1px solid #eae9e5; -} -.dhx_cal_light_wide .dhx_section_time { - overflow: hidden; - padding-top: 2px !important; - padding-right: 0px; - height: 20px !important; -} -.dhx_cal_light_wide .dhx_cal_ltext { - padding-right: 0px; -} -.dhx_cal_light_wide .dhx_cal_larea { - padding: 0 10px; - width: 100%; -} -.dhx_cal_light_wide .dhx_section_time { - background: transparent; -} -.dhx_cal_light_wide .dhx_cal_checkbox label { - padding-left: 0px; -} -.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday { - float: none; - margin-right: 0px; - font-weight: bold; - cursor: pointer; -} -.dhx_cal_light_wide .dhx_custom_button { - position: absolute; - top: 0; - right: 0; - margin-top: 2px; -} -.dhx_cal_light_wide .dhx_repeat_right { - margin-right: 55px; -} -.dhx_cal_light_wide.dhx_cal_light_full { - width: 738px; -} -.dhx_cal_wide_checkbox input { - margin-top: 8px; - margin-left: 14px; -} -.dhx_cal_light input { - font-size: 11px; -} -.dhx_custom_button { - float: right; - height: 21px; - width: 90px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - -ms-border-radius: 4px; - -o-border-radius: 4px; - border-radius: 4px; -} -.dhx_section_time { - background-color: white; - white-space: nowrap; - padding: 2px 10px 5px; - padding-top: 2px !important; -} -.dhx_section_time .dhx_time_selects { - float: left; - height: 25px; -} -.dhx_section_time .dhx_time_selects select { - height: 23px; - padding: 2px; - border: 1px solid #cac8bd; -} -.dhx_gantt_duration { - width: 100px; - height: 23px; - float: left; - white-space: nowrap; - margin-left: 20px; - line-height: 23px; -} -.dhx_gantt_duration .dhx_gantt_duration_value, -.dhx_gantt_duration .dhx_gantt_duration_dec, -.dhx_gantt_duration .dhx_gantt_duration_inc { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - text-align: center; - vertical-align: top; - height: 100%; - border: 1px solid #cac8bd; -} -.dhx_gantt_duration .dhx_gantt_duration_value { - width: 40px; - padding: 3px 4px; - border-left-width: 0; - border-right-width: 0; -} -.dhx_gantt_duration .dhx_gantt_duration_dec, -.dhx_gantt_duration .dhx_gantt_duration_inc { - width: 20px; - padding: 1px; - padding-bottom: 3px; - background: #e0ded7; -} -.dhx_gantt_duration .dhx_gantt_duration_dec { - -moz-border-top-left-radius: 4px; - -moz-border-bottom-left-radius: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; -} -.dhx_gantt_duration .dhx_gantt_duration_inc { - margin-right: 4px; - -moz-border-top-right-radius: 4px; - -moz-border-bottom-right-radius: 4px; - -webkit-border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; -} -/* Quick info */ -.dhx_cal_quick_info { - border: 1px solid #cac8bd; - border-radius: 6px; - position: absolute; - z-index: 300; - box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07); - background-color: #fcfaf3; - width: 300px; - transition: left 0.5s ease, right 0.5s; - -moz-transition: left 0.5s ease, right 0.5s; - -webkit-transition: left 0.5s ease, right 0.5s; - -o-transition: left 0.5s ease, right 0.5s; -} -.dhx_no_animate { - transition: none; - -moz-transition: none; - -webkit-transition: none; - -o-transition: none; -} -.dhx_cal_quick_info.dhx_qi_left .dhx_qi_big_icon { - float: right; -} -.dhx_cal_qi_title { - -webkit-border-top-left-radius: 6px; - -webkit-border-bottom-left-radius: 0; - -webkit-border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 0; - -moz-border-radius-topleft: 6px; - -moz-border-radius-bottomleft: 0; - -moz-border-radius-topright: 6px; - -moz-border-radius-bottomright: 0; - border-top-left-radius: 6px; - border-bottom-left-radius: 0; - border-top-right-radius: 6px; - border-bottom-right-radius: 0; - padding: 5px 0px 8px 12px; - color: #3f3f3f; - background-color: #f4f2ea; - border-bottom: 1px solid #cac8bd; -} -.dhx_cal_qi_tdate { - font-size: 14px; - font-weight: bold; -} -.dhx_cal_qi_tcontent { - font-size: 11px; -} -.dhx_cal_qi_content { - padding: 16px 8px; - font-size: 13px; - color: #3f3f3f; - overflow: hidden; -} -.dhx_cal_qi_controls { - -webkit-border-top-left-radius: 0; - -webkit-border-bottom-left-radius: 6px; - -webkit-border-top-right-radius: 0; - -webkit-border-bottom-right-radius: 6px; - -moz-border-radius-topleft: 0; - -moz-border-radius-bottomleft: 6px; - -moz-border-radius-topright: 0; - -moz-border-radius-bottomright: 6px; - border-top-left-radius: 0; - border-bottom-left-radius: 6px; - border-top-right-radius: 0; - border-bottom-right-radius: 6px; - padding-left: 7px; -} -.dhx_cal_qi_controls .dhx_menu_icon { - margin-top: 3.5px; - background-repeat: no-repeat; -} -.dhx_cal_qi_controls .dhx_menu_icon.icon_edit { - width: 20px; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH3QYFDgcMloNXJQAAAFNJREFUOMvt0zEOACAIA0Dkg30rL8TJTRTKZGJXyaWEKPKTCQAH4Ls37cItcDUzsxHNDLZNhCq7Gt1wh9ErV7EjyGAhyGLphlnsClWuS32rn0czAT/KLVk9yshBAAAAAElFTkSuQmCC); -} -.dhx_cal_qi_controls .dhx_menu_icon.icon_delete { - width: 20px; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjkzQUQ0MjVDOTFEMTFFMkEwRERFNzQ5NzZCRjlBODgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjkzQUQ0MjZDOTFEMTFFMkEwRERFNzQ5NzZCRjlBODgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCOTNBRDQyM0M5MUQxMUUyQTBEREU3NDk3NkJGOUE4OCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCOTNBRDQyNEM5MUQxMUUyQTBEREU3NDk3NkJGOUE4OCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pmbo+yIAAAB9SURBVHjaYvz//z8DNQALPsmAgAC4LRs2bGDEaxLIRdiwv78/kPqfBsNQPk71jDCvIdtOLEB2JRMDlQAjUmCnkaF/FtYwgoUDsTQypprXRg0a0QYhp2yGpqamzefOnfMhpMnIyGhLXV2dL06DgMAYigmBs1CM0yCyAUCAAQAlK4lJjSOjGQAAAABJRU5ErkJggg==); -} -.dhx_qi_big_icon { - font-size: 13px; - border-radius: 4px; - color: #4f4f4f; - background: #e0ded7; - margin: 5px 9px 8px 0px; - min-width: 60px; - line-height: 27px; - vertical-align: middle; - padding: 0px 10px 0px 5px; - cursor: pointer; - border: 1px solid #cac8bd; -} -.dhx_cal_qi_controls div { - float: left; - height: 27px; - text-align: center; - line-height: 27px; -} -.gantt_tooltip { - box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07); - background-color: white; - border-left: 1px solid rgba(0, 0, 0, 0.07); - border-top: 1px solid rgba(0, 0, 0, 0.07); - font-family: "Verdana"; - font-size: 8pt; - color: #3f3f3f; - padding: 10px; - position: absolute; - z-index: 500; -} -.gantt_noselect { - -moz-user-select: -moz-none; - -webkit-user-select: none; - -user-select: none; -} -.gantt_drag_marker { - position: absolute; - font-family: "Verdana"; - font-size: 11px; -} -.gantt_drag_marker .gantt_tree_indent, -.gantt_drag_marker .gantt_tree_icon.gantt_blank, -.gantt_drag_marker .gantt_tree_icon.gantt_open, -.gantt_drag_marker .gantt_tree_icon.gantt_close { - display: none; -} -.gantt_drag_marker, -.gantt_drag_marker .gantt_row.odd { - background-color: #ffffff; -} -.gantt_drag_marker .gantt_row { - border-left: 1px solid #d3d1c8; - border-top: 1px solid #d3d1c8; -} -.gantt_drag_marker .gantt_cell { - border-color: #d3d1c8; -} -.gantt_row.gantt_over, -.gantt_task_row.gantt_over { - background-color: #0070fe; -} -.gantt_row.gantt_transparent .gantt_cell { - opacity: 0.7; -} -.gantt_task_row.gantt_transparent { - background-color: #ffffff; -} -.dhtmlx_popup_button.dhtmlx_delete_button { - border: 1px solid #98d27e; - background: #a7d991; -} diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_skyblue.css b/phpgwapi/js/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_skyblue.css deleted file mode 100755 index b34bd0a9b5..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_skyblue.css +++ /dev/null @@ -1,1236 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -.gridHoverStyle { - background-color: #ffe6b1 !important; - background-color: #ffebc1; - background-image: -webkit-linear-gradient(top, #ffe09d 0%, #ffeabb 100%); - background-image: -moz-linear-gradient(top, #ffe09d 0%, #ffeabb 100%); - background-image: -ms-linear-gradient(top, #ffe09d 0%, #ffeabb 100%); - background-image: linear-gradient(to top, #ffe09d 0%, #ffeabb 100%); - border-top-color: #ffc341; - border-bottom-color: #ffc341; -} -.gridSelection { - background-color: #ffe6b1 !important; - border-bottom-color: #ffc341; -} -.timelineSelection { - background-color: #ffe6b1 !important; - background-color: #ffebc1; - background-image: -webkit-linear-gradient(top, #ffe09d 0%, #ffeabb 100%); - background-image: -moz-linear-gradient(top, #ffe09d 0%, #ffeabb 100%); - background-image: -ms-linear-gradient(top, #ffe09d 0%, #ffeabb 100%); - background-image: linear-gradient(to top, #ffe09d 0%, #ffeabb 100%); - border-top-color: #ffc341; - border-bottom-color: #ffc341; -} -.timelineSelection .gantt_task_cell { - border-right-color: #ffce65; -} -/* - milestone -*/ -/* - links dnd -*/ -/* - task resizers -*/ -/*lightbox*/ -/* - Message -*/ -.dhx_cal_quick_info .dhx_cal_qi_title { - background: #ffffff; -} -.dhx_cal_qi_controls .dhx_qi_big_icon .dhx_menu_icon.icon_delete { - margin-top: 5px; -} -.gantt_container { - font-family: "Tahoma"; - font-size: 11px; - border: 1px solid #a4bed4; - position: relative; - white-space: nowrap; -} -.gantt_grid { - border-right: 1px solid #a4bed4; -} -.gantt_task_scroll { - overflow-x: scroll; -} -.gantt_task { - position: relative; -} -.gantt_task, -.gantt_grid { - overflow-x: hidden; - overflow-y: hidden; - display: inline-block; - vertical-align: top; -} -.gantt_grid_scale, -.gantt_task_scale { - color: #42464b; - border-bottom: 1px solid #a4bed4; -} -.gantt_grid_scale { - box-shadow: 0px 1px 1px #fff inset; - background-color: #dfedff; - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #e4f0ff), color-stop(50%, #dfedff), color-stop(100%, #d5e8ff)); - /* old webkit */ - background-image: -webkit-linear-gradient(top, #e4f0ff 0%, #dfedff 50%, #d5e8ff 100%); - background-image: -moz-linear-gradient(top, #e4f0ff 0%, #dfedff 60%, #d5e8ff 100%); - background-image: -ms-linear-gradient(top, #e4f0ff 0%, #dfedff 60%, #d5e8ff 100%); - background-image: -o-linear-gradient(top, #e4f0ff 0%, #dfedff 60%, #d5e8ff 100%); - background-position: 0px 1px; - background-repeat: repeat-x; -} -.gantt_task_scale { - box-shadow: 0px 1px 1px #fff inset; - background-color: #dfedff; - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #e4f0ff), color-stop(50%, #dfedff), color-stop(100%, #d5e8ff)); - /* old webkit */ - background-image: -webkit-linear-gradient(top, #e4f0ff 0%, #dfedff 50%, #d5e8ff 100%); - background-image: -moz-linear-gradient(top, #e4f0ff 0%, #dfedff 60%, #d5e8ff 100%); - background-image: -ms-linear-gradient(top, #e4f0ff 0%, #dfedff 60%, #d5e8ff 100%); - background-image: -o-linear-gradient(top, #e4f0ff 0%, #dfedff 60%, #d5e8ff 100%); - background-position: 0px 1px; - background-repeat: repeat-x; -} -.gantt_scale_line { - box-sizing: border-box; - -moz-box-sizing: border-box; - border-top: 1px solid #a4bed4; -} -.gantt_scale_line:first-child { - border-top: none; -} -.gantt_grid_head_cell { - display: inline-block; - vertical-align: top; - border-right: 1px solid #a4bed4; - text-align: center; - position: relative; - cursor: default; - height: 100%; - box-sizing: border-box; - -moz-box-sizing: border-box; - line-height: 25px; - -moz-user-select: -moz-none; - -webkit-user-select: none; - -user-select: none; -} -.gantt_scale_line { - clear: both; -} -.gantt_grid_data { - width: 100%; - overflow: hidden; -} -.gantt_row { - position: relative; - -webkit-user-select: none; - -moz-user-select: none; - -moz-user-select: -moz-none; -} -.gantt_add, -.gantt_grid_head_add { - width: 100%; - height: 100%; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NzZCMThBRUFCRTQ0MTFFMkFFMEFGMEFBMzJEN0RBRTIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NzZCMThBRUJCRTQ0MTFFMkFFMEFGMEFBMzJEN0RBRTIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NkIxOEFFOEJFNDQxMUUyQUUwQUYwQUEzMkQ3REFFMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NkIxOEFFOUJFNDQxMUUyQUUwQUYwQUEzMkQ3REFFMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PkVHygEAAAEpSURBVHjaYgzeGcyABfxnwA4Y0QVY/v79i1VlsUMxCr/3QC9WdTgN+P//P8Ohr4fAbDtuOwZc6lj+/PmDVeLfv39wTSA2LnU4DQC5AGYAiI1LHRNQ4j861pfSZ3j36x1YEwiD2CAxbGoZbRbZ/K/3qUcx9cPvDwzXv11n+PL3C5jPw8zDoMmlySDAKoCirnFLI8QLID/ufLOTARf48OcDw/Gfx1HE3EXcwa5j+f37N95AwgVAekB64QaATISB97/fM1z5dIXh85/PYD4vCy+DDp8OgyCrIIYBjFoTtDBSnYWyBYO9rj3DsbfHwHwrYSuGg5cPMpy4ewIzFoCmMKLjwzcOMwiwCMBjAcQGiWFTizchweRompDwuiBANoCgCxjFasQoys4AAQYARt4I/K036xQAAAAASUVORK5CYII=); - background-position: center center; - background-repeat: no-repeat; - cursor: pointer; - position: relative; - -moz-opacity: 0.3; - opacity: 0.3; -} -.gantt_grid_head_cell.gantt_grid_head_add { - -moz-opacity: 0.6; - opacity: 0.6; - top: 0; -} -.gantt_grid_head_cell.gantt_grid_head_add:hover { - -moz-opacity: 1; - opacity: 1; -} -.gantt_grid_data .gantt_row:hover, -.gantt_grid_data .gantt_row.odd:hover { - background-color: #ffe6b1 !important; - background-color: #ffebc1; - background-image: -webkit-linear-gradient(top, #ffe09d 0%, #ffeabb 100%); - background-image: -moz-linear-gradient(top, #ffe09d 0%, #ffeabb 100%); - background-image: -ms-linear-gradient(top, #ffe09d 0%, #ffeabb 100%); - background-image: linear-gradient(to top, #ffe09d 0%, #ffeabb 100%); - border-top-color: #ffc341; - border-bottom-color: #ffc341; -} -.gantt_grid_data .gantt_row:hover .gantt_add, -.gantt_grid_data .gantt_row.odd:hover .gantt_add { - -moz-opacity: 1; - opacity: 1; -} -.gantt_task_row, -.gantt_row { - border-bottom: 1px solid #ebebeb; -} -.gantt_row, -.gantt_task_row { - background-color: #ffffff; -} -.gantt_row.odd, -.gantt_task_row.odd { - background-color: #ffffff; -} -.gantt_row, -.gantt_cell, -.gantt_task_row, -.gantt_task_cell, -.gantt_grid_head_cell, -.gantt_scale_cell { - box-sizing: border-box; - -moz-box-sizing: border-box; -} -.gantt_grid_head_cell, -.gantt_scale_cell { - line-height: inherit; -} -.gantt_cell { - display: inline-block; - vertical-align: top; - border-right: 1px solid #ebebeb; - padding-left: 6px; - padding-right: 6px; - height: 100%; - overflow: hidden; - white-space: nowrap; -} -.gantt_grid_scale .gantt_last_cell, -.gantt_grid_data .gantt_last_cell, -.gantt_task_scale .gantt_last_cell, -.gantt_task_bg .gantt_last_cell { - border-right-width: 0px; -} -.gantt_task_bg { - overflow: hidden; -} -.gantt_scale_cell { - display: inline-block; - white-space: nowrap; - overflow: hidden; - border-right: 1px solid #a4bed4; - text-align: center; - height: 100%; -} -.gantt_task_cell { - display: inline-block; - height: 100%; - border-right: 1px solid #ebebeb; -} -.gantt_ver_scroll { - width: 0px; - background-color: transparent; - height: 1px; - overflow-x: hidden; - overflow-y: scroll; - display: none; - position: absolute; - right: 0px; -} -.gantt_ver_scroll > div { - width: 1px; - height: 1px; -} -.gantt_hor_scroll { - height: 0px; - background-color: transparent; - width: 100%; - clear: both; - overflow-x: scroll; - overflow-y: hidden; - display: none; -} -.gantt_hor_scroll > div { - width: 5000px; - height: 1px; -} -.gantt_tree_indent { - width: 15px; - height: 100%; - display: inline-block; -} -.gantt_tree_content, -.gantt_tree_icon { - vertical-align: top; -} -.gantt_tree_icon { - width: 28px; - height: 100%; - display: inline-block; - background-repeat: no-repeat; - background-position: center center; -} -.gantt_tree_content { - height: 100%; - display: inline-block; -} -.gantt_tree_icon.gantt_open { - background-image: url(data:image/gif;base64,R0lGODlhEgASAJEAAP///4SEhAAAAP///yH5BAUUAAMALAAAAAASABIAAAIqnI+py+0Powq01haA3iDgLWwek2mhNi6ZwLLdZ4owcL4kJ5OWJfX+DykAADs=); - width: 18px; - cursor: pointer; -} -.gantt_tree_icon.gantt_close { - background-image: url(data:image/gif;base64,R0lGODlhEgASAJEAAP///4SEhAAAAP///yH5BAUUAAMALAAAAAASABIAAAImnI+py+0Powq01haA3iBgvnlMBnafgKLmWK4LCYpvK0+WJeX6DhUAOw==); - width: 18px; - cursor: pointer; -} -.gantt_tree_icon.gantt_blank { - width: 18px; -} -.gantt_tree_icon.gantt_folder_open { - background-image: url(data:image/gif;base64,R0lGODlhEgASAMQfAPXMWPK9N/fipOzLbPrVaP/89frqwv3tuvvprfLES+7PdP7xyP7z0vPAQfvtyMuaIv/32/735OSqFv3de+7ReP7lmf7gh/nv0v/67unFXfb29vK/PenFSaGEPfLnyv///yH5BAEAAB8ALAAAAAASABIAAAWS4Cc+ZGk+YvqZRVtgGiag6sNBThlFWnTQqQcE4sqRFj/VashsYR6HZI0JWSAjDwQCOGIgERULg/EQzJRQsGVCYHTK51qYTQDkFPj4iA4AJHIUgQoGQA8EdX4NhHgKAxeFfQkJGwGLeI6Fkg2UlQ8Dn5hBCZuchKChIxKkGw05Ga8DHlwkqg2tJ1xBtDlKvTUkviEAOw==); -} -.gantt_tree_icon.gantt_folder_closed { - background-image: url(data:image/gif;base64,R0lGODlhEgASAMQfAPvjpP/24fPHVvnUdvzotdSiKv/23vvrw/LCS/C+RfnelvPMaf/88/nbi/rsyerYq/TLYv7y1v7wzeCsLO+8P86dJfvv0MuaIsydKPPOc+SqGKGEPe/AS+zVneWwLf///yH5BAEAAB8ALAAAAAASABIAAAWZ4CdeZGleYvpdA+O+zNUBqHoZOB4EceHUqVtuF+n9VCtdQCI5BC6FA3BkCEQkBALAACVMV9eDVhGJQGnIixigaAwiG6jie2G7BxDLpVJozG13EAICPxUeGRleQQMLgggJUhiHC3pBggKPFJETGZRAF5gJCRSaFxgTC55BCByioz+nEKojGgmtHBwPJAUCELo2J8FfSMTFxsUhADs=); -} -.gantt_tree_icon.gantt_file { - background-image: url(data:image/gif;base64,R0lGODlhEgASAMQVAPv7+2RkZPf39/r6+vj4+Pn5+fT09Pb29vX19fHx8fDw8Onp6fLy8u7u7uzs7PPz8+vr6+rq6uXl5ejo6O/v7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABUALAAAAAASABIAAAV4YCWOZGkGaKqaVSAMQCwLQnAOj6ErzUTXpQDgQDgcGJTFDzgSEp4HRCKytDUBMKzAoIAsJACrSCjTGhINR5hELg8ECEZifS3HCgQEgj62xwZPAnwtbgMDBQU0g21Yh4iIi3aGkzBihH52lgEEmDIEli0qoigspSYhADs=); -} -.gantt_grid_head_cell .gantt_sort { - position: absolute; - right: 5px; - top: 8px; - width: 7px; - height: 13px; - background-repeat: no-repeat; - background-position: center center; -} -.gantt_grid_head_cell .gantt_sort.gantt_asc { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR4nGNgQAKGxib/GbABkIS7b8B/DAUwCRiGK0CXwFBAb1DfP/U/LszwHwi2X7qFgUEArBtdAVwCBmAKMCSQFSDzAWXXaOHsXeqkAAAAAElFTkSuQmCC); -} -.gantt_grid_head_cell .gantt_sort.gantt_desc { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR42mNgQAL1/VP/M2ADIIntF2/9x1AAlrh0C47hCmA60DFYwX88gIFGwNDY5D8uDFbg7hvwHx2jmIBTAlkB0e4BAEjlaNtBWJPnAAAAAElFTkSuQmCC); -} -.gantt_inserted, -.gantt_updated { - font-weight: bold; -} -.gantt_deleted { - text-decoration: line-through; -} -.gantt_invalid { - background-color: FFE0E0; -} -.gantt_error { - color: red; -} -.dhtmlx_message_area { - position: fixed; - right: 5px; - width: 250px; - z-index: 1000; -} -.dhtmlx-info { - min-width: 120px; - padding: 4px 4px 4px 20px; - font-family: "Tahoma"; - z-index: 10000; - margin: 5px; - margin-bottom: 10px; - -webkit-transition: all .5s ease; - -moz-transition: all .5s ease; - -o-transition: all .5s ease; - transition: all .5s ease; -} -.dhtmlx-info.hidden { - height: 0px; - padding: 0px; - border-width: 0px; - margin: 0px; - overflow: hidden; -} -.dhtmlx_modal_box { - overflow: hidden; - display: inline-block; - min-width: 250px; - width: 250px; - text-align: center; - position: fixed; - z-index: 20000; - box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07); - font-family: "Tahoma"; - border-radius: 0; - border: 1px solid #a4bed4; - background: #ffffff; -} -.dhtmlx_popup_title { - border-top-left-radius: 0; - border-top-right-radius: 0; - border-width: 0px; -} -.dhtmlx_button, -.dhtmlx_popup_button { - border: 1px solid #a4bed4; - height: 24px; - line-height: 24px; - display: inline-block; - margin: 0 5px; - border-radius: 4px; - background-color: #f8f8f8; - background-image: -webkit-linear-gradient(top, #e6e6e6 0%, #ffffff 100%); - background-image: -moz-linear-gradient(top, #e6e6e6 0%, #ffffff 100%); - background-image: -ms-linear-gradient(top, #e6e6e6 0%, #ffffff 100%); - background-image: linear-gradient(to top, #e6e6e6 0%, #ffffff 100%); -} -.dhtmlx-info, -.dhtmlx_popup_button, -.dhtmlx_button { - user-select: none; - -webkit-user-select: none; - -moz-user-select: -moz-none; - cursor: pointer; -} -.dhtmlx_popup_text { - overflow: hidden; -} -.dhtmlx_popup_controls { - border-radius: 6px; - padding: 10px; -} -.dhtmlx_popup_button { - min-width: 100px; -} -div.dhx_modal_cover { - background-color: #000; - cursor: default; - filter: progid:DXImageTransform.Microsoft.Alpha(opacity=20); - opacity: 0.2; - position: fixed; - z-index: 19999; - left: 0px; - top: 0px; - width: 100%; - height: 100%; - border: none; - zoom: 1; -} -.dhtmlx-info img, -.dhtmlx_modal_box img { - float: left; - margin-right: 20px; -} -.dhtmlx-alert-error, -.dhtmlx-confirm-error { - border: 1px solid #ff0000; -} -/*Skin section*/ -.dhtmlx_button input, -.dhtmlx_popup_button div { - border-radius: 4px; - font-size: 15px; - -moz-box-sizing: content-box; - box-sizing: content-box; - padding: 0px; - margin: 0px; - vertical-align: top; -} -.dhtmlx_popup_title { - color: #fff; - text-shadow: 1px 1px #000; - height: 40px; - line-height: 40px; - font-size: 20px; -} -.dhtmlx_popup_text { - margin: 15px 15px 5px 15px; - font-size: 14px; - color: #000; - min-height: 30px; - border-radius: 0; -} -.dhtmlx-info, -.dhtmlx-error { - font-size: 14px; - color: #000; - box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07); - padding: 0px; - background-color: #FFF; - border-radius: 3px; - border: 1px solid #ffffff; -} -.dhtmlx-info div { - padding: 5px 10px 5px 10px; - background-color: #fff; - border-radius: 3px; - border: 1px solid #a4bed4; -} -.dhtmlx-error { - background-color: #d81b1b; - border: 1px solid #ff3c3c; - box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07); -} -.dhtmlx-error div { - background-color: #d81b1b; - border: 1px solid #940000; - color: #FFF; -} -.gantt_grid div, -.gantt_data_area div { - -ms-touch-action: none; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} -.gantt_data_area { - position: relative; - overflow-x: hidden; - overflow-y: hidden; - -moz-user-select: -moz-none; - -webkit-user-select: none; - -user-select: none; -} -.gantt_links_area { - position: absolute; - left: 0px; - top: 0px; -} -.gantt_task_content, -.gantt_task_progress, -.gantt_side_content { - line-height: inherit; - overflow: hidden; - height: 100%; -} -.gantt_task_content { - font-size: 12px; - color: #1e2022; - width: 100%; - position: absolute; - white-space: nowrap; - text-align: center; -} -.gantt_task_progress { - text-align: center; - z-index: 0; - background: #5aa0d3; - background-color: #82b7de; - background-image: -webkit-linear-gradient(top, #abcee8 0%, #5aa0d3 36%, #bfdaee 100%); - background-image: -moz-linear-gradient(top, #abcee8 0%, #5aa0d3 36%, #bfdaee 100%); - background-image: -ms-linear-gradient(top, #abcee8 0%, #5aa0d3 36%, #bfdaee 100%); - background-image: linear-gradient(to top, #abcee8 0%, #5aa0d3 36%, #bfdaee 100%); -} -.gantt_task_line { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - position: absolute; - -moz-box-sizing: border-box; - box-sizing: border-box; - background-color: #eff6fb; - border: 1px solid #3588c5; - -webkit-user-select: none; - -moz-user-select: none; - -moz-user-select: -moz-none; -} -.gantt_task_line.gantt_drag_move div { - cursor: move; -} -.gantt_side_content { - position: absolute; - white-space: nowrap; - color: #6e6e6e; - bottom: 7px; - font-size: 11px; -} -.gantt_side_content.gantt_left { - right: 100%; - padding-right: 15px; -} -.gantt_side_content.gantt_right { - left: 100%; - padding-left: 15px; -} -.gantt_side_content.gantt_link_crossing { - bottom: 6.75px; -} -.gantt_task_link .gantt_line_wrapper, -.gantt_link_arrow { - position: absolute; - cursor: pointer; -} -.gantt_line_wrapper div { - background-color: #4a8f43; -} -.gantt_task_link:hover .gantt_line_wrapper div { - box-shadow: 0 0 5px 0px #4a8f43; -} -.gantt_task_link div.gantt_link_arrow { - background-color: transparent; - border-style: solid; - width: 0px; - height: 0px; -} -.gantt_link_control { - position: absolute; - width: 13px; - top: 0px; -} -.gantt_link_control div { - display: none; - cursor: pointer; - box-sizing: border-box; - position: relative; - top: 50%; - margin-top: -7.5px; - vertical-align: middle; - border: 1px solid #929292; - -webkit-border-radius: 6.5px; - -moz-border-radius: 6.5px; - border-radius: 6.5px; - height: 13px; - width: 13px; - background-color: #f0f0f0; -} -.gantt_link_control div:hover { - background-color: #ffffff; -} -.gantt_link_control.task_left { - left: -13px; -} -.gantt_link_control.task_right { - right: -13px; -} -.gantt_task_line.gantt_selected .gantt_link_control div, -.gantt_task_line:hover .gantt_link_control div { - display: block; -} -.gantt_link_target .gantt_link_control div { - display: block; -} -.gantt_link_source, -.gantt_link_target { - box-shadow: 0px 0px 3px #0070fe; -} -.gantt_link_target.link_start_allow, -.gantt_link_target.link_finish_allow { - box-shadow: 0px 0px 3px #6eb867; -} -.gantt_link_target.link_start_deny, -.gantt_link_target.link_finish_deny { - box-shadow: 0px 0px 3px #e87e7b; -} -.link_start_allow .gantt_link_control.task_left div, -.link_finish_allow .gantt_link_control.task_right div { - background-color: #6eb867; - border-color: #4a8f43; -} -.link_start_deny .gantt_link_control.task_left div, -.link_finish_deny .gantt_link_control.task_right div { - background-color: #e87e7b; - border-color: #dd3e3a; -} -.gantt_link_arrow_right { - border-width: 4px 0 4px 8px; - border-color: transparent transparent transparent #4a8f43; - margin-top: -1px; -} -.gantt_link_arrow_left { - border-width: 4px 8px 4px 0; - margin-top: -1px; - border-color: transparent #4a8f43 transparent transparent; -} -.gantt_link_arrow_top { - border-width: 0 4px 8px 4px; - border-color: transparent transparent #4a8f43 transparent; -} -.gantt_link_arrow_down { - border-width: 4px 8px 0 4px; - border-color: #4a8f43 transparent transparent transparent; -} -.gantt_task_drag, -.gantt_task_progress_drag { - cursor: w-resize; - height: 100%; - display: none; - position: absolute; -} -.gantt_task_line.gantt_selected .gantt_task_progress_drag, -.gantt_task_line:hover .gantt_task_progress_drag, -.gantt_task_line.gantt_selected .gantt_task_drag, -.gantt_task_line:hover .gantt_task_drag { - display: block; -} -.gantt_task_drag { - width: 6px; - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAACCAYAAACUn8ZgAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDEyNDQ5RDdCRTQ5MTFFMjhBQzlGRDA2RDIyNDc5NzEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDEyNDQ5RDhCRTQ5MTFFMjhBQzlGRDA2RDIyNDc5NzEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowMTI0NDlENUJFNDkxMUUyOEFDOUZEMDZEMjI0Nzk3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowMTI0NDlENkJFNDkxMUUyOEFDOUZEMDZEMjI0Nzk3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pv8NECcAAAAaSURBVHjaYvz//z8DLsAEIsw6j/3HRgMEGAARnwqNiuFmdQAAAABJRU5ErkJggg==); - z-index: 1; - top: 0px; -} -.gantt_task_drag.task_left { - left: 0px; -} -.gantt_task_drag.task_right { - right: 0px; -} -.gantt_task_progress_drag { - height: 8px; - width: 8px; - bottom: -4px; - margin-left: -4px; - background-position: bottom; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDNGNzQ1MTZCQkRBMTFFMjlBMjRBRkU0RkNCMTUzNkUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDNGNzQ1MTdCQkRBMTFFMjlBMjRBRkU0RkNCMTUzNkUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0M0Y3NDUxNEJCREExMUUyOUEyNEFGRTRGQ0IxNTM2RSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0M0Y3NDUxNUJCREExMUUyOUEyNEFGRTRGQ0IxNTM2RSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PrBLI3EAAACISURBVHjafE07DkMhDAuftQdgYuCWbZ9a0WtwGJC4BgMbYmVGaZLpqWpryZFjOwrACSmlSLzCN1DwrLUik/TtM3yUUnDOiWMMZE3enTNF4gghRO89KKXkABGh9w6ttcPSHp1zsNaCvbcUjDHAHhVemg1rrVxprYWs2ZOMR84ZfoGfXuAP3gIMABorQUvC1invAAAAAElFTkSuQmCC); - background-repeat: no-repeat; - z-index: 2; -} -.gantt_link_tooltip { - box-shadow: 3px 3px 3px #888888; - background-color: #ffffff; - border-left: 1px dotted #cecece; - border-top: 1px dotted #cecece; - font-family: Tahoma; - font-size: 8pt; - color: #444444; - padding: 6px; - line-height: 20px; -} -.gantt_link_direction { - height: 0px; - border: 0px none #4a8f43; - border-bottom-style: dashed; - border-bottom-width: 2px; - transform-origin: 0% 0%; - -ms-transform-origin: 0% 0%; - -webkit-transform-origin: 0% 0%; - z-index: 2; - margin-left: 1px; - position: absolute; -} -.gantt_grid_data .gantt_row.gantt_selected, -.gantt_grid_data .gantt_row.odd.gantt_selected { - background-color: #ffe6b1 !important; - border-bottom-color: #ffc341; -} -.gantt_task_row.gantt_selected { - background-color: #ffe6b1 !important; - background-color: #ffebc1; - background-image: -webkit-linear-gradient(top, #ffe09d 0%, #ffeabb 100%); - background-image: -moz-linear-gradient(top, #ffe09d 0%, #ffeabb 100%); - background-image: -ms-linear-gradient(top, #ffe09d 0%, #ffeabb 100%); - background-image: linear-gradient(to top, #ffe09d 0%, #ffeabb 100%); - border-top-color: #ffc341; - border-bottom-color: #ffc341; -} -.gantt_task_row.gantt_selected .gantt_task_cell { - border-right-color: #ffb30e; -} -.gantt_task_row.gantt_selected .gantt_task_cell { - border-right-color: #ffce65; -} -.gantt_task_line.gantt_selected { - box-shadow: 0 0 5px #5aa0d3; -} -.gantt_task_line.gantt_project.gantt_selected { - box-shadow: 0 0 5px #9ab9f1; -} -.gantt_task_line.gantt_milestone { - visibility: hidden; - background-color: #db7dc5; - border: 0px solid #cd49ae; - box-sizing: content-box; - -moz-box-sizing: content-box; -} -.gantt_task_line.gantt_milestone div { - visibility: visible; -} -.gantt_task_line.gantt_milestone .gantt_task_content { - background: inherit; - border: inherit; - border-width: 1px; - border-radius: inherit; - box-sizing: border-box; - -moz-box-sizing: border-box; - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); -} -.dhx_unselectable, -.dhx_unselectable div { - -webkit-user-select: none; - -moz-user-select: none; - -moz-user-select: -moz-none; -} -.dhx_cal_light { - -webkit-tap-highlight-color: transparent; - background-color: #eff6fb; - border-radius: 0; - font-family: "Tahoma"; - font-size: 11px; - border: 1px solid #a4bed4; - color: #42464b; - position: absolute; - z-index: 10001; - width: 550px; - height: 250px; - box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07); -} -.dhx_cal_light_wide { - width: 650px; -} -.dhx_cal_light select { - font-family: "Tahoma"; - border: 1px solid #a4bed4; - font-size: 11px; - padding: 2px; - margin: 0px; -} -.dhx_cal_ltitle { - padding: 7px 10px; - overflow: hidden; - white-space: nowrap; - -webkit-border-top-left-radius: 0; - -webkit-border-bottom-left-radius: 0; - -webkit-border-top-right-radius: 0; - -webkit-border-bottom-right-radius: 0; - -moz-border-radius-topleft: 0; - -moz-border-radius-bottomleft: 0; - -moz-border-radius-topright: 0; - -moz-border-radius-bottomright: 0; - border-top-left-radius: 0; - border-bottom-left-radius: 0; - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} -.dhx_cal_ltitle span { - white-space: nowrap; -} -.dhx_cal_lsection { - color: #727272; - font-weight: bold; - padding: 12px 0px 5px 10px; -} -.dhx_cal_lsection .dhx_fullday { - float: right; - margin-right: 5px; - font-size: 12px; - font-weight: normal; - line-height: 20px; - vertical-align: top; - cursor: pointer; -} -.dhx_cal_lsection { - font-size: 13px; -} -.dhx_cal_ltext { - padding: 2px 10px; - overflow: hidden; -} -.dhx_cal_ltext textarea { - overflow: auto; - font-family: "Tahoma"; - font-size: 11px; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - border: 1px solid #a4bed4; - height: 100%; - width: 100%; - outline: none !important; - resize: none; -} -.dhx_time { - font-weight: bold; -} -.dhx_cal_light .dhx_title { - padding-left: 10px; -} -.dhx_cal_larea { - border: 1px solid #a4bed4; - border-left: none; - border-right: none; - background-color: #fff; - overflow: hidden; - height: 1px; -} -.dhx_btn_set { - margin: 10px 7px 5px 10px; - padding: 2px 25px 2px 10px; - float: left; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - border-width: 1px; - border-color: #a4bed4; - border-style: solid; - height: 26px; - color: #42464b; - background-color: #f8f8f8; - background-image: -webkit-linear-gradient(top, #e6e6e6 0%, #ffffff 100%); - background-image: -moz-linear-gradient(top, #e6e6e6 0%, #ffffff 100%); - background-image: -ms-linear-gradient(top, #e6e6e6 0%, #ffffff 100%); - background-image: linear-gradient(to top, #e6e6e6 0%, #ffffff 100%); - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - cursor: pointer; -} -.dhx_btn_set div { - float: left; - font-size: 13px; - height: 20px; - line-height: 20px; - background-repeat: no-repeat; - vertical-align: middle; -} -.dhx_save_btn { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QkE5Nzc4RENDMzAzMTFFMjk4QjNBODhDMUM4QUUwNEQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QkE5Nzc4RERDMzAzMTFFMjk4QjNBODhDMUM4QUUwNEQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCQTk3NzhEQUMzMDMxMUUyOThCM0E4OEMxQzhBRTA0RCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCQTk3NzhEQkMzMDMxMUUyOThCM0E4OEMxQzhBRTA0RCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pr5Ot2UAAAFoSURBVHjapFO7SgNRED0rxkjEELbcQksLBUMg4EfkG7YV/AFTpBAUfNQisVDQD7CQlBaWwoZ8gNEiFttmg3GTfbF6JtzFTUJYyIHhDnfOnJm5Dy2OYywDjQJnF5ex/dXDweENNtaAzT/jur46IY1D4McHvv3J+nZ7BGNrG436sSaU3ucHqtUqzP1sVcflMizLEl8EwjBEFEXwomwC5DInEeDGaDSC62cTIJc5iUAQBGJukE1A8YkVNYLv++h232WMRUYOuakRlOLTwzU8z1tYPZ/Po1QqJR0kAgQDWTEjwLaIWq0GwzDmJtm2jVarNSvAeeQQXVe6ME1Tgs1mMyXA2GAwQKFQmH8G/X4fjuOgWCxKkP40yMnlcukO1MNgAivoui5B+tMgh3H1DuQa66fnaLfbGA6HMgY7oNGfNnL+v0RN/cbnl9f46qSBSqUiM9J4ZQSvVgl0Oh1pf2d3D4/3d5q27Hf+FWAAc90EKSR5k78AAAAASUVORK5CYII=); - margin-top: 2px; - width: 21px; -} -.dhx_cancel_btn { - margin-top: 2px; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzU4NTQ3NUZDMzAzMTFFMkE0MjRGNTQzQjE0MTNDQkIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzU4NTQ3NjBDMzAzMTFFMkE0MjRGNTQzQjE0MTNDQkIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDNTg1NDc1REMzMDMxMUUyQTQyNEY1NDNCMTQxM0NCQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDNTg1NDc1RUMzMDMxMUUyQTQyNEY1NDNCMTQxM0NCQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PkVB3hoAAAEYSURBVHjapJM9CsJAEIUTFStbQRA8gKCNKSIIeohUVraC9oKiGBRsBDvBylbwEkJQCys9gJUgeIOAxDfwEpYNpsmDL7PZ+cn+TMwgCIw0yhgplZPH3bbVuRqYgiYogxe4ABc8wqD69RpbQR6MwQ04TDZoHc6LP/tvC2uw4Fi+Vgcmrct58W9iW4BaYAB80OGSQ8my7xz7jDsAT11Bn3alJYvUa1pp8VGBNu0uIVm2s9fiowJF8OWJ/0sWPRlX1At8eLqlhGRRhXEfvcCJtpeQLOpq8VGBLe04Ibmh+Ld6AY8HWOBVzUCVvio780z/LrxCtQ9EQ+5tBOZElRzeUmmqWCfKlyfAAkfw5vyb7xb9vlrATPs7/wQYAISgQGDaq6hUAAAAAElFTkSuQmCC); - width: 20px; -} -.dhx_delete_btn { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTA3M0M1MzJDMzAzMTFFMkE5ODZDRjhENzQ2MUZFNzkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTA3M0M1MzNDMzAzMTFFMkE5ODZDRjhENzQ2MUZFNzkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpFMDczQzUzMEMzMDMxMUUyQTk4NkNGOEQ3NDYxRkU3OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFMDczQzUzMUMzMDMxMUUyQTk4NkNGOEQ3NDYxRkU3OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pplu0sEAAAErSURBVHja3FOxboMwED0nIQNbJoaOZM0YyMhGqwz8BOQ3mm5I/AHwCayoGVlhZUSMHTIhsSCEhOtzawRIlZDY+qTTs893z6fzmVBKYQ12YhEEweB0HAf3tCxLUFUVXWSeiDGIzW/ynRE9HA7coihCBtd1AVn40TCO2X1ewbthGCBJEiiKAtvtFggh0HUdWJYFfd9zez6f3JckiS1EhEDmeZ623+9BlmWejCaAfWqahou0bQumab7MK9DP5zM9nU5c4Hg8ch4nF0XBOc9zuF6vg/pm3pw0TSdNDcPwp8QsG2LiOIY/BZagqqp1AmP8M4Gvuq5B1/XJqNq2zVnTNMBzjBsLEHxnHBrf91/Z/nPBpW+32+0hPuFODAt79wtbfiwQuLD4x6SCNfgWYAAfQYJFsOV+5AAAAABJRU5ErkJggg==); - margin-top: 2px; - width: 20px; -} -.dhx_cal_cover { - width: 100%; - height: 100%; - position: absolute; - z-index: 10000; - top: 0px; - left: 0px; - background-color: black; - opacity: 0.1; - filter: progid:DXImageTransform.Microsoft.Alpha(opacity=10); -} -.dhx_custom_button { - padding: 0px 3px 0px 3px; - font-family: "Tahoma"; - font-size: 11px; - font-weight: normal; - margin-right: 5px; - margin-top: 0px; - cursor: pointer; -} -.dhx_custom_button div { - cursor: pointer; - float: left; - height: 21px; - line-height: 21px; - vertical-align: middle; -} -.dhx_cal_light_wide { - width: 580px; - padding: 2px 4px; -} -.dhx_cal_light_wide .dhx_cal_larea { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - border: 1px solid #a4bed4; -} -.dhx_cal_light_wide .dhx_cal_lsection { - border: 0px; - float: left; - text-align: right; - width: 80px; - height: 20px; - padding: 5px 10px 0px 0px; -} -.dhx_cal_light_wide .dhx_wrap_section { - position: relative; - padding: 10px 0; - overflow: hidden; - border-bottom: 1px solid #ebebeb; -} -.dhx_cal_light_wide .dhx_section_time { - overflow: hidden; - padding-top: 2px !important; - padding-right: 0px; - height: 20px !important; -} -.dhx_cal_light_wide .dhx_cal_ltext { - padding-right: 0px; -} -.dhx_cal_light_wide .dhx_cal_larea { - padding: 0 10px; - width: 100%; -} -.dhx_cal_light_wide .dhx_section_time { - background: transparent; -} -.dhx_cal_light_wide .dhx_cal_checkbox label { - padding-left: 0px; -} -.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday { - float: none; - margin-right: 0px; - font-weight: bold; - cursor: pointer; -} -.dhx_cal_light_wide .dhx_custom_button { - position: absolute; - top: 0; - right: 0; - margin-top: 2px; -} -.dhx_cal_light_wide .dhx_repeat_right { - margin-right: 55px; -} -.dhx_cal_light_wide.dhx_cal_light_full { - width: 738px; -} -.dhx_cal_wide_checkbox input { - margin-top: 8px; - margin-left: 14px; -} -.dhx_cal_light input { - font-size: 11px; -} -.dhx_custom_button { - float: right; - height: 21px; - width: 90px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - -ms-border-radius: 4px; - -o-border-radius: 4px; - border-radius: 4px; -} -.dhx_section_time { - background-color: white; - white-space: nowrap; - padding: 2px 10px 5px; - padding-top: 2px !important; -} -.dhx_section_time .dhx_time_selects { - float: left; - height: 25px; -} -.dhx_section_time .dhx_time_selects select { - height: 23px; - padding: 2px; - border: 1px solid #a4bed4; -} -.dhx_gantt_duration { - width: 100px; - height: 23px; - float: left; - white-space: nowrap; - margin-left: 20px; - line-height: 23px; -} -.dhx_gantt_duration .dhx_gantt_duration_value, -.dhx_gantt_duration .dhx_gantt_duration_dec, -.dhx_gantt_duration .dhx_gantt_duration_inc { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - text-align: center; - vertical-align: top; - height: 100%; - border: 1px solid #a4bed4; -} -.dhx_gantt_duration .dhx_gantt_duration_value { - width: 40px; - padding: 3px 4px; - border-left-width: 0; - border-right-width: 0; -} -.dhx_gantt_duration .dhx_gantt_duration_dec, -.dhx_gantt_duration .dhx_gantt_duration_inc { - width: 20px; - padding: 1px; - padding-bottom: 3px; - background-color: #f8f8f8; - background-image: -webkit-linear-gradient(top, #e6e6e6 0%, #ffffff 100%); - background-image: -moz-linear-gradient(top, #e6e6e6 0%, #ffffff 100%); - background-image: -ms-linear-gradient(top, #e6e6e6 0%, #ffffff 100%); - background-image: linear-gradient(to top, #e6e6e6 0%, #ffffff 100%); -} -.dhx_gantt_duration .dhx_gantt_duration_dec { - -moz-border-top-left-radius: 4px; - -moz-border-bottom-left-radius: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; -} -.dhx_gantt_duration .dhx_gantt_duration_inc { - margin-right: 4px; - -moz-border-top-right-radius: 4px; - -moz-border-bottom-right-radius: 4px; - -webkit-border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; -} -/* Quick info */ -.dhx_cal_quick_info { - border: 1px solid #a4bed4; - border-radius: 0; - position: absolute; - z-index: 300; - box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07); - background-color: #ffffff; - width: 300px; - transition: left 0.5s ease, right 0.5s; - -moz-transition: left 0.5s ease, right 0.5s; - -webkit-transition: left 0.5s ease, right 0.5s; - -o-transition: left 0.5s ease, right 0.5s; -} -.dhx_no_animate { - transition: none; - -moz-transition: none; - -webkit-transition: none; - -o-transition: none; -} -.dhx_cal_quick_info.dhx_qi_left .dhx_qi_big_icon { - float: right; -} -.dhx_cal_qi_title { - -webkit-border-top-left-radius: 0; - -webkit-border-bottom-left-radius: 0; - -webkit-border-top-right-radius: 0; - -webkit-border-bottom-right-radius: 0; - -moz-border-radius-topleft: 0; - -moz-border-radius-bottomleft: 0; - -moz-border-radius-topright: 0; - -moz-border-radius-bottomright: 0; - border-top-left-radius: 0; - border-bottom-left-radius: 0; - border-top-right-radius: 0; - border-bottom-right-radius: 0; - padding: 5px 0px 8px 12px; - color: #1e2022; - box-shadow: 0px 1px 1px #fff inset; - background-color: #dfedff; - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #e4f0ff), color-stop(50%, #dfedff), color-stop(100%, #d5e8ff)); - /* old webkit */ - background-image: -webkit-linear-gradient(top, #e4f0ff 0%, #dfedff 50%, #d5e8ff 100%); - background-image: -moz-linear-gradient(top, #e4f0ff 0%, #dfedff 60%, #d5e8ff 100%); - background-image: -ms-linear-gradient(top, #e4f0ff 0%, #dfedff 60%, #d5e8ff 100%); - background-image: -o-linear-gradient(top, #e4f0ff 0%, #dfedff 60%, #d5e8ff 100%); - background-position: 0px 1px; - background-repeat: repeat-x; - border-bottom: 1px solid #a4bed4; -} -.dhx_cal_qi_tdate { - font-size: 14px; - font-weight: bold; -} -.dhx_cal_qi_tcontent { - font-size: 11px; -} -.dhx_cal_qi_content { - padding: 16px 8px; - font-size: 13px; - color: #1e2022; - overflow: hidden; -} -.dhx_cal_qi_controls { - -webkit-border-top-left-radius: 0; - -webkit-border-bottom-left-radius: 0; - -webkit-border-top-right-radius: 0; - -webkit-border-bottom-right-radius: 0; - -moz-border-radius-topleft: 0; - -moz-border-radius-bottomleft: 0; - -moz-border-radius-topright: 0; - -moz-border-radius-bottomright: 0; - border-top-left-radius: 0; - border-bottom-left-radius: 0; - border-top-right-radius: 0; - border-bottom-right-radius: 0; - padding-left: 7px; -} -.dhx_cal_qi_controls .dhx_menu_icon { - margin-top: 3px; - background-repeat: no-repeat; -} -.dhx_cal_qi_controls .dhx_menu_icon.icon_edit { - width: 20px; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH3QYFDhEuX3ujFgAAAFNJREFUOMvt0zEOACAIA0DksTyqn8XJTRTKZGJXyaWEKPKTCQAH4Ls37cItcDUzsxHNDLZNhCq7Gt1wh9ErV7EjyGAhyGLphlnsClWuS32rn0czAV+sNUIROnQoAAAAAElFTkSuQmCC); -} -.dhx_cal_qi_controls .dhx_menu_icon.icon_delete { - width: 20px; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTA3M0M1MzJDMzAzMTFFMkE5ODZDRjhENzQ2MUZFNzkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTA3M0M1MzNDMzAzMTFFMkE5ODZDRjhENzQ2MUZFNzkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpFMDczQzUzMEMzMDMxMUUyQTk4NkNGOEQ3NDYxRkU3OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFMDczQzUzMUMzMDMxMUUyQTk4NkNGOEQ3NDYxRkU3OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pplu0sEAAAErSURBVHja3FOxboMwED0nIQNbJoaOZM0YyMhGqwz8BOQ3mm5I/AHwCayoGVlhZUSMHTIhsSCEhOtzawRIlZDY+qTTs893z6fzmVBKYQ12YhEEweB0HAf3tCxLUFUVXWSeiDGIzW/ynRE9HA7coihCBtd1AVn40TCO2X1ewbthGCBJEiiKAtvtFggh0HUdWJYFfd9zez6f3JckiS1EhEDmeZ623+9BlmWejCaAfWqahou0bQumab7MK9DP5zM9nU5c4Hg8ch4nF0XBOc9zuF6vg/pm3pw0TSdNDcPwp8QsG2LiOIY/BZagqqp1AmP8M4Gvuq5B1/XJqNq2zVnTNMBzjBsLEHxnHBrf91/Z/nPBpW+32+0hPuFODAt79wtbfiwQuLD4x6SCNfgWYAAfQYJFsOV+5AAAAABJRU5ErkJggg==); -} -.dhx_qi_big_icon { - font-size: 13px; - border-radius: 4px; - color: #42464b; - background-color: #f8f8f8; - background-image: -webkit-linear-gradient(top, #e6e6e6 0%, #ffffff 100%); - background-image: -moz-linear-gradient(top, #e6e6e6 0%, #ffffff 100%); - background-image: -ms-linear-gradient(top, #e6e6e6 0%, #ffffff 100%); - background-image: linear-gradient(to top, #e6e6e6 0%, #ffffff 100%); - margin: 5px 9px 8px 0px; - min-width: 60px; - line-height: 26px; - vertical-align: middle; - padding: 0px 10px 0px 5px; - cursor: pointer; - border: 1px solid #a4bed4; -} -.dhx_cal_qi_controls div { - float: left; - height: 26px; - text-align: center; - line-height: 26px; -} -.gantt_tooltip { - box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07); - background-color: white; - border-left: 1px solid rgba(0, 0, 0, 0.07); - border-top: 1px solid rgba(0, 0, 0, 0.07); - font-family: "Tahoma"; - font-size: 8pt; - color: #1e2022; - padding: 10px; - position: absolute; - z-index: 500; -} -.gantt_noselect { - -moz-user-select: -moz-none; - -webkit-user-select: none; - -user-select: none; -} -.gantt_drag_marker { - position: absolute; - font-family: "Tahoma"; - font-size: 11px; -} -.gantt_drag_marker .gantt_tree_indent, -.gantt_drag_marker .gantt_tree_icon.gantt_blank, -.gantt_drag_marker .gantt_tree_icon.gantt_open, -.gantt_drag_marker .gantt_tree_icon.gantt_close { - display: none; -} -.gantt_drag_marker, -.gantt_drag_marker .gantt_row.odd { - background-color: #ffffff; -} -.gantt_drag_marker .gantt_row { - border-left: 1px solid #d2d2d2; - border-top: 1px solid #d2d2d2; -} -.gantt_drag_marker .gantt_cell { - border-color: #d2d2d2; -} -.gantt_row.gantt_over, -.gantt_task_row.gantt_over { - background-color: #0070fe; -} -.gantt_row.gantt_transparent .gantt_cell { - opacity: 0.7; -} -.gantt_task_row.gantt_transparent { - background-color: #e4f0ff; -} diff --git a/phpgwapi/js/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_terrace.css b/phpgwapi/js/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_terrace.css deleted file mode 100755 index bf40efe237..0000000000 --- a/phpgwapi/js/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_terrace.css +++ /dev/null @@ -1,1269 +0,0 @@ -/* -This software is allowed to use under GPL or you need to obtain Commercial or Enterprise License - to use it in non-GPL project. Please contact sales@dhtmlx.com for details -*/ -.gridHoverStyle { - background-color: #fff3a1; -} -.gridSelection { - background-color: #fff3a1; -} -.timelineSelection { - background-color: #fff3a1; -} -.gantt_grid_scale .gantt_grid_head_cell { - color: #a6a6a6; - border-top: none !important; - border-right: none !important; -} -.gantt_grid_data .gantt_cell { - border-right: none; - color: #454545; -} -/* - Tasks -*/ -.gantt_task_link .gantt_link_arrow_right { - border-width: 6px 6px 6px 6px; - margin-top: -3px; -} -.gantt_task_link .gantt_link_arrow_left { - border-width: 6px 6px 6px 6px; - margin-left: -6px; - margin-top: -3px; -} -.gantt_task_link .gantt_link_arrow_top { - border-width: 6px 6px 6px 6px; -} -.gantt_task_link .gantt_link_arrow_down { - border-width: 6px 6px 6px 6px; -} -.gantt_task_line .gantt_task_progress_drag { - bottom: -4px; - height: 16px; - margin-left: -8px; - width: 16px; -} -.chartHeaderBg { - background-color: #fff; -} -.gantt_task .gantt_task_scale .gantt_scale_cell { - color: #a6a6a6; - border-right: 1px solid #ebebeb; -} -/* - project highlight -*/ -.gantt_row.gantt_project, -.gantt_row.odd.gantt_project { - background-color: #edffef; -} -.gantt_task_row.gantt_project, -.gantt_task_row.odd.gantt_project { - background-color: #f5fff6; -} -.gantt_task_line.gantt_project { - background-color: #65c16f; - border: 1px solid #3c9445; -} -.gantt_task_line.gantt_project .gantt_task_progress { - background-color: #46ad51; -} -/* - milestone -*/ -/* - lightbox -*/ -.buttonBg { - background: #fff; -} -.dhx_cal_light .dhx_btn_set { - margin: 5px 10px; -} -.dhx_btn_set.dhx_cancel_btn_set { - background: #fff; - color: #454545; - border: 1px solid #cecece; -} -.dhx_btn_set.dhx_save_btn_set { - background: #3db9d3; - text-shadow: 0 -1px 0 #248a9f; - color: #fff; -} -.dhx_btn_set.dhx_delete_btn_set { - text-shadow: 0 -1px 0 #6f6f6f; - background: #ec8e00; - text-shadow: 0 -1px 0 #aa6600; - color: #fff; -} -.dhx_delete_btn { - margin-top: 2px; - width: 20px; -} -.dhx_cal_light_wide { - padding-left: 0 !important; - padding-right: 0 !important; -} -.dhx_cal_light_wide .dhx_cal_larea { - border-left: none !important; - border-right: none !important; -} -/* - Message -*/ -.dhtmlx_popup_button.dhtmlx_ok_button { - background: #3db9d3; - text-shadow: 0 -1px 0 #248a9f; - color: #fff; - font-weight: bold; - border-width: 0; -} -.dhtmlx_popup_button.dhtmlx_cancel_button { - font-weight: bold; - color: #454544; -} -/* - Quick info -*/ -.dhx_qi_big_icon.icon_edit { - color: #454545; - background: #fff; -} -.dhx_qi_big_icon.icon_delete { - text-shadow: 0 -1px 0 #aa6600; - background: #ec8e00; - color: #fff; - border-width: 0; -} -/*links dnd*/ -.gantt_container { - font-family: "Arial"; - font-size: 13px; - border: 1px solid #cecece; - position: relative; - white-space: nowrap; -} -.gantt_grid { - border-right: 1px solid #cecece; -} -.gantt_task_scroll { - overflow-x: scroll; -} -.gantt_task { - position: relative; -} -.gantt_task, -.gantt_grid { - overflow-x: hidden; - overflow-y: hidden; - display: inline-block; - vertical-align: top; -} -.gantt_grid_scale, -.gantt_task_scale { - color: #6b6b6b; - font-size: 12px; - border-bottom: 1px solid #cecece; -} -.gantt_grid_scale { - background-color: #fff; -} -.gantt_task_scale { - background-color: #fff; -} -.gantt_scale_line { - box-sizing: border-box; - -moz-box-sizing: border-box; - border-top: 1px solid #cecece; -} -.gantt_scale_line:first-child { - border-top: none; -} -.gantt_grid_head_cell { - display: inline-block; - vertical-align: top; - border-right: 1px solid #cecece; - text-align: center; - position: relative; - cursor: default; - height: 100%; - box-sizing: border-box; - -moz-box-sizing: border-box; - line-height: 33px; - -moz-user-select: -moz-none; - -webkit-user-select: none; - -user-select: none; -} -.gantt_scale_line { - clear: both; -} -.gantt_grid_data { - width: 100%; - overflow: hidden; -} -.gantt_row { - position: relative; - -webkit-user-select: none; - -moz-user-select: none; - -moz-user-select: -moz-none; -} -.gantt_add, -.gantt_grid_head_add { - width: 100%; - height: 100%; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTQ3MjMyMENDNkI0MTFFMjk4MTI5QTg3MDhFNDVDQTkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTQ3MjMyMERDNkI0MTFFMjk4MTI5QTg3MDhFNDVDQTkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1NDcyMzIwQUM2QjQxMUUyOTgxMjlBODcwOEU0NUNBOSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1NDcyMzIwQkM2QjQxMUUyOTgxMjlBODcwOEU0NUNBOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PshZT8UAAABbSURBVHjaYrTdeZmBEsCER+4wEP+H4sPkGGCDg020ARR7gb4GIAcYDKMDdPnDyAbYkGG5DVW9cIQMvUdBBAuUY4vDz8iAcZinA2zgCHqAYQMseAywJcYFAAEGAM+UFGuohFczAAAAAElFTkSuQmCC); - background-position: center center; - background-repeat: no-repeat; - cursor: pointer; - position: relative; - -moz-opacity: 0.3; - opacity: 0.3; -} -.gantt_grid_head_cell.gantt_grid_head_add { - -moz-opacity: 0.6; - opacity: 0.6; - top: 0; -} -.gantt_grid_head_cell.gantt_grid_head_add:hover { - -moz-opacity: 1; - opacity: 1; -} -.gantt_grid_data .gantt_row:hover, -.gantt_grid_data .gantt_row.odd:hover { - background-color: #fff3a1; -} -.gantt_grid_data .gantt_row:hover .gantt_add, -.gantt_grid_data .gantt_row.odd:hover .gantt_add { - -moz-opacity: 1; - opacity: 1; -} -.gantt_task_row, -.gantt_row { - border-bottom: 1px solid #ebebeb; -} -.gantt_row, -.gantt_task_row { - background-color: #ffffff; -} -.gantt_row.odd, -.gantt_task_row.odd { - background-color: #ffffff; -} -.gantt_row, -.gantt_cell, -.gantt_task_row, -.gantt_task_cell, -.gantt_grid_head_cell, -.gantt_scale_cell { - box-sizing: border-box; - -moz-box-sizing: border-box; -} -.gantt_grid_head_cell, -.gantt_scale_cell { - line-height: inherit; -} -.gantt_cell { - display: inline-block; - vertical-align: top; - border-right: 1px solid #ebebeb; - padding-left: 6px; - padding-right: 6px; - height: 100%; - overflow: hidden; - white-space: nowrap; - font-size: 13px; -} -.gantt_grid_scale .gantt_last_cell, -.gantt_grid_data .gantt_last_cell, -.gantt_task_scale .gantt_last_cell, -.gantt_task_bg .gantt_last_cell { - border-right-width: 0px; -} -.gantt_task_bg { - overflow: hidden; -} -.gantt_scale_cell { - display: inline-block; - white-space: nowrap; - overflow: hidden; - border-right: 1px solid #cecece; - text-align: center; - height: 100%; -} -.gantt_task_cell { - display: inline-block; - height: 100%; - border-right: 1px solid #ebebeb; -} -.gantt_ver_scroll { - width: 0px; - background-color: transparent; - height: 1px; - overflow-x: hidden; - overflow-y: scroll; - display: none; - position: absolute; - right: 0px; -} -.gantt_ver_scroll > div { - width: 1px; - height: 1px; -} -.gantt_hor_scroll { - height: 0px; - background-color: transparent; - width: 100%; - clear: both; - overflow-x: scroll; - overflow-y: hidden; - display: none; -} -.gantt_hor_scroll > div { - width: 5000px; - height: 1px; -} -.gantt_tree_indent { - width: 15px; - height: 100%; - display: inline-block; -} -.gantt_tree_content, -.gantt_tree_icon { - vertical-align: top; -} -.gantt_tree_icon { - width: 28px; - height: 100%; - display: inline-block; - background-repeat: no-repeat; - background-position: center center; -} -.gantt_tree_content { - height: 100%; - display: inline-block; -} -.gantt_tree_icon.gantt_open { - background-image: url(data:image/gif;base64,R0lGODlhEgASALMJAMrKyt3d3ejp6d7f3+/v75aWlvf39////wAAAP///wAAAAAAAAAAAAAAAAAAAAAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6M0I5RTczQjVDMDdBMTFFMTgxRjc4Mzk4M0Q3MjVFQzAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6M0I5RTczQjZDMDdBMTFFMTgxRjc4Mzk4M0Q3MjVFQzAiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozQjlFNzNCM0MwN0ExMUUxODFGNzgzOTgzRDcyNUVDMCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDozQjlFNzNCNEMwN0ExMUUxODFGNzgzOTgzRDcyNUVDMCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAEAAAkALAAAAAASABIAAARJMMlJq704661B+SAIXAVhnKhBFKSZnmuLImhslXPN3ibi+6pdBXc4IIpB2YkGE1IKAoL0ICUInJNCYMDtDgJYiScUGnHO6LQkAgA7); - width: 18px; - cursor: pointer; -} -.gantt_tree_icon.gantt_close { - background-image: url(data:image/gif;base64,R0lGODlhEgASALMJAMrKyt3d3ejp6d7f3+/v75aWlvf39wAAAP///////wAAAAAAAAAAAAAAAAAAAAAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzY0QzNGM0VDMDdBMTFFMUE3MDlCNUM2QjU1NDA5RjgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzY0QzNGM0ZDMDdBMTFFMUE3MDlCNUM2QjU1NDA5RjgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozNjRDM0YzQ0MwN0ExMUUxQTcwOUI1QzZCNTU0MDlGOCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDozNjRDM0YzREMwN0ExMUUxQTcwOUI1QzZCNTU0MDlGOCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAEAAAkALAAAAAASABIAAARDMMlJq704661B+SAIXAVhnKhBFKSZnmv7wqxVzmpd3Uff5zKEUAi0uV4xm4DAbBIEOkohMKhaB4HoxBMKjTjgsFgSAQA7); - width: 18px; - cursor: pointer; -} -.gantt_tree_icon.gantt_blank { - width: 18px; -} -.gantt_tree_icon.gantt_folder_open { - background-image: url(data:image/gif;base64,R0lGODlhEgASAJECAJeXl7Gvrf///wAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTdDRDM3QzVDMDZEMTFFMUJGMzhFMDhCN0RGRjBGQ0YiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTdDRDM3QzZDMDZEMTFFMUJGMzhFMDhCN0RGRjBGQ0YiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1N0NEMzdDM0MwNkQxMUUxQkYzOEUwOEI3REZGMEZDRiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMzdDNEMwNkQxMUUxQkYzOEUwOEI3REZGMEZDRiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAEAAAIALAAAAAASABIAAAIzlI+pywcPm3mhWgkCsjBOvVkimElG9ZlCBlXd+2XjjLKg5GqoeZXqvsOQXK/ijUZTKVUFADs=); -} -.gantt_tree_icon.gantt_folder_closed { - background-image: url(data:image/gif;base64,R0lGODlhEgASAJECAJeXl7Gvrf///wAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTAyMTU1RTNDMDZEMTFFMUJGNzZCRThBRkFCRjg4MTIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTAyMTU1RTRDMDZEMTFFMUJGNzZCRThBRkFCRjg4MTIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MDIxNTVFMUMwNkQxMUUxQkY3NkJFOEFGQUJGODgxMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1MDIxNTVFMkMwNkQxMUUxQkY3NkJFOEFGQUJGODgxMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAEAAAIALAAAAAASABIAAAIwlI+pywcPm3mhWgkCsjBOvVkimElG9ZlCuYIY6TYs+6bmHDO4igfdD3GNhheV0VQAADs=); -} -.gantt_tree_icon.gantt_file { - background-image: url(data:image/gif;base64,R0lGODlhEgASAJECAJeXl7Gvrf///wAAACH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NzkxQzI4RjZDMDZEMTFFMTgwRjhBQURDQzI3NDU3QUEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NzkxQzI4RjdDMDZEMTFFMTgwRjhBQURDQzI3NDU3QUEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3OTFDMjhGNEMwNkQxMUUxODBGOEFBRENDMjc0NTdBQSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3OTFDMjhGNUMwNkQxMUUxODBGOEFBRENDMjc0NTdBQSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAEAAAIALAAAAAASABIAAAIylI+pwN16QJiUQiFThRlJm3RRFYSlR5qXMKmXaMDuuMoyOi8n/e6xn8NMHETgh5RaKQsAOw==); -} -.gantt_grid_head_cell .gantt_sort { - position: absolute; - right: 5px; - top: 8px; - width: 7px; - height: 13px; - background-repeat: no-repeat; - background-position: center center; -} -.gantt_grid_head_cell .gantt_sort.gantt_asc { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR4nGNgQAKGxib/GbABkIS7b8B/DAUwCRiGK0CXwFBAb1DfP/U/LszwHwi2X7qFgUEArBtdAVwCBmAKMCSQFSDzAWXXaOHsXeqkAAAAAElFTkSuQmCC); -} -.gantt_grid_head_cell .gantt_sort.gantt_desc { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAANCAYAAABlyXS1AAAARUlEQVR42mNgQAL1/VP/M2ADIIntF2/9x1AAlrh0C47hCmA60DFYwX88gIFGwNDY5D8uDFbg7hvwHx2jmIBTAlkB0e4BAEjlaNtBWJPnAAAAAElFTkSuQmCC); -} -.gantt_inserted, -.gantt_updated { - font-weight: bold; -} -.gantt_deleted { - text-decoration: line-through; -} -.gantt_invalid { - background-color: FFE0E0; -} -.gantt_error { - color: red; -} -.dhtmlx_message_area { - position: fixed; - right: 5px; - width: 250px; - z-index: 1000; -} -.dhtmlx-info { - min-width: 120px; - padding: 4px 4px 4px 20px; - font-family: "Arial"; - z-index: 10000; - margin: 5px; - margin-bottom: 10px; - -webkit-transition: all .5s ease; - -moz-transition: all .5s ease; - -o-transition: all .5s ease; - transition: all .5s ease; -} -.dhtmlx-info.hidden { - height: 0px; - padding: 0px; - border-width: 0px; - margin: 0px; - overflow: hidden; -} -.dhtmlx_modal_box { - overflow: hidden; - display: inline-block; - min-width: 250px; - width: 250px; - text-align: center; - position: fixed; - z-index: 20000; - box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07); - font-family: "Arial"; - border-radius: 6px; - border: 1px solid #cecece; - background: #ffffff; -} -.dhtmlx_popup_title { - border-top-left-radius: 6px; - border-top-right-radius: 6px; - border-width: 0px; -} -.dhtmlx_button, -.dhtmlx_popup_button { - border: 1px solid #cecece; - height: 30px; - line-height: 30px; - display: inline-block; - margin: 0 5px; - border-radius: 4px; - background: #fff; -} -.dhtmlx-info, -.dhtmlx_popup_button, -.dhtmlx_button { - user-select: none; - -webkit-user-select: none; - -moz-user-select: -moz-none; - cursor: pointer; -} -.dhtmlx_popup_text { - overflow: hidden; -} -.dhtmlx_popup_controls { - border-radius: 6px; - padding: 10px; -} -.dhtmlx_popup_button { - min-width: 100px; -} -div.dhx_modal_cover { - background-color: #000; - cursor: default; - filter: progid:DXImageTransform.Microsoft.Alpha(opacity=20); - opacity: 0.2; - position: fixed; - z-index: 19999; - left: 0px; - top: 0px; - width: 100%; - height: 100%; - border: none; - zoom: 1; -} -.dhtmlx-info img, -.dhtmlx_modal_box img { - float: left; - margin-right: 20px; -} -.dhtmlx-alert-error, -.dhtmlx-confirm-error { - border: 1px solid #ff0000; -} -/*Skin section*/ -.dhtmlx_button input, -.dhtmlx_popup_button div { - border-radius: 4px; - font-size: 14px; - -moz-box-sizing: content-box; - box-sizing: content-box; - padding: 0px; - margin: 0px; - vertical-align: top; -} -.dhtmlx_popup_title { - color: #fff; - text-shadow: 1px 1px #000; - height: 40px; - line-height: 40px; - font-size: 20px; -} -.dhtmlx_popup_text { - margin: 15px 15px 5px 15px; - font-size: 14px; - color: #000; - min-height: 30px; - border-radius: 6px; -} -.dhtmlx-info, -.dhtmlx-error { - font-size: 14px; - color: #000; - box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07); - padding: 0px; - background-color: #FFF; - border-radius: 3px; - border: 1px solid #ffffff; -} -.dhtmlx-info div { - padding: 5px 10px 5px 10px; - background-color: #fff; - border-radius: 3px; - border: 1px solid #cecece; -} -.dhtmlx-error { - background-color: #d81b1b; - border: 1px solid #ff3c3c; - box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07); -} -.dhtmlx-error div { - background-color: #d81b1b; - border: 1px solid #940000; - color: #FFF; -} -.gantt_grid div, -.gantt_data_area div { - -ms-touch-action: none; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} -.gantt_data_area { - position: relative; - overflow-x: hidden; - overflow-y: hidden; - -moz-user-select: -moz-none; - -webkit-user-select: none; - -user-select: none; -} -.gantt_links_area { - position: absolute; - left: 0px; - top: 0px; -} -.gantt_task_content, -.gantt_task_progress, -.gantt_side_content { - line-height: inherit; - overflow: hidden; - height: 100%; -} -.gantt_task_content { - font-size: 12px; - color: #ffffff; - width: 100%; - position: absolute; - white-space: nowrap; - text-align: center; -} -.gantt_task_progress { - text-align: center; - z-index: 0; - background: #299cb4; -} -.gantt_task_line { - -webkit-border-radius: 2px; - -moz-border-radius: 2px; - border-radius: 2px; - position: absolute; - -moz-box-sizing: border-box; - box-sizing: border-box; - background-color: #3db9d3; - border: 1px solid #2898b0; - -webkit-user-select: none; - -moz-user-select: none; - -moz-user-select: -moz-none; -} -.gantt_task_line.gantt_drag_move div { - cursor: move; -} -.gantt_side_content { - position: absolute; - white-space: nowrap; - color: #6e6e6e; - bottom: 7px; - font-size: 11px; -} -.gantt_side_content.gantt_left { - right: 100%; - padding-right: 15px; -} -.gantt_side_content.gantt_right { - left: 100%; - padding-left: 15px; -} -.gantt_side_content.gantt_link_crossing { - bottom: 8.75px; -} -.gantt_task_link .gantt_line_wrapper, -.gantt_link_arrow { - position: absolute; - cursor: pointer; -} -.gantt_line_wrapper div { - background-color: #ffa011; -} -.gantt_task_link:hover .gantt_line_wrapper div { - box-shadow: 0 0 5px 0px #ffa011; -} -.gantt_task_link div.gantt_link_arrow { - background-color: transparent; - border-style: solid; - width: 0px; - height: 0px; -} -.gantt_link_control { - position: absolute; - width: 13px; - top: 0px; -} -.gantt_link_control div { - display: none; - cursor: pointer; - box-sizing: border-box; - position: relative; - top: 50%; - margin-top: -7.5px; - vertical-align: middle; - border: 1px solid #929292; - -webkit-border-radius: 6.5px; - -moz-border-radius: 6.5px; - border-radius: 6.5px; - height: 13px; - width: 13px; - background-color: #f0f0f0; -} -.gantt_link_control div:hover { - background-color: #ffffff; -} -.gantt_link_control.task_left { - left: -13px; -} -.gantt_link_control.task_right { - right: -13px; -} -.gantt_task_line.gantt_selected .gantt_link_control div, -.gantt_task_line:hover .gantt_link_control div { - display: block; -} -.gantt_link_target .gantt_link_control div { - display: block; -} -.gantt_link_source, -.gantt_link_target { - box-shadow: 0px 0px 3px #3db9d3; -} -.gantt_link_target.link_start_allow, -.gantt_link_target.link_finish_allow { - box-shadow: 0px 0px 3px #ffbf5e; -} -.gantt_link_target.link_start_deny, -.gantt_link_target.link_finish_deny { - box-shadow: 0px 0px 3px #e87e7b; -} -.link_start_allow .gantt_link_control.task_left div, -.link_finish_allow .gantt_link_control.task_right div { - background-color: #ffbf5e; - border-color: #ffa011; -} -.link_start_deny .gantt_link_control.task_left div, -.link_finish_deny .gantt_link_control.task_right div { - background-color: #e87e7b; - border-color: #dd3e3a; -} -.gantt_link_arrow_right { - border-width: 4px 0 4px 6px; - border-color: transparent transparent transparent #ffa011; - margin-top: -1px; -} -.gantt_link_arrow_left { - border-width: 4px 6px 4px 0; - margin-top: -1px; - border-color: transparent #ffa011 transparent transparent; -} -.gantt_link_arrow_top { - border-width: 0 4px 6px 4px; - border-color: transparent transparent #ffa011 transparent; -} -.gantt_link_arrow_down { - border-width: 4px 6px 0 4px; - border-color: #ffa011 transparent transparent transparent; -} -.gantt_task_drag, -.gantt_task_progress_drag { - cursor: w-resize; - height: 100%; - display: none; - position: absolute; -} -.gantt_task_line.gantt_selected .gantt_task_progress_drag, -.gantt_task_line:hover .gantt_task_progress_drag, -.gantt_task_line.gantt_selected .gantt_task_drag, -.gantt_task_line:hover .gantt_task_drag { - display: block; -} -.gantt_task_drag { - width: 6px; - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAACCAYAAAB7Xa1eAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QYDDjkw3UJvAwAAABRJREFUCNdj/P//PwM2wASl/6PTAKrrBf4+lD8LAAAAAElFTkSuQmCC); - z-index: 1; - top: 0px; -} -.gantt_task_drag.task_left { - left: 0px; -} -.gantt_task_drag.task_right { - right: 0px; -} -.gantt_task_progress_drag { - height: 8px; - width: 8px; - bottom: -4px; - margin-left: -4px; - background-position: bottom; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAYAAAB24g05AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MkY3Rjk0RUVDMkYzMTFFMkI1OThEQTA3ODU0OTkzMEEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MkY3Rjk0RUZDMkYzMTFFMkI1OThEQTA3ODU0OTkzMEEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyRjdGOTRFQ0MyRjMxMUUyQjU5OERBMDc4NTQ5OTMwQSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyRjdGOTRFREMyRjMxMUUyQjU5OERBMDc4NTQ5OTMwQSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PobPBzIAAADkSURBVHjaYpk2bRoDDsAExL1QdjEQ/8OmiAWHZk4gXqymqhQM4ty6fU8OSMUA8XdiDBAB4k0a6iqWRga6EKcwMQXduHlnL5DpB8Rv0J2JDFSA+JiOtgZcMwiA2CAxkBxUDVYDLEAKgIpV9XQ0MZwFEgPJAZnHoWpRDAgC4n2W5saiQKfjClQGkBxQDciL+6B6wAbkA/EqJwdrTkUFOQZCAKQGpBbIXA3SCzJggo+XK7OEuBgDsQCkFqgHrBfsBT5eHgZSAUwP2IBfv36TbABMDygdtK1Zv6UESLORaAbIhG6AAAMAKN8wE24DXWcAAAAASUVORK5CYII=); - background-repeat: no-repeat; - z-index: 2; -} -.gantt_link_tooltip { - box-shadow: 3px 3px 3px #888888; - background-color: #ffffff; - border-left: 1px dotted #cecece; - border-top: 1px dotted #cecece; - font-family: Tahoma; - font-size: 8pt; - color: #444444; - padding: 6px; - line-height: 20px; -} -.gantt_link_direction { - height: 0px; - border: 0px none #ffa011; - border-bottom-style: dashed; - border-bottom-width: 2px; - transform-origin: 0% 0%; - -ms-transform-origin: 0% 0%; - -webkit-transform-origin: 0% 0%; - z-index: 2; - margin-left: 1px; - position: absolute; -} -.gantt_grid_data .gantt_row.gantt_selected, -.gantt_grid_data .gantt_row.odd.gantt_selected { - background-color: #fff3a1; -} -.gantt_task_row.gantt_selected { - background-color: #fff3a1; -} -.gantt_task_row.gantt_selected .gantt_task_cell { - border-right-color: #ffec6e; -} -.gantt_task_line.gantt_selected { - box-shadow: 0 0 5px #299cb4; -} -.gantt_task_line.gantt_project.gantt_selected { - box-shadow: 0 0 5px #46ad51; -} -.gantt_task_line.gantt_milestone { - visibility: hidden; - background-color: #d33daf; - border: 0px solid #61164f; - box-sizing: content-box; - -moz-box-sizing: content-box; -} -.gantt_task_line.gantt_milestone div { - visibility: visible; -} -.gantt_task_line.gantt_milestone .gantt_task_content { - background: inherit; - border: inherit; - border-width: 1px; - border-radius: inherit; - box-sizing: border-box; - -moz-box-sizing: border-box; - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); -} -.dhx_unselectable, -.dhx_unselectable div { - -webkit-user-select: none; - -moz-user-select: none; - -moz-user-select: -moz-none; -} -.dhx_cal_light { - -webkit-tap-highlight-color: transparent; - background: #fff; - border-radius: 6px; - font-family: "Arial"; - font-size: 13px; - border: 1px solid #cecece; - color: #6b6b6b; - font-size: 12px; - position: absolute; - z-index: 10001; - width: 550px; - height: 250px; - box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07); -} -.dhx_cal_light_wide { - width: 650px; -} -.dhx_cal_light select { - font-family: "Arial"; - border: 1px solid #cecece; - font-size: 13px; - padding: 2px; - margin: 0px; -} -.dhx_cal_ltitle { - padding: 7px 10px; - overflow: hidden; - white-space: nowrap; - -webkit-border-top-left-radius: 6px; - -webkit-border-bottom-left-radius: 0; - -webkit-border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 0; - -moz-border-radius-topleft: 6px; - -moz-border-radius-bottomleft: 0; - -moz-border-radius-topright: 6px; - -moz-border-radius-bottomright: 0; - border-top-left-radius: 6px; - border-bottom-left-radius: 0; - border-top-right-radius: 6px; - border-bottom-right-radius: 0; -} -.dhx_cal_ltitle span { - white-space: nowrap; -} -.dhx_cal_lsection { - color: #727272; - font-weight: bold; - padding: 12px 0px 5px 10px; -} -.dhx_cal_lsection .dhx_fullday { - float: right; - margin-right: 5px; - font-size: 12px; - font-weight: normal; - line-height: 20px; - vertical-align: top; - cursor: pointer; -} -.dhx_cal_lsection { - font-size: 13px; -} -.dhx_cal_ltext { - padding: 2px 10px; - overflow: hidden; -} -.dhx_cal_ltext textarea { - overflow: auto; - font-family: "Arial"; - font-size: 13px; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - border: 1px solid #cecece; - height: 100%; - width: 100%; - outline: none !important; - resize: none; -} -.dhx_time { - font-weight: bold; -} -.dhx_cal_light .dhx_title { - padding-left: 10px; -} -.dhx_cal_larea { - border: 1px solid #cecece; - border-left: none; - border-right: none; - background-color: #fff; - overflow: hidden; - height: 1px; -} -.dhx_btn_set { - margin: 10px 7px 5px 10px; - padding: 5px 15px 5px 10px; - float: left; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - border-width: 0; - border-color: #cecece; - border-style: solid; - height: 32px; - font-weight: bold; - background: #fff; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - cursor: pointer; -} -.dhx_btn_set div { - float: left; - font-size: 13px; - height: 22px; - line-height: 22px; - background-repeat: no-repeat; - vertical-align: middle; -} -.dhx_save_btn { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTk1OUU5RDFDMzA0MTFFMkExMUZBQTdDNDAzOUE5RjMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTk1OUU5RDJDMzA0MTFFMkExMUZBQTdDNDAzOUE5RjMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxOTU5RTlDRkMzMDQxMUUyQTExRkFBN0M0MDM5QTlGMyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoxOTU5RTlEMEMzMDQxMUUyQTExRkFBN0M0MDM5QTlGMyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PjDroXYAAAEXSURBVHjaYvz//z8DJYCRUgPIAUxAbAnEHiAHMIBcQCwGaRYXF3e6evXqoffv39/dv38/CymaGSUkJBzv3LlzCsj///fv3wdAihkkIQnEvkAshU8zLy+v7a1bt06ANP/79+87kDIAy505cybq06dPr3p7ezuwGQLTfOPGjWP/ESAZLg8kPKBO+g01RBJNszWyZqC6uSgWgIg/f/4shxnS2dnZBjMEqNkSFGBImi8CKTYMA4BYCGjIczRDHC5dunQQSfN7IKWI4UUkjjdMMdCwnw8ePLjwHxV4Yw1gZA5Q47z/2EELzhhCE+ABGvIQWSeQvwcU38QaAML2wHj+C/X3MyAlijeB4ZBoBOIPQGxJKIVSnBsBAgwABddBclWfcZUAAAAASUVORK5CYII=); - margin-top: 2px; - width: 21px; -} -.dhx_cancel_btn { - margin-top: 2px; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDkzMDA3MzlDMzA0MTFFMjg2QTVFMzFEQzgwRkJERDYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDkzMDA3M0FDMzA0MTFFMjg2QTVFMzFEQzgwRkJERDYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowOTMwMDczN0MzMDQxMUUyODZBNUUzMURDODBGQkRENiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowOTMwMDczOEMzMDQxMUUyODZBNUUzMURDODBGQkRENiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmYuYOUAAAEdSURBVHjaYvz//z8DJYAFXWDlypU8QKoIiD2A2AwqfAqIdwBxX3h4+Bdk9YzILgBqtgdS84FYEYeF94E4EWjIQZgAE5LmQCB1AKoZZKMPEAtAMYh9GSp3AKjWD8UFQAEhIPshEIOc3wHENUBb/qJ57SyQMoJyPwKxElDNO1gYFEE17wMKVmIJlzNQzeegrjaA6qmBecEbSvfh0GwMxGeBhoPoemQ9MAO0kEIbl2YTqPAFKK2IbMB3AjabYIkRZmQD7kNpMyI0G0PpO8gGbIUFJj7NQDk2INWIrIcJKfBAKcwJqvkcDs0TgFgXGo19KCkRmpDWQdWDEk0NUoCBoq0FqhkE/IEWbKJKUmZEz43QzFSKIzN1481M5ACAAAMAlfl/lCwRpagAAAAASUVORK5CYII=); - width: 20px; -} -.dhx_delete_btn { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjFENzI3NUNDMzA0MTFFMjhBNjJGQTc3MUIyQzYzNEYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjFENzI3NURDMzA0MTFFMjhBNjJGQTc3MUIyQzYzNEYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyMUQ3Mjc1QUMzMDQxMUUyOEE2MkZBNzcxQjJDNjM0RiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyMUQ3Mjc1QkMzMDQxMUUyOEE2MkZBNzcxQjJDNjM0RiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmUD0gAAAABvSURBVHjaYvz//z8DIyMjAxYQicReji4J0ofKQNP8HwmgGQbXB8IsWGwDSSwDuioKjY9uBthVjFAXYHUGAQA2kYmBUoAUBpGk0LAwgBvwH+YX4mkwptgLowYMRgOITUyYKRFIN/wnDjQgJySAAAMApryKzL8wjfUAAAAASUVORK5CYII=); - margin-top: 2px; - width: 20px; -} -.dhx_cal_cover { - width: 100%; - height: 100%; - position: absolute; - z-index: 10000; - top: 0px; - left: 0px; - background-color: black; - opacity: 0.1; - filter: progid:DXImageTransform.Microsoft.Alpha(opacity=10); -} -.dhx_custom_button { - padding: 0px 3px 0px 3px; - font-family: "Arial"; - font-size: 13px; - font-weight: normal; - margin-right: 5px; - margin-top: 0px; - cursor: pointer; -} -.dhx_custom_button div { - cursor: pointer; - float: left; - height: 21px; - line-height: 21px; - vertical-align: middle; -} -.dhx_cal_light_wide { - width: 580px; - padding: 2px 4px; -} -.dhx_cal_light_wide .dhx_cal_larea { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - border: 1px solid #cecece; -} -.dhx_cal_light_wide .dhx_cal_lsection { - border: 0px; - float: left; - text-align: right; - width: 80px; - height: 20px; - padding: 5px 10px 0px 0px; -} -.dhx_cal_light_wide .dhx_wrap_section { - position: relative; - padding: 10px 0; - overflow: hidden; - border-bottom: 1px solid #ebebeb; -} -.dhx_cal_light_wide .dhx_section_time { - overflow: hidden; - padding-top: 2px !important; - padding-right: 0px; - height: 20px !important; -} -.dhx_cal_light_wide .dhx_cal_ltext { - padding-right: 0px; -} -.dhx_cal_light_wide .dhx_cal_larea { - padding: 0 10px; - width: 100%; -} -.dhx_cal_light_wide .dhx_section_time { - background: transparent; -} -.dhx_cal_light_wide .dhx_cal_checkbox label { - padding-left: 0px; -} -.dhx_cal_light_wide .dhx_cal_lsection .dhx_fullday { - float: none; - margin-right: 0px; - font-weight: bold; - cursor: pointer; -} -.dhx_cal_light_wide .dhx_custom_button { - position: absolute; - top: 0; - right: 0; - margin-top: 2px; -} -.dhx_cal_light_wide .dhx_repeat_right { - margin-right: 55px; -} -.dhx_cal_light_wide.dhx_cal_light_full { - width: 738px; -} -.dhx_cal_wide_checkbox input { - margin-top: 8px; - margin-left: 14px; -} -.dhx_cal_light input { - font-size: 13px; -} -.dhx_custom_button { - float: right; - height: 21px; - width: 90px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - -ms-border-radius: 4px; - -o-border-radius: 4px; - border-radius: 4px; -} -.dhx_section_time { - background-color: white; - white-space: nowrap; - padding: 2px 10px 5px; - padding-top: 2px !important; -} -.dhx_section_time .dhx_time_selects { - float: left; - height: 25px; -} -.dhx_section_time .dhx_time_selects select { - height: 23px; - padding: 2px; - border: 1px solid #cecece; -} -.dhx_gantt_duration { - width: 100px; - height: 23px; - float: left; - white-space: nowrap; - margin-left: 20px; - line-height: 23px; -} -.dhx_gantt_duration .dhx_gantt_duration_value, -.dhx_gantt_duration .dhx_gantt_duration_dec, -.dhx_gantt_duration .dhx_gantt_duration_inc { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - text-align: center; - vertical-align: top; - height: 100%; - border: 1px solid #cecece; -} -.dhx_gantt_duration .dhx_gantt_duration_value { - width: 40px; - padding: 3px 4px; - border-left-width: 0; - border-right-width: 0; -} -.dhx_gantt_duration .dhx_gantt_duration_dec, -.dhx_gantt_duration .dhx_gantt_duration_inc { - width: 20px; - padding: 1px; - padding-bottom: 3px; - background: #fff; -} -.dhx_gantt_duration .dhx_gantt_duration_dec { - -moz-border-top-left-radius: 4px; - -moz-border-bottom-left-radius: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; -} -.dhx_gantt_duration .dhx_gantt_duration_inc { - margin-right: 4px; - -moz-border-top-right-radius: 4px; - -moz-border-bottom-right-radius: 4px; - -webkit-border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; -} -/* Quick info */ -.dhx_cal_quick_info { - border: 1px solid #cecece; - border-radius: 6px; - position: absolute; - z-index: 300; - box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07); - background-color: #ffffff; - width: 300px; - transition: left 0.5s ease, right 0.5s; - -moz-transition: left 0.5s ease, right 0.5s; - -webkit-transition: left 0.5s ease, right 0.5s; - -o-transition: left 0.5s ease, right 0.5s; -} -.dhx_no_animate { - transition: none; - -moz-transition: none; - -webkit-transition: none; - -o-transition: none; -} -.dhx_cal_quick_info.dhx_qi_left .dhx_qi_big_icon { - float: right; -} -.dhx_cal_qi_title { - -webkit-border-top-left-radius: 6px; - -webkit-border-bottom-left-radius: 0; - -webkit-border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 0; - -moz-border-radius-topleft: 6px; - -moz-border-radius-bottomleft: 0; - -moz-border-radius-topright: 6px; - -moz-border-radius-bottomright: 0; - border-top-left-radius: 6px; - border-bottom-left-radius: 0; - border-top-right-radius: 6px; - border-bottom-right-radius: 0; - padding: 5px 0px 8px 12px; - color: #454545; - background-color: #fff; - border-bottom: 1px solid #cecece; -} -.dhx_cal_qi_tdate { - font-size: 14px; - font-weight: bold; -} -.dhx_cal_qi_tcontent { - font-size: 13px; -} -.dhx_cal_qi_content { - padding: 16px 8px; - font-size: 13px; - color: #454545; - overflow: hidden; -} -.dhx_cal_qi_controls { - -webkit-border-top-left-radius: 0; - -webkit-border-bottom-left-radius: 6px; - -webkit-border-top-right-radius: 0; - -webkit-border-bottom-right-radius: 6px; - -moz-border-radius-topleft: 0; - -moz-border-radius-bottomleft: 6px; - -moz-border-radius-topright: 0; - -moz-border-radius-bottomright: 6px; - border-top-left-radius: 0; - border-bottom-left-radius: 6px; - border-top-right-radius: 0; - border-bottom-right-radius: 6px; - padding-left: 7px; -} -.dhx_cal_qi_controls .dhx_menu_icon { - margin-top: 6px; - background-repeat: no-repeat; -} -.dhx_cal_qi_controls .dhx_menu_icon.icon_edit { - width: 20px; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH3QYFCjI5ZQj5bAAAAFNJREFUOMvt0zEOACAIA0DkwTymH8bJTRTKZGJXyaWEKPKTCQAH4Ls37cItcDUzsxHNDLZNhCq7Gt1wh9ErV7EjyGAhyGLphlnsClWuS32rn0czAV+vNGrM/LBtAAAAAElFTkSuQmCC); -} -.dhx_cal_qi_controls .dhx_menu_icon.icon_delete { - width: 20px; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjFENzI3NUNDMzA0MTFFMjhBNjJGQTc3MUIyQzYzNEYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjFENzI3NURDMzA0MTFFMjhBNjJGQTc3MUIyQzYzNEYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyMUQ3Mjc1QUMzMDQxMUUyOEE2MkZBNzcxQjJDNjM0RiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyMUQ3Mjc1QkMzMDQxMUUyOEE2MkZBNzcxQjJDNjM0RiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmUD0gAAAABvSURBVHjaYvz//z8DIyMjAxYQicReji4J0ofKQNP8HwmgGQbXB8IsWGwDSSwDuioKjY9uBthVjFAXYHUGAQA2kYmBUoAUBpGk0LAwgBvwH+YX4mkwptgLowYMRgOITUyYKRFIN/wnDjQgJySAAAMApryKzL8wjfUAAAAASUVORK5CYII=); -} -.dhx_qi_big_icon { - font-size: 13px; - border-radius: 4px; - font-weight: bold; - background: #fff; - margin: 5px 9px 8px 0px; - min-width: 60px; - line-height: 32px; - vertical-align: middle; - padding: 0px 10px 0px 5px; - cursor: pointer; - border: 1px solid #cecece; -} -.dhx_cal_qi_controls div { - float: left; - height: 32px; - text-align: center; - line-height: 32px; -} -.gantt_tooltip { - box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.07); - background-color: white; - border-left: 1px solid rgba(0, 0, 0, 0.07); - border-top: 1px solid rgba(0, 0, 0, 0.07); - font-family: "Arial"; - font-size: 8pt; - color: #454545; - padding: 10px; - position: absolute; - z-index: 500; -} -.gantt_noselect { - -moz-user-select: -moz-none; - -webkit-user-select: none; - -user-select: none; -} -.gantt_drag_marker { - position: absolute; - font-family: "Arial"; - font-size: 13px; -} -.gantt_drag_marker .gantt_tree_indent, -.gantt_drag_marker .gantt_tree_icon.gantt_blank, -.gantt_drag_marker .gantt_tree_icon.gantt_open, -.gantt_drag_marker .gantt_tree_icon.gantt_close { - display: none; -} -.gantt_drag_marker, -.gantt_drag_marker .gantt_row.odd { - background-color: #ffffff; -} -.gantt_drag_marker .gantt_row { - border-left: 1px solid #d2d2d2; - border-top: 1px solid #d2d2d2; -} -.gantt_drag_marker .gantt_cell { - border-color: #d2d2d2; -} -.gantt_row.gantt_over, -.gantt_task_row.gantt_over { - background-color: #0070fe; -} -.gantt_row.gantt_transparent .gantt_cell { - opacity: 0.7; -} -.gantt_task_row.gantt_transparent { - background-color: #f8fdfd; -} -.dhtmlx_popup_button.dhtmlx_delete_button { - background: #3db9d3; - text-shadow: 0 -1px 0 #248a9f; - color: #fff; - font-weight: bold; - border-width: 0; -} diff --git a/phpgwapi/js/dhtmlxGantt/index.html b/phpgwapi/js/dhtmlxGantt/index.html deleted file mode 100644 index 5196d426ca..0000000000 --- a/phpgwapi/js/dhtmlxGantt/index.html +++ /dev/null @@ -1,107 +0,0 @@ - - - Gantt Chart - - - - - - - - - - - -
DHTML Gantt sample
- -

Initialize object on page

-

You can place this JavaScript Gantt Chart anywhere on your web page, attaching it - to any div object.
-

- - - -<div style="width:950px;height:620px;position:absolute" id="GanttDiv"></div> -<script> - var gantt = new GanttChart(); - gantt.setImagePath("codebase/imgs/"); - gantt.setEditable(true); - ... - gantt.addProject(project_1); - ... - gantt.create("GanttDiv"); -</script> - - -
-
- - - - diff --git a/phpgwapi/js/dhtmlxGantt/license.txt b/phpgwapi/js/dhtmlxGantt/license.txt deleted file mode 100755 index 0a98ec0ff2..0000000000 --- a/phpgwapi/js/dhtmlxGantt/license.txt +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/readme.txt b/phpgwapi/js/dhtmlxGantt/readme.txt deleted file mode 100755 index a3720934f8..0000000000 --- a/phpgwapi/js/dhtmlxGantt/readme.txt +++ /dev/null @@ -1,18 +0,0 @@ -dhtmlxGantt v.2.1.1 Standard This software is covered by GPL license. You also can obtain Commercial or Enterprise license to use it in non-GPL project - please contact sales@dhtmlx.com. Usage without proper license is prohibited. (c) Dinamenta, UAB. - - - -Useful links -------------- - -- Online documentation - http://docs.dhtmlx.com/gantt/ - -- Downloadable documentation - CHM version - http://dhtmlx.com/x/download/regular/dhtmlxgantt_chm.zip - HTML version - http://dhtmlx.com/x/download/regular/dhtmlxgantt_docs_html.zip - -- Support forum - http://forum.dhtmlx.com/viewforum.php?f=15 \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/sources/dhtmlxcommon.js b/phpgwapi/js/dhtmlxGantt/sources/dhtmlxcommon.js deleted file mode 100644 index 7f68a0a702..0000000000 --- a/phpgwapi/js/dhtmlxGantt/sources/dhtmlxcommon.js +++ /dev/null @@ -1,938 +0,0 @@ -/* -Copyright DHTMLX LTD. http://www.dhtmlx.com -To use this component please contact sales@dhtmlx.com to obtain license -*/ - -dhtmlx=function(obj){ - for (var a in obj) dhtmlx[a]=obj[a]; - return dhtmlx; //simple singleton -}; -dhtmlx.extend_api=function(name,map,ext){ - var t = window[name]; - if (!t) return; //component not defined - window[name]=function(obj){ - if (obj && typeof obj == "object" && !obj.tagName){ - var that = t.apply(this,(map._init?map._init(obj):arguments)); - //global settings - for (var a in dhtmlx) - if (map[a]) this[map[a]](dhtmlx[a]); - //local settings - for (var a in obj){ - if (map[a]) this[map[a]](obj[a]); - else if (a.indexOf("on")==0){ - this.attachEvent(a,obj[a]); - } - } - } else - var that = t.apply(this,arguments); - if (map._patch) map._patch(this); - return that||this; - }; - window[name].prototype=t.prototype; - if (ext) - dhtmlXHeir(window[name].prototype,ext); -}; - -dhtmlxAjax={ - get:function(url,callback){ - var t=new dtmlXMLLoaderObject(true); - t.async=(arguments.length<3); - t.waitCall=callback; - t.loadXML(url) - return t; - }, - post:function(url,post,callback){ - var t=new dtmlXMLLoaderObject(true); - t.async=(arguments.length<4); - t.waitCall=callback; - t.loadXML(url,true,post) - return t; - }, - getSync:function(url){ - return this.get(url,null,true) - }, - postSync:function(url,post){ - return this.post(url,post,null,true); - } -} - -/** - * @desc: xmlLoader object - * @type: private - * @param: funcObject - xml parser function - * @param: object - jsControl object - * @param: async - sync/async mode (async by default) - * @param: rSeed - enable/disable random seed ( prevent IE caching) - * @topic: 0 - */ -function dtmlXMLLoaderObject(funcObject, dhtmlObject, async, rSeed){ - this.xmlDoc=""; - - if (typeof (async) != "undefined") - this.async=async; - else - this.async=true; - - this.onloadAction=funcObject||null; - this.mainObject=dhtmlObject||null; - this.waitCall=null; - this.rSeed=rSeed||false; - return this; -}; -/** - * @desc: xml loading handler - * @type: private - * @param: dtmlObject - xmlLoader object - * @topic: 0 - */ -dtmlXMLLoaderObject.prototype.waitLoadFunction=function(dhtmlObject){ - var once = true; - this.check=function (){ - if ((dhtmlObject)&&(dhtmlObject.onloadAction != null)){ - if ((!dhtmlObject.xmlDoc.readyState)||(dhtmlObject.xmlDoc.readyState == 4)){ - if (!once) - return; - - once=false; //IE 5 fix - if (typeof dhtmlObject.onloadAction == "function") - dhtmlObject.onloadAction(dhtmlObject.mainObject, null, null, null, dhtmlObject); - - if (dhtmlObject.waitCall){ - dhtmlObject.waitCall.call(this,dhtmlObject); - dhtmlObject.waitCall=null; - } - } - } - }; - return this.check; -}; - -/** - * @desc: return XML top node - * @param: tagName - top XML node tag name (not used in IE, required for Safari and Mozilla) - * @type: private - * @returns: top XML node - * @topic: 0 - */ -dtmlXMLLoaderObject.prototype.getXMLTopNode=function(tagName, oldObj){ - if (this.xmlDoc.responseXML){ - var temp = this.xmlDoc.responseXML.getElementsByTagName(tagName); - if(temp.length==0 && tagName.indexOf(":")!=-1) - var temp = this.xmlDoc.responseXML.getElementsByTagName((tagName.split(":"))[1]); - var z = temp[0]; - } else - var z = this.xmlDoc.documentElement; - - if (z){ - this._retry=false; - return z; - } - - if ((_isIE)&&(!this._retry)){ - //fall back to MS.XMLDOM - var xmlString = this.xmlDoc.responseText; - var oldObj = this.xmlDoc; - this._retry=true; - this.xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); - this.xmlDoc.async=false; - this.xmlDoc["loadXM"+"L"](xmlString); - - return this.getXMLTopNode(tagName, oldObj); - } - dhtmlxError.throwError("LoadXML", "Incorrect XML", [ - (oldObj||this.xmlDoc), - this.mainObject - ]); - - return document.createElement("DIV"); -}; - -/** - * @desc: load XML from string - * @type: private - * @param: xmlString - xml string - * @topic: 0 - */ -dtmlXMLLoaderObject.prototype.loadXMLString=function(xmlString){ - { - try{ - var parser = new DOMParser(); - this.xmlDoc=parser.parseFromString(xmlString, "text/xml"); - } - catch (e){ - this.xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); - this.xmlDoc.async=this.async; - this.xmlDoc["loadXM"+"L"](xmlString); - } - } - - this.onloadAction(this.mainObject, null, null, null, this); - - if (this.waitCall){ - this.waitCall(); - this.waitCall=null; - } -} -/** - * @desc: load XML - * @type: private - * @param: filePath - xml file path - * @param: postMode - send POST request - * @param: postVars - list of vars for post request - * @topic: 0 - */ -dtmlXMLLoaderObject.prototype.loadXML=function(filePath, postMode, postVars, rpc){ - if (this.rSeed) - filePath+=((filePath.indexOf("?") != -1) ? "&" : "?")+"a_dhx_rSeed="+(new Date()).valueOf(); - this.filePath=filePath; - - if ((!_isIE)&&(window.XMLHttpRequest)) - this.xmlDoc=new XMLHttpRequest(); - else { - if (document.implementation&&document.implementation.createDocument){ - this.xmlDoc=document.implementation.createDocument("", "", null); - this.xmlDoc.onload=new this.waitLoadFunction(this); - this.xmlDoc.load(filePath); - return; - } else - this.xmlDoc=new ActiveXObject("Microsoft.XMLHTTP"); - } - - if (this.async) - this.xmlDoc.onreadystatechange=new this.waitLoadFunction(this); - this.xmlDoc.open(postMode ? "POST" : "GET", filePath, this.async); - - if (rpc){ - this.xmlDoc.setRequestHeader("User-Agent", "dhtmlxRPC v0.1 ("+navigator.userAgent+")"); - this.xmlDoc.setRequestHeader("Content-type", "text/xml"); - } - - else if (postMode) - this.xmlDoc.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); - - this.xmlDoc.setRequestHeader("X-Requested-With","XMLHttpRequest"); - this.xmlDoc.send(null||postVars); - - if (!this.async) - (new this.waitLoadFunction(this))(); -}; -/** - * @desc: destructor, cleans used memory - * @type: private - * @topic: 0 - */ -dtmlXMLLoaderObject.prototype.destructor=function(){ - this._filterXPath = null; - this._getAllNamedChilds = null; - this._retry = null; - this.async = null; - this.rSeed = null; - this.filePath = null; - this.onloadAction = null; - this.mainObject = null; - this.xmlDoc = null; - this.doXPath = null; - this.doXPathOpera = null; - this.doXSLTransToObject = null; - this.doXSLTransToString = null; - this.loadXML = null; - this.loadXMLString = null; - // this.waitLoadFunction = null; - this.doSerialization = null; - this.xmlNodeToJSON = null; - this.getXMLTopNode = null; - this.setXSLParamValue = null; - return null; -} - -dtmlXMLLoaderObject.prototype.xmlNodeToJSON = function(node){ - var t={}; - for (var i=0; i-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){ //mimic FF behavior for Safari 3.1+ - _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]) -} - - -//multibrowser Xpath processor -dtmlXMLLoaderObject.prototype.doXPath=function(xpathExp, docObj, namespace, result_type){ - if (_isKHTML || (!_isIE && !window.XPathResult)) - return this.doXPathOpera(xpathExp, docObj); - - if (_isIE){ //IE - if (!docObj) - if (!this.xmlDoc.nodeName) - docObj=this.xmlDoc.responseXML - else - docObj=this.xmlDoc; - - if (!docObj) - dhtmlxError.throwError("LoadXML", "Incorrect XML", [ - (docObj||this.xmlDoc), - this.mainObject - ]); - - if (namespace != null) - docObj.setProperty("SelectionNamespaces", "xmlns:xsl='"+namespace+"'"); // - - if (result_type == 'single'){ - return docObj.selectSingleNode(xpathExp); - } - else { - return docObj.selectNodes(xpathExp)||new Array(0); - } - } else { //Mozilla - var nodeObj = docObj; - - if (!docObj){ - if (!this.xmlDoc.nodeName){ - docObj=this.xmlDoc.responseXML - } - else { - docObj=this.xmlDoc; - } - } - - if (!docObj) - dhtmlxError.throwError("LoadXML", "Incorrect XML", [ - (docObj||this.xmlDoc), - this.mainObject - ]); - - if (docObj.nodeName.indexOf("document") != -1){ - nodeObj=docObj; - } - else { - nodeObj=docObj; - docObj=docObj.ownerDocument; - } - var retType = XPathResult.ANY_TYPE; - - if (result_type == 'single') - retType=XPathResult.FIRST_ORDERED_NODE_TYPE - var rowsCol = new Array(); - var col = docObj.evaluate(xpathExp, nodeObj, function(pref){ - return namespace - }, retType, null); - - if (retType == XPathResult.FIRST_ORDERED_NODE_TYPE){ - return col.singleNodeValue; - } - var thisColMemb = col.iterateNext(); - - while (thisColMemb){ - rowsCol[rowsCol.length]=thisColMemb; - thisColMemb=col.iterateNext(); - } - return rowsCol; - } -} - -function _dhtmlxError(type, name, params){ - if (!this.catches) - this.catches=new Array(); - - return this; -} - -_dhtmlxError.prototype.catchError=function(type, func_name){ - this.catches[type]=func_name; -} -_dhtmlxError.prototype.throwError=function(type, name, params){ - if (this.catches[type]) - return this.catches[type](type, name, params); - - if (this.catches["ALL"]) - return this.catches["ALL"](type, name, params); - - alert("Error type: "+arguments[0]+"\nDescription: "+arguments[1]); - return null; -} - -window.dhtmlxError=new _dhtmlxError(); - - -//opera fake, while 9.0 not released -//multibrowser Xpath processor -dtmlXMLLoaderObject.prototype.doXPathOpera=function(xpathExp, docObj){ - //this is fake for Opera - var z = xpathExp.replace(/[\/]+/gi, "/").split('/'); - var obj = null; - var i = 1; - - if (!z.length) - return []; - - if (z[0] == ".") - obj=[docObj]; else if (z[0] == ""){ - obj=(this.xmlDoc.responseXML||this.xmlDoc).getElementsByTagName(z[i].replace(/\[[^\]]*\]/g, "")); - i++; - } else - return []; - - for (i; i < z.length; i++)obj=this._getAllNamedChilds(obj, z[i]); - - if (z[i-1].indexOf("[") != -1) - obj=this._filterXPath(obj, z[i-1]); - return obj; -} - -dtmlXMLLoaderObject.prototype._filterXPath=function(a, b){ - var c = new Array(); - var b = b.replace(/[^\[]*\[\@/g, "").replace(/[\[\]\@]*/g, ""); - - for (var i = 0; i < a.length; i++) - if (a[i].getAttribute(b)) - c[c.length]=a[i]; - - return c; -} -dtmlXMLLoaderObject.prototype._getAllNamedChilds=function(a, b){ - var c = new Array(); - - if (_isKHTML) - b=b.toUpperCase(); - - for (var i = 0; i < a.length; i++)for (var j = 0; j < a[i].childNodes.length; j++){ - if (_isKHTML){ - if (a[i].childNodes[j].tagName&&a[i].childNodes[j].tagName.toUpperCase() == b) - c[c.length]=a[i].childNodes[j]; - } - - else if (a[i].childNodes[j].tagName == b) - c[c.length]=a[i].childNodes[j]; - } - - return c; -} - -function dhtmlXHeir(a, b){ - for (var c in b) - if (typeof (b[c]) == "function") - a[c]=b[c]; - return a; -} - -function dhtmlxEvent(el, event, handler){ - if (el.addEventListener) - el.addEventListener(event, handler, false); - - else if (el.attachEvent) - el.attachEvent("on"+event, handler); -} - -//============= XSL Extension =================================== - -dtmlXMLLoaderObject.prototype.xslDoc=null; -dtmlXMLLoaderObject.prototype.setXSLParamValue=function(paramName, paramValue, xslDoc){ - if (!xslDoc) - xslDoc=this.xslDoc - - if (xslDoc.responseXML) - xslDoc=xslDoc.responseXML; - var item = - this.doXPath("/xsl:stylesheet/xsl:variable[@name='"+paramName+"']", xslDoc, - "http:/\/www.w3.org/1999/XSL/Transform", "single"); - - if (item != null) - item.firstChild.nodeValue=paramValue -} -dtmlXMLLoaderObject.prototype.doXSLTransToObject=function(xslDoc, xmlDoc){ - if (!xslDoc) - xslDoc=this.xslDoc; - - if (xslDoc.responseXML) - xslDoc=xslDoc.responseXML - - if (!xmlDoc) - xmlDoc=this.xmlDoc; - - if (xmlDoc.responseXML) - xmlDoc=xmlDoc.responseXML - - //MOzilla - if (!_isIE){ - if (!this.XSLProcessor){ - this.XSLProcessor=new XSLTProcessor(); - this.XSLProcessor.importStylesheet(xslDoc); - } - var result = this.XSLProcessor.transformToDocument(xmlDoc); - } else { - var result = new ActiveXObject("Msxml2.DOMDocument.3.0"); - try{ - xmlDoc.transformNodeToObject(xslDoc, result); - }catch(e){ - result = xmlDoc.transformNode(xslDoc); - } - } - return result; -} - -dtmlXMLLoaderObject.prototype.doXSLTransToString=function(xslDoc, xmlDoc){ - var res = this.doXSLTransToObject(xslDoc, xmlDoc); - if(typeof(res)=="string") - return res; - return this.doSerialization(res); -} - -dtmlXMLLoaderObject.prototype.doSerialization=function(xmlDoc){ - if (!xmlDoc) - xmlDoc=this.xmlDoc; - if (xmlDoc.responseXML) - xmlDoc=xmlDoc.responseXML - if (!_isIE){ - var xmlSerializer = new XMLSerializer(); - return xmlSerializer.serializeToString(xmlDoc); - } else - return xmlDoc.xml; -} - -/** -* @desc: -* @type: private -*/ -dhtmlxEventable=function(obj){ - 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)); //return ID (event name & event ID) - } - 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(':'); //get EventName and ID - this[list[0]].removeEvent(list[1]); //remove event - } - } - obj.detachAllEvents = function(){ - for (var name in this){ - if (name.indexOf("ev_")==0) - delete this[name]; - } - } -} diff --git a/phpgwapi/js/dhtmlxGantt/sources/dhtmlxgantt.js b/phpgwapi/js/dhtmlxGantt/sources/dhtmlxgantt.js deleted file mode 100644 index 82192e3441..0000000000 --- a/phpgwapi/js/dhtmlxGantt/sources/dhtmlxgantt.js +++ /dev/null @@ -1,6122 +0,0 @@ -//v.1.3 build 100805 - -/* -Copyright DHTMLX LTD. http://www.dhtmlx.com -To use this component please contact sales@dhtmlx.com to obtain license -*/ - -/*_TOPICS_ - * @0:Initialization - * @1:Add/delete - * @2:Lookup - * @3:Appearance - * @4:Private - * @5:Handlers - * @6:Load/Save data - * @7:Printing - */ - -/** - * @desc: GanttProjectInfo constructor - * @param: id - id of the project - * @param: name - name of the project - * @param: startDate - start date of the project (JavaScript Date object) - * @type: public - * @topic: 0 - */ -function GanttProjectInfo(id, name, startDate) -{ - this.Id = id; - this.Name = name; - this.StartDate = startDate; - this.ParentTasks = []; -} -/** - * @desc: Delete specified task - * @param: id - id of the task to be deleted - * @type: public - * @topic: 1 - * @edition: Professional - */ -GanttProjectInfo.prototype.deleteTask = function(id) -{ - var task = this.getTaskById(id); - if (task) { - if (!task.ParentTask) { - - for (var i = 0; i < this.ParentTasks.length; i++) { - - if (this.ParentTasks[i].Id == id) { - - if (this.ParentTasks[i].nextParentTask) { - - if (this.ParentTasks[i].previousParentTask) { - this.ParentTasks[i].previousParentTask.nextParentTask = this.ParentTasks[i].nextParentTask; - this.ParentTasks[i].nextParentTask.previousParentTask = this.ParentTasks[i].previousParentTask; - } else { - this.ParentTasks[i].nextParentTask.previousParentTask = null; - } - - } else { - if (this.ParentTasks[i].previousParentTask) { - this.ParentTasks[i].previousParentTask.nextParentTask = null; - } - } - - this.ParentTasks[i] = null; - this.ParentTasks.splice(i, 1); - break; - } - } - - } else - { - var parentTask = task.ParentTask; - for (var i = 0; i < parentTask.ChildTasks.length; i++) { - - if (parentTask.ChildTasks[i].Id == id) { - - if (parentTask.ChildTasks[i].nextChildTask) { - - if (parentTask.ChildTasks[i].previousChildTask) { - - parentTask.ChildTasks[i].previousChildTask.nextChildTask = parentTask.ChildTasks[i].nextChildTask; - parentTask.ChildTasks[i].nextChildTask.previousChildTask = parentTask.ChildTasks[i].previousChildTask; - - } else { - parentTask.ChildTasks[i].nextChildTask.previousChildTask = null; - } - - } else { - if (parentTask.ChildTasks[i].previousChildTask) { - parentTask.ChildTasks[i].previousChildTask.nextChildTask = null; - } - } - - parentTask.ChildTasks[i] = null; - parentTask.ChildTasks.splice(i, 1); - break; - } - - } - } - } -}; -/** - * @desc: Addition of the task in project - * @param: task - TaskInfo object - * @type: public - * @topic: 1 - */ -GanttProjectInfo.prototype.addTask = function(task) -{ - this.ParentTasks.push(task); - task.setProject(this); -}; -/** - * @desc: get object task by id - * @param: id - id of task - * @type: public - * @topic: 2 - */ -GanttProjectInfo.prototype.getTaskById = function(id) -{ - for (var j = 0; j < this.ParentTasks.length; j++) - { - var task = this.getTaskByIdInTree(this.ParentTasks[j], id); - if (task) return task; - } - return null; -}; -/** - * @desc: get object task by id - * @param: parentTask -(object) parent task - * @param: id - id of current task - * @type: private - * @topic: 2 - */ -GanttProjectInfo.prototype.getTaskByIdInTree = function(parentTask, id) -{ - if (parentTask.Id == id) - { - return parentTask; - - } else - { - for (var i = 0; i < parentTask.ChildTasks.length; i++) { - - if (parentTask.ChildTasks[i].Id == id) - { - return parentTask.ChildTasks[i]; - } - if (parentTask.ChildTasks[i].ChildTasks.length > 0) - { - if (parentTask.ChildTasks[i].ChildTasks.length > 0) - { - var cTask = this.getTaskByIdInTree(parentTask.ChildTasks[i], id); - if (cTask) return cTask; - } - } - } - - } - return null; -}; -/** - * @desc: GanttTaskInfo constructor - * @param: id - specifies id of task - * @param: name - specifies name of task - * @param: est - specifies Estimated Start Date of task - * @param: duration - specifies duration of task in hours - * @param: percentCompleted - specifies percentCompleted of task - * @param: predecessorTaskId - specifies predecessorTask Id of task - * @type: public - * @topic: 0 - */ -function GanttTaskInfo(id, name, est, duration, percentCompleted, predecessorTaskId) -{ - this.Id = id; - this.Name = name; - this.EST = est; - this.Duration = duration; - this.PercentCompleted = percentCompleted; - this.PredecessorTaskId = predecessorTaskId; - this.ChildTasks = []; - this.ChildPredTasks = []; - this.ParentTask = null; - this.PredecessorTask = null; - this.Project = null; - this.nextChildTask = null; - this.previousChildTask = null; - this.nextParentTask = null; - this.previousParentTask = null; -} -/** - * @desc: Addition of child task to the parent task - * @param: task - (object) task - * @type: public - * @topic: 1 - */ -GanttTaskInfo.prototype.addChildTask = function(task) -{ - this.ChildTasks.push(task); - task.ParentTask = this; -}; -/** - * @desc: set project to this task and its children - * @param: project - (object) project - * @type: private - * @topic: 0 - */ -GanttTaskInfo.prototype.setProject = function(project) -{ - this.Project = project; - for (var j = 0; j < this.ChildTasks.length; j++) - { - this.ChildTasks[j].setProject(project); - } -}; -/** - * @desc: private GanttTask constructor - * @param: taskInfo - (object)GanttTaskInfo - * @param: project - (object) GanttProject - * @param: chart - (object)GanttChart - * @type: public - * @topic: 0 - */ -function GanttTask(taskInfo, project, chart) -{ - this.isTask = true; - - this.Chart = chart; - this.Project = project; - this.TaskInfo = taskInfo; - - //control variables - this.checkMove = false; - this.checkResize = false; - this.moveChild = false; - - this.maxPosXMove = -1; - this.minPosXMove = -1; - this.maxWidthResize = -1; - this.minWidthResize = -1; - this.posX = 0; - this.posY = 0; - this.MouseX = 0; - this.taskItemWidth = 0; - this.isHide = false; - this._heightHideTasks = 0; - this._isOpen = true; - - this.descrTask = null; - this.cTaskItem = null; - this.cTaskNameItem = null; - - this.parentTask = null; - this.predTask = null; - this.childTask = []; - this.childPredTask = []; - this.nextChildTask = null; - this.previousChildTask = null; - this.nextParentTask = null; - this.previousParentTask = null; - -} -/** - * @desc: private GanttProject constructor - * @type: public - * @topic: 0 - */ -function GanttProject(Chart, projectInfo) -{ - this.isProject = true; - - this.nextProject = null; - this.previousProject = null; - this.arrTasks = []; - this.Project = projectInfo; - this.Chart = Chart; - this.percentCompleted = 0; - this.Duration = 0; - - this.descrProject = null; - this.projectItem = null; - this.projectNameItem = null; - - this.posY = 0; - this.posX = 0; -} -/** - * @desc: check width of projectNameItem - * @type: private - * @topic: 4 - */ -GanttProject.prototype.checkWidthProjectNameItem = function() -{ - if (this.projectNameItem.offsetWidth + this.projectNameItem.offsetLeft > this.Chart.maxWidthPanelNames) - { - var width = this.projectNameItem.offsetWidth + this.projectNameItem.offsetLeft - this.Chart.maxWidthPanelNames; - var countChar = Math.round(width / (this.projectNameItem.offsetWidth / this.projectNameItem.firstChild.length)); - var pName = this.Project.Name.substring(0, this.projectNameItem.firstChild.length - countChar - 3); - pName += "..."; - this.projectNameItem.innerHTML = pName; - } -}; -/** - * @desc: create GanttProject. - * @type: private - * @topic: 0 - */ -GanttProject.prototype.create = function() -{ - var containerTasks = this.Chart.oData.firstChild; - - this.posX = (this.Project.StartDate - this.Chart.startDate) / (60 * 60 * 1000) * this.Chart.hourInPixels; - - if (this.previousProject) - { - if (this.previousProject.arrTasks.length > 0) { - var lastChildTask = this.Chart.getLastChildTask(this.previousProject.arrTasks[this.previousProject.arrTasks.length - 1]); - this.posY = parseInt(lastChildTask.cTaskItem[0].style.top) + this.Chart.heightTaskItem + 11; - } else { - this.posY = parseInt(this.previousProject.projectItem[0].style.top) + this.Chart.heightTaskItem + 11; - } - } else { - this.posY = 6; - } - - if (this.Chart._showTreePanel) { - - var containerNames = this.Chart.panelNames.firstChild; - this.projectNameItem = this.createProjectNameItem(); - containerNames.appendChild(this.projectNameItem); - this.checkWidthProjectNameItem(); - - } - this.projectItem = [this.createProjectItem(),[]]; - containerTasks.appendChild(this.projectItem[0]); - - if (this.Chart.isShowDescProject) { - containerTasks.appendChild(this.createDescrProject()); - } - - this.addDayInPanelTime(); -}; -/** - * @desc: GanttChart constructor - * @type: public - * @topic: 0 - */ -function GanttChart() -{ - this.Error = new GanttError(); - this.dhtmlXMLSenderObject = new dhtmlXMLSenderObject(this); - - //settings - this.heightTaskItem = 12; - this.dayInPixels = 24; - this.hoursInDay = 8; - this._showTreePanel = true; - this._showTooltip = true; - this.isShowDescTask = false; - this.isShowDescProject = false; - this.isShowNewProject = true; - this.isEditable = false; - this.isShowConMenu = false; - this.correctError = false; - this.maxWidthPanelNames = 150; - this.minWorkLength = 8; - this.paramShowTask = []; - this.paramShowProject = []; - - this.savePath = null; - this.loadPath = null; - - //control variables - this.divTimeInfo = null; - this.divInfo = null; - - this.panelNames = null; - this.panelTime = null; - this.oData = null; - this.content = null; - this.panelErrors = null; - this.contextMenu = null; - - this.hourInPixelsWork = this.dayInPixels / this.hoursInDay; - this.hourInPixels = this.dayInPixels / 24; - this.countDays = 0; - this.startDate = null; - this.initialPos = 0; - - this.contentHeight = 0; - this.contentWidth = 0; - this._oDataHeight = 0; - - this.Project = []; - - this.arrProjects = []; - - this.xmlLoader = null; - - - this._isIE = false; - this._isFF = false; - this._isOpera = false; - - this._isMove = false; - this._isResize = false; - this._isError = false; - - this.imgs = "codebase/imgs/"; - this.stylePath = "codebase/dhtmlxgantt.css"; // used in simple printing method getPrintableHTML() - - this.shortMonthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; - this.monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; - this._useShortMonthNames = true; - - dhtmlxEventable(this); -} -/** - * @desc: set path to image directory - * @param: newPath - path to image directory, end with slash / - * @type: public - * @topic: 0 - * @before_init: 1 - */ -GanttChart.prototype.setImagePath = function(newPath) -{ - this.imgs = newPath; -}; -/** - * @desc: set path to styles file, default is "codebase/dhtmlxgantt.css"; used in simple printing method printToWindow() - * @param: newPath - path to styles file - * @type: public - * @topic: 0 - * @before_init: 1 - */ -GanttChart.prototype.setStylePath = function(newPath) -{ - this.stylePath = newPath; -}; -/** - * @desc: set url which is used to save chart data with saveData() method - * @param: newPath - url to server script. - * @type: public - * @topic: 6 - * @before_init: 1 - */ -GanttChart.prototype.setSavePath = function(newPath) -{ - this.savePath = newPath; -}; -/** - * @desc: set url which is used to load chart data with loadData() method - * @param: newPath - url to server script. - * @type: public - * @topic: 6 - * @before_init: 1 - */ -GanttChart.prototype.setLoadPath = function(newPath) -{ - this.loadPath = newPath; -}; -GanttChart.prototype.setCorrectError = function(isCorrectError) -{ - this.correctError = isCorrectError; -}; - -/** - * @desc: enable or disable inline task description (displayed right after the task bar), and configure the shown values - * @param: isShowDescTask - true/false show or hide - * @param: param - comma separated list of letters: n - Name, d - Duration, e - EST, p -Percent complete. For example value "n,e" will show task name and EST date. - * @type: public - * @topic: 3 - * @before_init: 1 - */ -GanttChart.prototype.showDescTask = function(isShowDescTask, param) -{ - this.isShowDescTask = isShowDescTask; - var arrValues = new Array(5); - - if (this.isShowDescTask) - { - if (param) { - var arrParam = param.split(","); - for (var i = 0; i < arrParam.length; i++) { - var k = this.getParamShowTask(arrParam[i]); - arrValues[k] = 1; - } - } else { - arrValues[this.getParamShowTask('')] = 1; - } - this.paramShowTask = this.getValueShowTask(arrValues); - } - -}; - -/** - * @desc: enable or disable inline project description (displayed right after the project bar), and configure the shown values - * @param: isShowDescProject - true/false show or hide - * @param: param - comma separated list of letters: n - Name, d - Duration, s - Start date, p -Percent complete. For example value "n,s" will show project name and start date. - * @type: public - * @topic: 3 - * @before_init: 1 - */ -GanttChart.prototype.showDescProject = function(isShowDescProject, param) -{ - this.isShowDescProject = isShowDescProject; - var arrValues = new Array(4); - - if (this.isShowDescProject) - { - if (param) { - var arrParam = param.split(","); - for (var i = 0; i < arrParam.length; i++) { - var k = this.getParamShowProject(arrParam[i]); - arrValues[k] = 1; - } - } else { - arrValues[this.getParamShowProject('')] = 1; - } - this.paramShowProject = this.getValueShowProject(arrValues); - } - -}; - -/** - * @desc: enable or disable context menu in tree. it can be used for a simple task manipulations. - * @param: show - true/false show or hide - * @type: public - * @topic: 3 - * @before_init: 1 - */ -GanttChart.prototype.showContextMenu = function(show) -{ - this.isShowConMenu = show; -}; - -/** - * @desc: set custom context menu for the tree. - * @param: menu - an instance of dhtmlxMenu. - * @type: public - * @topic: 3 - * @before_init: 1 - */ -GanttChart.prototype.setContextMenu = function(menu) -{ - this.showContextMenu(true); - this.contextMenu = menu; -}; - -/** - * @desc: show new project at startup. it is usefull if you have no project at all, and you need some start point. also menu is attached to this project item. - * @param: show - true/false show or hide - * @type: public - * @topic: 3 - * @before_init: 1 - */ -GanttChart.prototype.showNewProject = function(show) -{ - this.isShowNewProject = show; -}; - -GanttChart.prototype.getParamShowTask = function(param) -{ - switch (param) { - case 'n': - //name - return 0; - break; - case 'd': - //duration - return 1; - break; - case 'e': - //est - return 2; - break; - case 'p': - //percent complete - return 3; - break; - case 's-f': - //start-finish - return 4; - break; - default: - return 0; - break; - } -}; - -GanttChart.prototype.getParamShowProject = function(param) -{ - switch (param) { - case 'n': - //name - return 0; - break; - case 'd': - //duration - return 1; - break; - case 's': - //start date - return 2; - break; - case 'p': - //percent complete - return 3; - break; - default: - return 0; - break; - } -}; - -GanttChart.prototype.getValueShowTask = function(param) -{ - var arrValues = []; - for (var i = 0; i < param.length; i++) { - if (param[i]) - { - switch (i) { - case 0: - arrValues.push('Name'); - break; - case 1: - arrValues.push('Duration'); - break; - case 2: - arrValues.push('EST'); - break; - case 3: - arrValues.push('PercentComplete'); - break; - case 4: - arrValues.push('S-F'); - break; - default: - break; - } - } - } - return arrValues; -}; - -GanttChart.prototype.getValueShowProject = function(param) -{ - var arrValues = []; - for (var i = 0; i < param.length; i++) { - - if (param[i]) - { - switch (i) { - case 0: - arrValues.push('Name'); - break; - case 1: - arrValues.push('Duration'); - break; - case 2: - arrValues.push('StartDate'); - break; - case 3: - arrValues.push('PercentComplete'); - break; - - default: - break; - } - } - } - return arrValues; -}; - -/** - * @desc: make Gantt Chart editable by user - * @param: isEditable - (true/false) - * @type: public - * @topic: 0 - * @before_init: 1 - */ -GanttChart.prototype.setEditable = function(isEditable) -{ - this.isEditable = isEditable; -}; -//#__pro_feature:01102007{ -/** - * @desc: show left side tree panel - * @param: show - (true/false) - * @type: public - * @topic: 0 - * @before_init: 1 - * @edition: Professional - */ -GanttChart.prototype.showTreePanel = function(show) -{ - this._showTreePanel = show; -}; -/** - * @desc: show task & project tooltip - * @param: show - (true/false) - * @type: public - * @topic: 0 - * @before_init: 1 - */ -GanttChart.prototype.showTooltip = function(show) -{ - this._showTooltip = show; -}; -//#} -/** - * @desc: Get current project by id - * @param: id - id of current project - * @type: public - * @topic: 2 - */ -GanttChart.prototype.getProjectById = function(id) -{ - - for (var i = 0; i < this.arrProjects.length; i++) { - - if (this.arrProjects[i].Project.Id == id) - { - return this.arrProjects[i]; - } - } - return null; -}; -/** - * @desc: Get browser type - * @type: private - * @topic: 4 - */ -GanttChart.prototype.getBrowserType = function() -{ - - if (navigator.appName.indexOf('Explorer') != -1) - { - this._isIE = true; - - } else if (navigator.userAgent.indexOf('Mozilla') != -1) - { - this._isFF = true; - - } else if (navigator.userAgent.indexOf('Opera') != -1) - { - this._isOpera = true; - } -}; -/** - * @desc: Add new project - * @param: project - (object) GanttProjectInfo - * @type: public - * @topic: 0 - * @before_init: 1 - */ -GanttChart.prototype.addProject = function(projectInfo) -{ - this.Project.push(projectInfo); -}; -/** - * @desc: Removal of GanttTask - * @param: id - id of GanttTask - * @type: public - * @topic: 1 - */ -GanttProject.prototype.deleteTask = function(id) -{ - var task = this.getTaskById(id); - if (task) { - this.deleteChildTask(task); - } else { - this.Chart.Error.throwError("DATA_INSERT_ERROR", 30, [id]); - } -}; -/** - * @desc: Removal of GanttProject - * @param: id - id of project - * @type: public - * @topic: 1 - */ -GanttChart.prototype.deleteProject = function(id) -{ - var project = this.getProjectById(id); - - if (project) - { - if (project.arrTasks.length > 0) - { - while (project.arrTasks.length > 0) { - project.deleteChildTask(project.arrTasks[0]); - } - } - - if (project.nextProject)project.shiftNextProject(project, -23); - - for (var i = 0; i < this.Project.length; i++) { - - if (this.Project[i].Id == project.Project.Id) { - this.Project.splice(i, 1); - } - } - - - if ((project.previousProject) && - (project.nextProject)) - { - var previousProject = project.previousProject; - previousProject.nextProject = project.nextProject; - } - - if ((project.previousProject) && - !(project.nextProject)) - { - var previousProject = project.previousProject; - previousProject.nextProject = null; - - } - if (!(project.previousProject) && - (project.nextProject)) - { - var nextProject = project.nextProject; - nextProject.previousProject = null; - - } - - for (var i = 0; i < this.arrProjects.length; i++) { - - if (this.arrProjects[i].Project.Id == id) - { - this.arrProjects.splice(i, 1); - } - } - - project.projectItem[0].parentNode.removeChild(project.projectItem[0]); - - if (this.isShowDescProject) { - project.descrProject.parentNode.removeChild(project.descrProject); - } - - if (this._showTreePanel) { - project.projectNameItem.parentNode.removeChild(project.projectNameItem); - } - - this._oDataHeight -= 11 + this.heightTaskItem; - - if (this.Project.length == 0) - { - if (this.isShowNewProject) - { - var d = new Date(this.startDate); - var t = new Date(d.setDate(d.getDate() + 1)); - - var pi = new GanttProjectInfo(1, "New project", t); - this.Project.push(pi); - var project = new GanttProject(this, pi); - project.create(); - this.arrProjects.push(project); - this._oDataHeight += 11 + this.heightTaskItem; - } - } - - - } else { - this.Error.throwError("DATA_INSERT_ERROR", 31, [id]); - } -}; -/** - * @desc: Set name of project. - * @param: name - new name of Project. - * @type: public - * @topic: 0 - */ -GanttProject.prototype.setName = function(name) -{ - if ((name != "") && (name != null)) { - this.Project.Name = name; - if (this.Chart._showTreePanel) - { - this.projectNameItem.innerHTML = name; - this.projectNameItem.title = name; - this.checkWidthProjectNameItem(); - } - - if (this.Chart.isShowDescProject)this.descrProject.innerHTML = this.getDescStr(); - this.addDayInPanelTime(); - } -}; -/** - * @desc: Set Percent Completed of project - * @param: percentCompleted - percent completed of Project - * @type: public - * @topic: 0 - */ -GanttProject.prototype.setPercentCompleted = function(percentCompleted) -{ - percentCompleted = parseInt(percentCompleted); - if (isNaN(percentCompleted)) - { - this.Chart.Error.throwError("DATA_INSERT_ERROR", 6, null); - return false; - } - - if (percentCompleted > 100) - { - this.Chart.Error.throwError("DATA_INSERT_ERROR", 7, null); - return false; - - } else if (percentCompleted < 0) - { - this.Chart.Error.throwError("DATA_INSERT_ERROR", 8, null); - return false; - } - - if ((percentCompleted > 0) && (percentCompleted < 100) && (this.percentCompleted > 0) && (this.percentCompleted < 100)) - { - this.projectItem[0].firstChild.rows[0].cells[0].width = parseInt(percentCompleted) + "%"; - this.projectItem[0].firstChild.rows[0].cells[0].firstChild.style.width = (percentCompleted * this.Duration * this.Chart.hourInPixelsWork) / 100 + "px"; - this.projectItem[0].firstChild.rows[0].cells[1].width = (100 - parseInt(percentCompleted)) + "%"; - this.projectItem[0].firstChild.rows[0].cells[1].firstChild.style.width = ((100 - percentCompleted) * this.Duration * this.Chart.hourInPixelsWork) / 100 + "px"; - - } else if (((percentCompleted == 0) || (percentCompleted == 100)) && (this.percentCompleted > 0) && (this.percentCompleted < 100)) - { - if (percentCompleted == 0) - { - this.projectItem[0].firstChild.rows[0].cells[0].parentNode.removeChild(this.projectItem[0].firstChild.rows[0].cells[0]); - this.projectItem[0].firstChild.rows[0].cells[0].width = 100 + "%"; - this.projectItem[0].firstChild.rows[0].cells[0].firstChild.style.width = this.Duration * this.Chart.hourInPixelsWork + "px"; - - } else if (percentCompleted == 100) - { - this.projectItem[0].firstChild.rows[0].cells[1].parentNode.removeChild(this.projectItem[0].firstChild.rows[0].cells[1]); - this.projectItem[0].firstChild.rows[0].cells[0].width = 100 + "%"; - this.projectItem[0].firstChild.rows[0].cells[0].firstChild.style.width = this.Duration * this.Chart.hourInPixelsWork + "px"; - } - - } else if (((percentCompleted == 0) || (percentCompleted == 100)) && ((this.percentCompleted == 0) || (this.percentCompleted == 100))) - { - if ((percentCompleted == 0) && (this.percentCompleted == 100)) - { - this.projectItem[0].firstChild.rows[0].cells[0].firstChild.src = this.Chart.imgs + "progress_bg.png"; - - } else if ((percentCompleted == 100) && (this.percentCompleted == 0)) - { - this.projectItem[0].firstChild.rows[0].cells[0].firstChild.src = this.Chart.imgs + "parentnode_filled.png"; - } - - } else if (((percentCompleted > 0) || (percentCompleted < 100)) && ((this.percentCompleted == 0) || (this.percentCompleted == 100))) - { - this.projectItem[0].firstChild.rows[0].cells[0].parentNode.removeChild(this.projectItem[0].firstChild.rows[0].cells[0]); - - var cellprojectItem = document.createElement("TD"); - this.projectItem[0].firstChild.rows[0].appendChild(cellprojectItem); - cellprojectItem.width = percentCompleted + "%"; - - var imgPr = document.createElement("img"); - imgPr.style.width = (percentCompleted * this.Duration * this.Chart.hourInPixelsWork) / 100 + "px"; - imgPr.style.height = this.Chart.heightTaskItem + "px"; - cellprojectItem.appendChild(imgPr); - imgPr.src = this.Chart.imgs + "parentnode_filled.png"; - - - cellprojectItem = document.createElement("TD"); - this.projectItem[0].firstChild.rows[0].appendChild(cellprojectItem); - cellprojectItem.width = (100 - percentCompleted) + "%"; - imgPr = document.createElement("img"); - - imgPr.style.width = ((100 - percentCompleted) * this.Duration * this.Chart.hourInPixelsWork) / 100 + "px"; - imgPr.style.height = this.Chart.heightTaskItem + "px"; - cellprojectItem.appendChild(imgPr); - imgPr.src = this.Chart.imgs + "progress_bg.png"; - - } else if (this.percentCompleted == -1) - { - if (percentCompleted == 100) - { - this.projectItem[0].firstChild.rows[0].cells[0].firstChild.src = this.Chart.imgs + "parentnode_filled.png"; - - } else if (percentCompleted < 100 && percentCompleted > 0) - { - - this.projectItem[0].firstChild.rows[0].cells[0].parentNode.removeChild(this.projectItem[0].firstChild.rows[0].cells[0]); - - var cellprojectItem = document.createElement("TD"); - this.projectItem[0].firstChild.rows[0].appendChild(cellprojectItem); - cellprojectItem.width = percentCompleted + "%"; - - var imgPr = document.createElement("img"); - imgPr.style.width = (percentCompleted * this.Duration * this.Chart.hourInPixelsWork) / 100 + "px"; - imgPr.style.height = this.Chart.heightTaskItem + "px"; - cellprojectItem.appendChild(imgPr); - imgPr.src = this.Chart.imgs + "parentnode_filled.png"; - - cellprojectItem = document.createElement("TD"); - this.projectItem[0].firstChild.rows[0].appendChild(cellprojectItem); - cellprojectItem.width = (100 - percentCompleted) + "%"; - imgPr = document.createElement("img"); - - imgPr.style.width = ((100 - percentCompleted) * this.Duration * this.Chart.hourInPixelsWork) / 100 + "px"; - imgPr.style.height = this.Chart.heightTaskItem + "px"; - cellprojectItem.appendChild(imgPr); - imgPr.src = this.Chart.imgs + "progress_bg.png"; - } - - } - - this.percentCompleted = percentCompleted; - if (this.Chart.isShowDescProject)this.descrProject.innerHTML = this.getDescStr(); - return true; -}; -/** - * @desc: Removal of child GanttTask - * @param: task - (object)parent GanttTask - * @type: private - * @topic: 1 - */ -GanttProject.prototype.deleteChildTask = function(task) -{ - if (task) - { - if (task.cTaskItem[0].style.display == "none") { - this.Chart.openTree(task.parentTask); - } - //delete of connecting lines - if (task.childPredTask.length > 0) { - for (var i = 0; i < task.childPredTask.length; i++) - { - for (var t = 0; t < task.childPredTask[i].cTaskItem[1].length; t++) { - task.childPredTask[i].cTaskItem[1][t].parentNode.removeChild(task.childPredTask[i].cTaskItem[1][t]); - } - task.childPredTask[i].cTaskItem[1] = []; - task.childPredTask[i].predTask = null; - } - } - - //delete child task - if (task.childTask.length > 0) { - while (task.childTask.length > 0) { - this.deleteChildTask(task.childTask[0]); - } - } - - //shift tasks - if (task.cTaskItem[0].style.display != "none") task.shiftCurrentTasks(task, -23); - - //delete object task - this.Project.deleteTask(task.TaskInfo.Id); - - //delete div and connecting lines from oData - if (task.cTaskItem[0]) { - task.cTaskItem[0].parentNode.removeChild(task.cTaskItem[0]); - } - - if (this.Chart.isShowDescTask) { - task.descrTask.parentNode.removeChild(task.descrTask); - } - - if (task.cTaskItem[1].length > 0) { - for (var j = 0; j < task.cTaskItem[1].length; j++) { - task.cTaskItem[1][j].parentNode.removeChild(task.cTaskItem[1][j]); - } - } - - //delete div and connecting lines from panelName - if (task.cTaskNameItem[0]) { - task.cTaskNameItem[0].parentNode.removeChild(task.cTaskNameItem[0]); - } - - if (task.cTaskNameItem[1]) { - for (var j = 0; j < task.cTaskNameItem[1].length; j++) { - task.cTaskNameItem[1][j].parentNode.removeChild(task.cTaskNameItem[1][j]); - } - } - - if (task.cTaskNameItem[2]) { - task.cTaskNameItem[2].parentNode.removeChild(task.cTaskNameItem[2]); - } - - //delete object task - if (task.parentTask) - { - if (task.previousChildTask) { - if (task.nextChildTask) { - task.previousChildTask.nextChildTask = task.nextChildTask; - } else { - task.previousChildTask.nextChildTask = null; - } - - } - - var parentTask = task.parentTask; - for (var i = 0; i < parentTask.childTask.length; i++) - { - if (parentTask.childTask[i].TaskInfo.Id == task.TaskInfo.Id) { - parentTask.childTask[i] = null; - parentTask.childTask.splice(i, 1); - break; - } - } - if (parentTask.childTask.length == 0) { - if (parentTask.cTaskNameItem[2]) { - parentTask.cTaskNameItem[2].parentNode.removeChild(parentTask.cTaskNameItem[2]); - parentTask.cTaskNameItem[2] = null; - } - } - } else - { - if (task.previousParentTask) - { - if (task.nextParentTask) { - task.previousParentTask.nextParentTask = task.nextParentTask; - } else { - task.previousParentTask.nextParentTask = null; - } - - } - - var project = task.Project; - for (var i = 0; i < project.arrTasks.length; i++) { - if (project.arrTasks[i].TaskInfo.Id == task.TaskInfo.Id) { - project.arrTasks.splice(i, 1); - } - } - - } - - if (task.predTask) { - var predTask = task.predTask; - for (var i = 0; i < predTask.childPredTask.length; i++) { - - if (predTask.childPredTask[i].TaskInfo.Id == task.TaskInfo.Id) { - predTask.childPredTask[i] = null; - predTask.childPredTask.splice(i, 1); - } - - } - - } - if (task.Project.arrTasks.length != 0) { - task.Project.shiftProjectItem(); - } - else { - task.Project.projectItem[0].style.display = "none"; - if (this.Chart.isShowDescProject) this.hideDescrProject(); - } - this.Chart._oDataHeight -= 11 + this.Chart.heightTaskItem; - } - -}; -/** - * @desc: Insert the task in the project and returns it - * @param: id - Specifies id of task - * @param: name - Specifies name of task - * @param: EST - Specifies est of task - * @param: Duration - Specifies duration of task - * @param: PercentCompleted - Specifies percentCompleted of task - * @param: predecessorTaskId - Specifies predecessorTask Id of task - * @type: public - * @topic: 1 - */ -GanttProject.prototype.insertTask = function(id, name, EST, Duration, PercentCompleted, predecessorTaskId, parentTaskId) -{ - var task = null; - var _task = null; - - if (this.Project.getTaskById(id)) { - this.Chart.Error.throwError("DATA_INSERT_ERROR", 22, [id]); - return false; - } - - if ((!Duration) || (Duration < this.Chart.minWorkLength)) { - Duration = this.Chart.minWorkLength; - } - if ((!name) || (name == "")) { - name = id; - } - if ((!PercentCompleted) || (PercentCompleted == "")) { - PercentCompleted = 0; - - } else { - PercentCompleted = parseInt(PercentCompleted); - - if (PercentCompleted < 0 || PercentCompleted > 100) { - this.Chart.Error.throwError("DATA_INSERT_ERROR", 35, null); - return false; - } - } - - var sortRequired = false; - - if ((parentTaskId) && (parentTaskId != "")) { - var parentTask = this.Project.getTaskById(parentTaskId); - if (!parentTask) { - this.Chart.Error.throwError("DATA_INSERT_ERROR", 21, [parentTaskId]); - return false; - } - - EST = EST || parentTask.EST; - if (EST < parentTask.EST) { - this.Chart.Error.throwError("DATA_INSERT_ERROR", 20, [id,parentTaskId]); - return false; - } - - task = new GanttTaskInfo(id, name, EST, Duration, PercentCompleted, predecessorTaskId); - - if (!this.Chart.checkPosParentTask(parentTask, task)) { - this.Chart.Error.throwError("DATA_INSERT_ERROR", 19, [parentTaskId,id]); - return false; - } - task.ParentTask = parentTask; - - var _parentTask = this.getTaskById(parentTask.Id); - - var isHide = false; - if (_parentTask.cTaskItem[0].style.display == "none") { - isHide = true; - } else if (_parentTask.cTaskNameItem[2]) { - if (!_parentTask._isOpen) { - isHide = true; - } - } - - if (isHide) { - if (_parentTask.childTask.length == 0) { - this.Chart.openTree(_parentTask.parentTask); - } else { - this.Chart.openTree(_parentTask); - } - } - - if (predecessorTaskId != "") - { - var predTask = this.Project.getTaskById(predecessorTaskId); - if (!predTask) { - this.Chart.Error.throwError("DATA_INSERT_ERROR", 27, [predecessorTaskId]); - return false; - } - - if (predTask.ParentTask) { - if (predTask.ParentTask.Id != task.ParentTask.Id) { - this.Chart.Error.throwError("DATA_INSERT_ERROR", 32, [predTask.Id,task.Id]); - return false; - } - } else { - this.Chart.Error.throwError("DATA_INSERT_ERROR", 32, [predTask.Id,task.Id]); - return false; - } - - if (!this.Chart.checkPosPredecessorTask(predTask, task)) { - this.Chart.correctPosPredecessorTask(predTask, task); - } - - task.PredecessorTask = predTask; - } - - var isAdd = false; - - if (sortRequired) for (var i = 0; i < parentTask.ChildTasks.length; i++) { - if (task.EST < parentTask.ChildTasks[i].EST) - { - parentTask.ChildTasks.splice(i, 0, task); - if (i > 0) { - parentTask.ChildTasks[i - 1].nextChildTask = parentTask.ChildTasks[i]; - parentTask.ChildTasks[i].previousChildTask = parentTask.ChildTasks[i - 1]; - } - if (parentTask.ChildTasks[i + 1]) { - parentTask.ChildTasks[i + 1].previousChildTask = parentTask.ChildTasks[i]; - parentTask.ChildTasks[i].nextChildTask = parentTask.ChildTasks[i + 1]; - } - isAdd = true; - break; - } - } - - if (!isAdd) { - if (parentTask.ChildTasks.length > 0) { - parentTask.ChildTasks[parentTask.ChildTasks.length - 1].nextChildTask = task; - task.previousChildTask = parentTask.ChildTasks[parentTask.ChildTasks.length - 1]; - } - parentTask.ChildTasks.push(task); - } - - if (parentTask.ChildTasks.length == 1) { - _parentTask.cTaskNameItem[2] = _parentTask.createTreeImg(); - } - - _task = new GanttTask(task, this, this.Chart); - _task.create(); - - if (task.nextChildTask) _task.nextChildTask = _task.Project.getTaskById(task.nextChildTask.Id); - _task.addDayInPanelTime(); - _task.shiftCurrentTasks(_task, 23); - - } else - { - - EST = EST || this.Project.StartDate; - - task = new GanttTaskInfo(id, name, EST, Duration, PercentCompleted, predecessorTaskId); - - if (task.EST <= this.Chart.startDate) { - this.Chart.Error.throwError("DATA_INSERT_ERROR", 18, [task.Id]); - return false; - } - - if (predecessorTaskId != "") { - var predTask = this.Project.getTaskById(predecessorTaskId); - if (!predTask) { - this.Chart.Error.throwError("DATA_INSERT_ERROR", 27, [predecessorTaskId]); - return false; - } - - if (!this.Chart.checkPosPredecessorTask(predTask, task)) { - this.Chart.correctPosPredecessorTask(predTask, task); - } - - if (predTask.ParentTask) { - this.Chart.Error.throwError("DATA_INSERT_ERROR", 15, [task.Id,predTask.Id]); - return false; - } - task.PredecessorTask = predTask; - } - var isAdd = false; - - if (sortRequired) for (var i = 0; i < this.Project.ParentTasks.length; i++) { - - if (EST < this.Project.ParentTasks[i].EST) - { - this.Project.ParentTasks.splice(i, 0, task); - if (i > 0) { - this.Project.ParentTasks[i - 1].nextParentTask = task; - task.previousParentTask = this.Project.ParentTasks[i - 1]; - } - if (this.Project.ParentTasks[i + 1]) { - this.Project.ParentTasks[i + 1].previousParentTask = task; - task.nextParentTask = this.Project.ParentTasks[i + 1]; - } - isAdd = true; - break; - } - } - - if (!isAdd) { - if (this.Project.ParentTasks.length > 0) { - this.Project.ParentTasks[this.Project.ParentTasks.length - 1].nextParentTask = task; - task.previousParentTask = this.Project.ParentTasks[this.Project.ParentTasks.length - 1]; - } - this.Project.ParentTasks.push(task); - } - - _task = new GanttTask(task, this, this.Chart); - _task.create(); - if (task.nextParentTask) _task.nextParentTask = _task.Project.getTaskById(task.nextParentTask.Id); - _task.addDayInPanelTime(); - - this.arrTasks.push(_task); - _task.shiftCurrentTasks(_task, 23); - this.projectItem[0].style.display = "inline"; - this.setPercentCompleted(this.getPercentCompleted()); - this.shiftProjectItem(); - - if (this.Chart.isShowDescProject) { - this.showDescrProject(); - } - - } - - this.Chart.checkHeighPanelTasks(); - - return _task; -}; -/** - * @desc: Check Position of predecessor task - * @param: predTask - (object) predecessor task - * @param: task - (object) current task - * @type: private - * @topic: 4 - */ -GanttChart.prototype.checkPosPredecessorTask = function(predTask, task) -{ - var widthPred = this.getWidthOnDuration(predTask.Duration); - var posPred = this.getPosOnDate(predTask.EST); - var posChild = this.getPosOnDate(task.EST); - return (widthPred + posPred) <= posChild; - -}; -GanttChart.prototype.correctPosPredecessorTask = function(predTask, ctask, ctaskObj) -{ - var newDate = new Date(predTask.EST); - newDate.setHours(newDate.getHours() + (predTask.Duration / this.hoursInDay * 24)); - if (newDate.getHours() > 0) { - newDate.setHours(0); - newDate.setDate(newDate.getDate() + 1); - } - - if (ctaskObj) ctaskObj.setEST(newDate, true); - else ctask.EST = newDate; - - if (ctask.ParentTask) - { - if (!this.checkPosParentTask(ctask.ParentTask, ctask)) - { - var newDate2 = new Date(ctask.ParentTask.EST); - newDate2.setHours(newDate2.getHours() + (ctask.ParentTask.Duration / this.hoursInDay * 24)); - ctask.Duration = parseInt((parseInt((newDate2 - ctask.EST) / (1000 * 60 * 60))) * this.hoursInDay / 24); - } - } -}; -GanttChart.prototype.correctPosParentTask = function(parentTask, ctask) -{ - if (!ctask.PredecessorTask) - { - if (parentTask.EST > ctask.EST) { - ctask.EST = new Date(parentTask.EST); - } - if (!this.checkPosParentTask(parentTask, ctask)) { - ctask.Duration = parentTask.Duration; - } - } else - { - this.correctPosPredecessorTask(ctask.PredecessorTask, ctask); - } -}; - -/** - * @desc: Check position of parent task - * @param: parentTask - (object) parent task - * @type: private - * @topic: 4 - */ -GanttChart.prototype.checkPosParentTaskInTree = function(parentTask) -{ - var isError = false; - for (var t = 0; t < parentTask.ChildTasks.length; t++) - { - - if (!this.checkPosParentTask(parentTask, parentTask.ChildTasks[t])) - { - if (!this.correctError) { - this.Error.throwError("DATA_ERROR", 28, [parentTask.Id,parentTask.ChildTasks[t].Id]); - return true; - } else { - this.correctPosParentTask(parentTask, parentTask.ChildTasks[t]); - } - } - if (parentTask.EST > parentTask.ChildTasks[t].EST) - { - if (!this.correctError) { - this.Error.throwError("DATA_ERROR", 33, [parentTask.Id,parentTask.ChildTasks[t].Id]); - return true; - } else { - this.correctPosParentTask(parentTask, parentTask.ChildTasks[t]); - } - } - - if (parentTask.ChildTasks[t].ChildTasks.length > 0) - { - isError = this.checkPosParentTaskInTree(parentTask.ChildTasks[t]); - } - - } - return isError; -}; -/** - * @desc: Set Predecessor Task to child - * @param: project - (object) current Project - * @type: private - * @topic: 0 - */ -GanttChart.prototype.setPredTask = function(project) -{ - var isError = false; - for (var k = 0; k < project.ParentTasks.length; k++) { - - if (!this.isEmpty(project.ParentTasks[k].PredecessorTaskId)) - { - project.ParentTasks[k].PredecessorTask = project.getTaskById(project.ParentTasks[k].PredecessorTaskId); - if (!project.ParentTasks[k].PredecessorTask) { - if (!this.correctError) { - this.Error.throwError("DATA_ERROR", 27, [project.ParentTasks[k].PredecessorTaskId]); - return true; - } - } - - project.ParentTasks[k].PredecessorTask.ChildPredTasks.push(project.ParentTasks[k]); - } - - if (project.ParentTasks[k].PredecessorTask) - { - if (!this.checkPosPredecessorTask(project.ParentTasks[k].PredecessorTask, project.ParentTasks[k])) { - if (!this.correctError) { - this.Error.throwError("DATA_ERROR", 26, [project.ParentTasks[k].PredecessorTask.Id,project.ParentTasks[k].Id]); - return true; - } else { - this.correctPosPredecessorTask(project.ParentTasks[k].PredecessorTask, project.ParentTasks[k]); - } - - } - } - isError = this.setPredTaskInTree(project.ParentTasks[k]); - if (isError) return isError; - } - return isError; - -}; -/** - * @desc: Set Predecessor Task to child - * @param: project - (object) current parent task - * @type: private - * @topic: 0 - */ -GanttChart.prototype.setPredTaskInTree = function(parentTask) -{ - var isError = false; - for (var t = 0; t < parentTask.ChildTasks.length; t++) - { - if (!this.isEmpty(parentTask.ChildTasks[t].PredecessorTaskId)) - { - parentTask.ChildTasks[t].PredecessorTask = parentTask.Project.getTaskById(parentTask.ChildTasks[t].PredecessorTaskId); - if (!parentTask.ChildTasks[t].PredecessorTask) - { - if (!this.correctError) { - this.Error.throwError("DATA_ERROR", 27, [parentTask.ChildTasks[t].PredecessorTaskId]); - return true; - } - - } - - if (!this.checkPosPredecessorTask(parentTask.ChildTasks[t].PredecessorTask, parentTask.ChildTasks[t])) - { - if (!this.correctError) { - this.Error.throwError("DATA_ERROR", 26, [parentTask.ChildTasks[t].PredecessorTask.Id,parentTask.ChildTasks[t].Id]); - return true; - } else { - this.correctPosPredecessorTask(parentTask.ChildTasks[t].PredecessorTask, parentTask.ChildTasks[t]); - } - } - parentTask.ChildTasks[t].PredecessorTask.ChildPredTasks.push(parentTask.ChildTasks[t]); - } - - if (parentTask.ChildTasks[t].ChildTasks.length > 0) - { - isError = this.setPredTaskInTree(parentTask.ChildTasks[t]); - } - - } - return isError; -}; -/** - * @desc: Check Position of Parent Task - * @param: parentTask - (object) Parent Task - * @param: task - (object) current Task - * @type: private - * @topic: 4 - */ -GanttChart.prototype.checkPosParentTask = function(parentTask, task) -{ - var widthParent = this.getWidthOnDuration(parentTask.Duration); - var posParent = this.getPosOnDate(parentTask.EST); - var posChild = this.getPosOnDate(task.EST); - var widthChild = this.getWidthOnDuration(task.Duration); - return (widthParent + posParent) >= (posChild + widthChild); -}; -/** - * @desc: Insert new GanttProject and returns it - * @param: id - id of project - * @param: name - name of project - * @param: startDate - Start Date of project - * @type: public - * @topic: 1 - */ -GanttChart.prototype.insertProject = function(id, name, startDate) -{ - if (this._isError) - { - this.clearData(); - this.clearItems(); - this.hidePanelErrors(); - this._isError = false; - } - - if (this.startDate >= startDate) { - this.Error.throwError("DATA_INSERT_ERROR", 14, null); - return false; - } - - if (this.getProjectById(id)) { - this.Error.throwError("DATA_INSERT_ERROR", 23, [id]); - return false; - } - - this.checkHeighPanelTasks(); - - var project = new GanttProjectInfo(id, name, startDate); - - this.Project.push(project); - - var _project = new GanttProject(this, project); - - for (var i = 0; i < this.arrProjects.length; i++) { - - if (startDate < this.arrProjects[i].Project.StartDate) { - this.arrProjects.splice(i, 0, _project); - if (i > 0) { - _project.previousProject = this.arrProjects[i - 1]; - this.arrProjects[i - 1].nextProject = _project; - } - if (i + 1 <= this.arrProjects.length) { - _project.nextProject = this.arrProjects[i + 1]; - this.arrProjects[i + 1].previousProject = _project; - _project.shiftNextProject(_project, 23); - } - _project.create(); - - if (this.isShowDescProject) { - _project.hideDescrProject(); - } - return _project; - } - } - - if (this.arrProjects.length > 0) { - this.arrProjects[this.arrProjects.length - 1].nextProject = _project; - _project.previousProject = this.arrProjects[this.arrProjects.length - 1]; - } - - this.arrProjects.push(_project); - _project.create(); - - if (this.isShowDescProject) { - _project.hideDescrProject(); - } - - return _project; -}; -/** - * @desc: show context menu in tree in current position - * @type: private - * @topic: 4 - */ -GanttChart.prototype._showContextMenu = function(event, obj) -{ - if (this.contextMenu.isDhtmlxMenuObject) { - var res = this.callEvent("onBeforeContextMenu", [this.contextMenu, obj]); - if (res === false) return; - - var x, y; - if (_isIE){ - var dEl0 = window.document.documentElement, dEl1 = window.document.body, corrector = new Array((dEl0.scrollLeft||dEl1.scrollLeft),(dEl0.scrollTop||dEl1.scrollTop)); - x = event.clientX + corrector[0]; - y = event.clientY + corrector[1]; - } else { - x = event.pageX; - y = event.pageY; - } - this.contextMenu.showContextMenu(x-1, y-1); - } else { - var elem = event.srcElement || event.target; - this.contextMenu.showContextMenu(elem.style.left, elem.style.top, obj); - } - -}; -/** - * @desc: Opens a tree - * @param: parentTask - (object) parent task - * @type: private - * @topic: 3 - */ -GanttChart.prototype.openTree = function(parentTask) -{ - var lastParentTask = this.getLastCloseParent(parentTask); - if (parentTask.TaskInfo.Id != lastParentTask.TaskInfo.Id) { - - this.openNode(lastParentTask); - this.openTree(parentTask); - - } else { - this.openNode(lastParentTask); - } -}; -/** - * @desc: Opens current node - * @param: parentTask - (object) parent task - * @type: private - * @topic: 3 - */ -GanttChart.prototype.openNode = function(parentTask) -{ - if (!parentTask._isOpen) - { - parentTask.cTaskNameItem[2].src = this.imgs + "minus.gif"; - parentTask._isOpen = true; - parentTask.shiftCurrentTasks(parentTask, parentTask._heightHideTasks); - parentTask.showChildTasks(parentTask, parentTask._isOpen); - parentTask._heightHideTasks = 0; - } -}; -/** - * @desc: get last close parent - * @param: task - (object) task - * @type: private - * @topic: 2 - */ -GanttChart.prototype.getLastCloseParent = function(task) -{ - if (task.parentTask) - { - if ((!task.parentTask._isOpen) || - (task.parentTask.cTaskNameItem[2].style.display == "none")) { - return this.getLastCloseParent(task.parentTask); - - } else { - return task; - } - - } else { - return task; - } -}; -/** - * @desc: create a connection line between this task and predecessor - * @param: predecessorTaskId - ID of the predecessor Task - * @type: public - * @topic: 0 - */ -GanttTask.prototype.setPredecessor = function(predecessorTaskId) -{ - if (predecessorTaskId == "") this.clearPredTask(); - else - { - var task = this.TaskInfo; - if (task.Id == predecessorTaskId) { - this.Chart.Error.throwError("DATA_INSERT_ERROR", 36); - return false; - } - - var predTaskObj = this.Project.getTaskById(predecessorTaskId); - if (!predTaskObj) { - this.Chart.Error.throwError("DATA_INSERT_ERROR", 27, [predecessorTaskId]); - return false; - } - var predTask = predTaskObj.TaskInfo; - var a1 = predTask.ParentTask == null, a2 = task.ParentTask == null; - if (a1 && !a2 || !a1 && a2 || !a1 && !a2 && (predTask.ParentTask.Id != task.ParentTask.Id)) { - this.Chart.Error.throwError("DATA_INSERT_ERROR", 32, [predTask.Id,task.Id]); - return false; - } - - // remove current connection - this.clearPredTask(); - - if (!this.Chart.checkPosPredecessorTask(predTask, task)) { - this.Chart.correctPosPredecessorTask(predTask, task, this); - } - - task.PredecessorTaskId = predecessorTaskId; - task.PredecessorTask = predTask; - this.predTask = predTaskObj; - predTaskObj.childPredTask.push(this); - - this.cTaskItem[1] = this.createConnectingLinesDS(); - } - return true; -}; - -/** - * @desc: remove references and connections to predecessor task - * @type: private - * @topic: 0 - */ -GanttTask.prototype.clearPredTask = function() { - if (this.predTask) { - var ch = this.predTask.childPredTask; - for (var i = 0; i < ch.length; i++) { - if (ch[i] == this) { - ch.splice(i, 1); - break; - } - } - for (var i = 0; i < this.cTaskItem[1].length; i++) { - this.cTaskItem[1][i].parentNode.removeChild(this.cTaskItem[1][i]); - } - this.cTaskItem[1] = []; - - this.TaskInfo.PredecessorTaskId = null; - this.TaskInfo.PredecessorTask = null; - this.predTask = null; - } -}; - -/** - * @desc: shifts the task - * @param: est - est of current Task - * @param: shiftChild - (true/false) to shift children or not - * @type: public - * @topic: 0 - */ -GanttTask.prototype.setEST = function(est, shiftChild) -{ - this.moveChild = shiftChild; - this.getMoveInfo(); - - var pos = this.Chart.getPosOnDate(est); - if ((parseInt(this.cTaskItem[0].firstChild.firstChild.width) + pos > this.maxPosXMove) && (this.maxPosXMove != -1)) - { - this.Chart.Error.throwError("DATA_INSERT_ERROR", 12, [this.TaskInfo.Id]); - this.maxPosXMove = -1; - this.minPosXMove = -1; - return false; - } - - if (pos < this.minPosXMove) - { - this.Chart.Error.throwError("DATA_INSERT_ERROR", 11, [this.TaskInfo.Id]); - this.maxPosXMove = -1; - this.minPosXMove = -1; - return false; - } - - this.cTaskItem[0].style.left = pos; - - var width = pos - this.posX; - this.moveCurrentTaskItem(width, shiftChild); - this.Project.shiftProjectItem(); - if (this.Chart.isShowDescTask)this.descrTask.innerHTML = this.getDescStr(); - this.addDayInPanelTime(); - this.posX = 0; - this.maxPosXMove = -1; - this.minPosXMove = -1; - return true; -}; -/** - * @desc: set duration of the current task - * @param: duration - (int) duration of current task in hours - * @type: public - * @topic: 0 - */ -GanttTask.prototype.setDuration = function(duration) -{ - this.getResizeInfo(); - var width = this.Chart.getWidthOnDuration(duration); - if ((width > this.maxWidthResize) && (this.maxWidthResize != -1)) - { - this.Chart.Error.throwError("DATA_INSERT_ERROR", 10, [this.TaskInfo.Id]); - return false; - } else if (width < this.minWidthResize) - { - this.Chart.Error.throwError("DATA_INSERT_ERROR", 9, [this.TaskInfo.Id]); - return false; - } else { - this.taskItemWidth = parseInt(this.cTaskItem[0].firstChild.firstChild.width); - this.resizeTaskItem(width); - this.endResizeItem(); - if (this.Chart.isShowDescTask)this.descrTask.innerHTML = this.getDescStr(); - return true; - } - -}; -/** - * @desc: establishes percent completed of the current task - * @param: percentCompleted - (int) percent completed of current task - * @type: public - * @topic: 0 - */ -GanttTask.prototype.setPercentCompleted = function(percentCompleted) -{ - percentCompleted = parseInt(percentCompleted); - if (isNaN(percentCompleted)) - { - this.Chart.Error.throwError("DATA_INSERT_ERROR", 6, null); - return false; - } - - if (percentCompleted > 100) - { - this.Chart.Error.throwError("DATA_INSERT_ERROR", 7, null); - return false; - } - if (percentCompleted < 0) - { - this.Chart.Error.throwError("DATA_INSERT_ERROR", 8, null); - return false; - } - - if ((percentCompleted != 0) && (percentCompleted != 100)) - { - if ((this.TaskInfo.PercentCompleted != 0) && (this.TaskInfo.PercentCompleted != 100)) - { - this.cTaskItem[0].childNodes[0].firstChild.rows[0].cells[0].width = percentCompleted + "%"; - this.cTaskItem[0].childNodes[0].firstChild.rows[0].cells[1].width = 100 - percentCompleted + "%"; - - } else if ((this.TaskInfo.PercentCompleted == 0) || (this.TaskInfo.PercentCompleted == 100)) - { - this.cTaskItem[0].childNodes[0].firstChild.rows[0].cells[0].parentNode.removeChild(this.cTaskItem[0].childNodes[0].firstChild.rows[0].cells[0]); - - var cellTblTask = document.createElement("td"); - this.cTaskItem[0].childNodes[0].firstChild.rows[0].appendChild(cellTblTask); - cellTblTask.height = this.Chart.heightTaskItem + "px"; - cellTblTask.width = percentCompleted + "%"; - - var imgPrF = document.createElement("img"); - imgPrF.style.width = (percentCompleted * this.TaskInfo.Duration * this.Chart.hourInPixelsWork) / 100 + "px"; - imgPrF.style.height = this.Chart.heightTaskItem + "px"; - cellTblTask.appendChild(imgPrF); - imgPrF.src = this.Chart.imgs + "progress_filled.png"; - - cellTblTask = document.createElement("td"); - this.cTaskItem[0].childNodes[0].firstChild.rows[0].appendChild(cellTblTask); - cellTblTask.height = this.Chart.heightTaskItem + "px"; - cellTblTask.width = (100 - percentCompleted) + "%"; - - imgPrF = document.createElement("img"); - imgPrF.style.width = ((100 - percentCompleted) * this.TaskInfo.Duration * this.Chart.hourInPixelsWork) / 100 + "px"; - imgPrF.style.height = this.Chart.heightTaskItem + "px"; - cellTblTask.appendChild(imgPrF); - imgPrF.src = this.Chart.imgs + "progress_bg.png"; - } - } else if (percentCompleted == 0) - { - if ((this.TaskInfo.PercentCompleted != 0) && (this.TaskInfo.PercentCompleted != 100)) - { - this.cTaskItem[0].childNodes[0].firstChild.rows[0].cells[0].parentNode.removeChild(this.cTaskItem[0].childNodes[0].firstChild.rows[0].cells[0]); - this.cTaskItem[0].childNodes[0].firstChild.rows[0].cells[0].width = 100 + "%"; - - } else - { - this.cTaskItem[0].childNodes[0].firstChild.rows[0].cells[0].firstChild.src = this.Chart.imgs + "progress_bg.png"; - } - - } else if (percentCompleted == 100) - { - - if ((this.TaskInfo.PercentCompleted != 0) && (this.TaskInfo.PercentCompleted != 100)) - { - this.cTaskItem[0].childNodes[0].firstChild.rows[0].cells[1].parentNode.removeChild(this.cTaskItem[0].childNodes[0].firstChild.rows[0].cells[1]); - this.cTaskItem[0].childNodes[0].firstChild.rows[0].cells[0].width = 100 + "%"; - - } else - { - this.cTaskItem[0].childNodes[0].firstChild.rows[0].cells[0].firstChild.src = this.Chart.imgs + "progress_filled.png"; - } - } - - this.TaskInfo.PercentCompleted = percentCompleted; - this.taskItemWidth = parseInt(this.cTaskItem[0].firstChild.firstChild.width); - this.resizeTaskItem(this.taskItemWidth); - this.endResizeItem(); - if (this.Chart.isShowDescTask)this.descrTask.innerHTML = this.getDescStr(); - return true; -}; -/** - * @desc: set name of the current task - * @param: name - (string) name of the current task - * @type: public - * @topic: 0 - */ -GanttTask.prototype.setName = function(name) -{ - - if ((name != "") && (name != null)) { - this.TaskInfo.Name = name; - if (this.Chart._showTreePanel) - { - this.cTaskNameItem[0].innerHTML = name; - this.cTaskNameItem[0].title = name; - this.checkWidthTaskNameItem(); - } - if (this.Chart.isShowDescTask)this.descrTask.innerHTML = this.getDescStr(); - this.addDayInPanelTime(); - - } -}; -/** - * @desc: get projectInfo by id - * @param: id - Project id - * @type: private - * @topic: 2 - */ -GanttChart.prototype.getProjectInfoById = function(id) -{ - - for (var i = 0; i < this.Project.length; i++) - { - if (this.Project[i].Id == id) - { - return this.Project[i]; - } - } - return null; -}; - -/** - * @desc: load xml data from string or file - * @param: content - (string) XML string or fileName - * @param: isFile - (true/false) if the content is a file name or XML string. if youload from file, setLoadPath() url is used, fileName is passed in "path" field - * @param: isLocal - (true/false) if the file is a local file (for debugging purposes) or remote (server-side) - * @type: public - * @topic: 6 - */ -GanttChart.prototype.loadData = function(content, isFile, isLocal) -{ - this.clearData(); - - if ((isFile == null) || (isFile == 'undefined')) - { - isFile = false; - } - if ((isLocal == null) || (isLocal == 'undefined')) - { - isLocal = false; - } - this.loadXML(content, isFile, isLocal); - - this.Project.sort(this.sort_byStartDate); - this.startDate = this.getStartDate(); - - this.clearItems(); - //this.panelTime.removeChild(this.panelTime.firstChild); - //this.panelTime.appendChild(this.createPanelTime()); - - for (var i = 0; i < this.Project.length; i++) - { - for (var k = 0; k < this.Project[i].ParentTasks.length; k++) - { - if ((this.Project[i].ParentTasks[k].EST != null) && (this.Project[i].ParentTasks[k].EST != '')) { - this.setESTChild(this.Project[i].ParentTasks[k]); - } - else { - this.Error.throwError("DATA_ERROR", 25, [this.Project[i].ParentTasks[k].Id]); - return; - } - - if (this.setPredTask(this.Project[i])) return; - } - - for (var k = 0; k < this.Project[i].ParentTasks.length; k++) { - if (this.Project[i].ParentTasks[k].EST < this.Project[i].StartDate) { - this.Error.throwError("DATA_ERROR", 24, [this.Project[i].ParentTasks[k].Id,this.Project[i].Id]); - return; - } - if (this.checkPosParentTaskInTree(this.Project[i].ParentTasks[k])) return; - } - - this.sortTasksByEST(this.Project[i]); - - } - - for (var i = 0; i < this.Project.length; i++) - { - - var project = new GanttProject(this, this.Project[i]); - - if (this.arrProjects.length > 0) - { - var previousProject = this.arrProjects[this.arrProjects.length - 1]; - project.previousProject = previousProject; - previousProject.nextProject = project; - } - - project.create(); - - this.checkHeighPanelTasks(); - this.arrProjects.push(project); - this.createTasks(project); - - } - -}; - -/** - * @desc: Clearing of a control - * @type: public - * @topic: 1 - */ -GanttChart.prototype.clearAll = function() -{ - this._oDataHeight = 0; - this.startDate = null; - this._isError = false; - - this.hidePanelErrors(); - this.clearData(); - this.clearItems(); - -}; -/** - * @desc: deleting of a data - * @type: private - * @topic: 1 - */ -GanttChart.prototype.clearData = function() -{ - this._oDataHeight = 0; - this.startDate = null; - this._isError = false; - - this.hidePanelErrors(); - - this.Project = []; - this.arrProjects = []; -}; -/** - * @desc: deleting of items of a control - * @type: private - * @topic: 1 - */ -GanttChart.prototype.clearItems = function() -{ - this.oData.removeChild(this.oData.firstChild); - this.oData.appendChild(this.createPanelTasks()); - this.oData.firstChild.appendChild(this.divInfo); - this.oData.firstChild.appendChild(this.panelErrors); - if (this._showTreePanel) - { - this.panelNames.removeChild(this.panelNames.firstChild); - this.panelNames.appendChild(this.createPanelNamesTasks()); - } - this.panelTime.removeChild(this.panelTime.firstChild); - this.panelTime.appendChild(this.createPanelTime()); -}; - -/** - * @desc: load xml data - * @param: content - (string) XML string or fileName - * @param: isFile - (true/false) if the content is a file name or XML string - * @param: isLocal - (true/false) if the file is a local file (for debugging purposes) or remote (server-side) - * @type: private - * @topic: 6 - */ -GanttChart.prototype.loadXML = function(content, isFile, isLocal) -{ - if (isFile && (content == null || content == "")) - { - this.Error.throwError("DATA_SEND_ERROR", 4, null); - return; - } - - this.xmlLoader = new dtmlXMLLoaderObject(null, this, false); - - try - { - if (!isFile) - try { - this.xmlLoader.loadXMLString(content); - } catch (e) { - this.Error.throwError("DATA_LOAD_ERROR", 37, [content]); - } else - if (!isLocal) - { - this.xmlLoader.loadXML(this.loadPath + "?path=" + content + "&rnd=" + (new Date() - 0), false); - - } else - { - this.xmlLoader.loadXML(content + "?rnd=" + (new Date() - 0), false); - } - this.doLoadDetails(isLocal); - - } catch(e) - { - this.Error.throwError("DATA_LOAD_ERROR", 5, [content]); - } - -}; -/** - * @desc: parsing of XML data - * @type: private - * @topic: 4 - */ -GanttChart.prototype.doLoadDetails = function(isLocal) -{ - switch (this.xmlLoader.xmlDoc.status) { - case 0: - if (!isLocal) - { - this.Error.throwError("DATA_LOAD_ERROR", 1, null); - return; - } - break; - case 404: - if (!isLocal) - { - this.Error.throwError("DATA_LOAD_ERROR", 5, [this.loadPath]); - - } else - { - this.Error.throwError("DATA_LOAD_ERROR", 5, [this.xmlLoader.filePath]) - } - return; - break; - case 500: - this.Error.throwError("DATA_LOAD_ERROR", 2, null); - return; - break; - default: - break; - } - - var name = null; - var id = null; - var est = null; - var duration = null; - var percentCompleted = null; - var predecessorTaskId = null; - - //var prArr = []; - //var tsArr = []; - //var rootTagProject = this.xmlLoader.getXMLTopNode("projects"); - var projectArr = this.xmlLoader.doXPath("//project"); - - for (var j = 0; j < projectArr.length; j++) - { - var startDateTemp = projectArr[j].getAttribute("startdate"); - var startDate = startDateTemp.split(","); - var project = new GanttProjectInfo(projectArr[j].getAttribute("id"), projectArr[j].getAttribute("name"), new Date(startDate[0], (parseInt(startDate[1]) - 1), startDate[2])); - - var taskArr = this.xmlLoader.doXPath("./task", projectArr[j]); - - for (var i = 0; i < taskArr.length; i++) { - - id = taskArr[i].getAttribute("id"); - name = (this.xmlLoader.doXPath("./name", taskArr[i])[0].firstChild == null) ? "" : this.xmlLoader.doXPath("./name", taskArr[i])[0].firstChild.nodeValue; - var estTemp = (this.xmlLoader.doXPath("./est", taskArr[i])[0].firstChild == null) ? "" : this.xmlLoader.doXPath("./est", taskArr[i])[0].firstChild.nodeValue; - est = estTemp.split(","); - duration = (this.xmlLoader.doXPath("./duration", taskArr[i])[0].firstChild == null) ? "" : this.xmlLoader.doXPath("./duration", taskArr[i])[0].firstChild.nodeValue; - percentCompleted = (this.xmlLoader.doXPath("./percentcompleted", taskArr[i])[0].firstChild == null) ? "" : this.xmlLoader.doXPath("./percentcompleted", taskArr[i])[0].firstChild.nodeValue; - predecessorTaskId = (this.xmlLoader.doXPath("./predecessortasks", taskArr[i])[0].firstChild == null) ? "" : this.xmlLoader.doXPath("./predecessortasks", taskArr[i])[0].firstChild.nodeValue; - - var task = new GanttTaskInfo(id, name, new Date(est[0], (parseInt(est[1]) - 1), est[2]), duration, percentCompleted, predecessorTaskId); - var childTasksNode = this.xmlLoader.doXPath("./childtasks", taskArr[i]); - var childTasksArr = this.xmlLoader.doXPath("./task", childTasksNode[0]); - - if (childTasksArr.length != 0) this.readChildTasksXML(task, childTasksArr); - - project.addTask(task); - - } - - this.addProject(project); - } -}; -/** - * @desc: parsing of XML data - * @param: parentTask - Parent Task object - * @param: childTasksArrXML - Array of child tasks (xml) - * @type: private - * @topic: 4 - */ -GanttChart.prototype.readChildTasksXML = function(parentTask, childTasksArrXML) -{ - - var name = null; - var id = null; - var est = null; - var duration = null; - var percentCompleted = null; - var predecessorTaskId = null; - - for (var i = 0; i < childTasksArrXML.length; i ++) - { - id = childTasksArrXML[i].getAttribute("id"); - name = (this.xmlLoader.doXPath("./name", childTasksArrXML[i])[0].firstChild == null) ? "" : this.xmlLoader.doXPath("./name", childTasksArrXML[i])[0].firstChild.nodeValue; - var estTemp = (this.xmlLoader.doXPath("./est", childTasksArrXML[i])[0].firstChild == null) ? "" : this.xmlLoader.doXPath("./est", childTasksArrXML[i])[0].firstChild.nodeValue; - est = estTemp.split(","); - duration = (this.xmlLoader.doXPath("./duration", childTasksArrXML[i])[0].firstChild == null) ? "" : this.xmlLoader.doXPath("./duration", childTasksArrXML[i])[0].firstChild.nodeValue; - percentCompleted = (this.xmlLoader.doXPath("./percentcompleted", childTasksArrXML[i])[0].firstChild == null) ? "" : this.xmlLoader.doXPath("./percentcompleted", childTasksArrXML[i])[0].firstChild.nodeValue; - predecessorTaskId = (this.xmlLoader.doXPath("./predecessortasks", childTasksArrXML[i])[0].firstChild == null) ? "" : this.xmlLoader.doXPath("./predecessortasks", childTasksArrXML[i])[0].firstChild.nodeValue; - var task = new GanttTaskInfo(id, name, new Date(est[0], (parseInt(est[1]) - 1), est[2]), duration, percentCompleted, predecessorTaskId); - task.ParentTask = parentTask; - - parentTask.addChildTask(task); - - var childTasksNode = this.xmlLoader.doXPath("./childtasks", childTasksArrXML[i]); - var childTasksArr = this.xmlLoader.doXPath("./task", childTasksNode[0]); - if (childTasksArr.length != 0) - { - this.readChildTasksXML(task, childTasksArr); - } - - } - -}; -/** - * @desc: create XML string from the chart content - * @type: public - * @topic: 6 - */ -GanttChart.prototype.getXML = function() -{ - var strXML = ""; - - for (var i = 0; i < this.Project.length; i++) - { - strXML += ""; - - for (var j = 0; j < this.Project[i].ParentTasks.length; j++) - { - strXML += ""; - strXML += "" + this.Project[i].ParentTasks[j].Name + ""; - strXML += "" + this.Project[i].ParentTasks[j].EST.getFullYear() + "," + (this.Project[i].ParentTasks[j].EST.getMonth() + 1) + "," + this.Project[i].ParentTasks[j].EST.getDate() + ""; - strXML += "" + this.Project[i].ParentTasks[j].Duration + ""; - strXML += "" + this.Project[i].ParentTasks[j].PercentCompleted + ""; - strXML += "" + this.Project[i].ParentTasks[j].PredecessorTaskId + ""; - strXML += ""; - strXML += this.createChildTasksXML(this.Project[i].ParentTasks[j].ChildTasks); - strXML += ""; - strXML += ""; - - } - - strXML += ""; - - } - strXML += ""; - return strXML; - -}; -/** - * @desc: create XML - * @type: private - * @topic: 4 - */ -GanttChart.prototype.createChildTasksXML = function(childTasks) -{ - var strXML = ""; - for (var n = 0; n < childTasks.length; n++) - { - strXML += ""; - strXML += "" + childTasks[n].Name + ""; - strXML += "" + childTasks[n].EST.getFullYear() + "," + (childTasks[n].EST.getMonth() + 1) + "," + childTasks[n].EST.getDate() + ""; - strXML += "" + childTasks[n].Duration + ""; - strXML += "" + childTasks[n].PercentCompleted + ""; - strXML += "" + childTasks[n].PredecessorTaskId + ""; - if (childTasks[n].ChildTasks) - { - strXML += ""; - strXML += this.createChildTasksXML(childTasks[n].ChildTasks); - strXML += ""; - } - strXML += ""; - } - return strXML; - -}; -/** - * @desc: function of sorting by EST - * @type: private - * @topic: 4 - */ -GanttChart.prototype.sort_byEST = function(a, b) -{ - if (a.EST < b.EST) return -1; - if (a.EST > b.EST) return 1; - return 0; -}; -/** - * @desc: function of sorting by start date - * @type: private - * @topic: 4 - */ -GanttChart.prototype.sort_byStartDate = function(a, b) -{ - if (a["StartDate"] < b["StartDate"]) return -1; - if (a["StartDate"] > b["StartDate"]) return 1; - return 0; -}; - -/** - * @desc: set the date to child tasks - * @param: parentTask - (object) parent task - * @type: private - * @topic: 4 - */ -GanttChart.prototype.setESTChild = function(parentTask) -{ - for (var t = 0; t < parentTask.ChildTasks.length; t++) - { - if ((parentTask.ChildTasks[t].EST == null ) || (parentTask.ChildTasks[t].EST == "")) - { - parentTask.ChildTasks[t].EST = parentTask.EST; - } - - if (parentTask.ChildTasks[t].ChildTasks.length != 0) this.setESTChild(parentTask.ChildTasks[t]); - } - -}; - -/** - * @desc: creation of the panel containing tasks - * @type: private - * @topic: 4 - */ -GanttChart.prototype.createPanelTasks = function() -{ - var divTasks = document.createElement("div"); - divTasks.className = "taskPanel"; - divTasks.style.cssText = "position:relative;"; - divTasks.style.height = this.contentHeight - 63 + "px"; - var w = this.startDate ? (this.startDate.getDay()-1) : ((new Date(0)).getDay()-1); - if (w==-1) w=6; - divTasks.style.background = "url(" + this.imgs + "bg_week.png) -"+(w*24)+"px 0px"; - this.panelTasks = divTasks; - return divTasks; -}; -/** - * @desc: creation of the panel containing names of tasks - * @type: private - * @topic: 4 - */ -GanttChart.prototype.createPanelNamesTasks = function() -{ - var divListNames = document.createElement("div"); - divListNames.innerHTML = " "; - divListNames.style.cssText = "position:relative;background:url(" + this.imgs + "bg.png)"; - divListNames.style.height = this.contentHeight - 63 + "px"; - divListNames.style.width = this.maxWidthPanelNames + "px"; - - return divListNames; -}; -/** - * @desc: creation a window with the data of task - * @type: private - * @topic: 4 - */ -GanttChart.prototype.createPopUpInfo = function() -{ - var divTaskInfo = document.createElement("div"); - divTaskInfo.style.cssText = 'display: none;'; - - var tblTaskInfo = document.createElement("table"); - tblTaskInfo.style.cssText = "position:absolute;top:0px;left:0px"; - tblTaskInfo.className = "poPupInfo"; - divTaskInfo.appendChild(tblTaskInfo); - - var rowTaskInfo = tblTaskInfo.insertRow(tblTaskInfo.rows.length); - var cellTaskInfo = document.createElement("td"); - rowTaskInfo.appendChild(cellTaskInfo); - this.divInfo = divTaskInfo; - - return divTaskInfo; -}; -/** - * @desc: creation a window with the current date - * @type: private - * @topic: 4 - */ -GanttChart.prototype.createPopUpTimeInfo = function() -{ - var divTimeInfo = document.createElement("div"); - divTimeInfo.style.display = "none"; - - var tblTimeInfo = document.createElement("table"); - tblTimeInfo.className = "poPupTime"; - divTimeInfo.appendChild(tblTimeInfo); - - var rowTimeInfo = tblTimeInfo.insertRow(tblTimeInfo.rows.length); - var cellTimeInfo = document.createElement("td"); - cellTimeInfo.align = "center"; - rowTimeInfo.appendChild(cellTimeInfo); - - return divTimeInfo; -}; -/** - * @desc: create a panel with the days - * @type: private - * @topic: 4 - */ -GanttChart.prototype.createPanelTime = function() -{ - var panelTime = document.createElement("div"); - panelTime.style.position = "relative"; - - var tblTime = document.createElement("table"); - panelTime.appendChild(tblTime); - tblTime.cellPadding = "0px"; - tblTime.border = "0px"; - tblTime.cellSpacing = "0px"; - tblTime.bgColor = "#FFFFFF"; - tblTime.style.marginTop = "0px"; - - var monthRow = tblTime.insertRow(tblTime.rows.length); - - var newRow = tblTime.insertRow(tblTime.rows.length); - - //creating cells for tblTime - for (var i = 0; i < this.countDays; i++) - { - this.addPointInTimePanel(newRow, panelTime); - this.addDayInPanelTime(newRow); - } - - return panelTime; -}; -/** - * @desc: creation of point in panel time - * @param: row - current row - * @param: panelTime -Panel which contains days - * @type: private - * @topic: 4 - */ -GanttChart.prototype.addPointInTimePanel = function(row, panelTime) -{ - var leftLine = document.createElement("div"); - leftLine.style.cssText = "position:absolute;left:" + ( row.cells.length * this.dayInPixels ) + "px;top:20px;height:20px;width:1px;font-size:1px;margin-left:0px;margin-right:0px;margin-top:0px;margin-bottom:0px;background:#f1f3f1;"; - panelTime.appendChild(leftLine); -}; -GanttChart.prototype._calculateMonthColSpan = function(date, maxLen) { - var m1 = date.getMonth(); - for(var i=1; i<=maxLen; i++) { - date.setDate(date.getDate() + 1); - var m2 = date.getMonth(); - if (m2 != m1) return i; - } - return maxLen; -}; -/** - * @desc: Returns a string representation of current month for the month scale row. You may override this function to customize the label. - * @param: date - {JavaScript Date object}, the date of month for which you should render month label. - * @type: public, overridable - * @topic: 3 - */ -GanttChart.prototype.getMonthScaleLabel = function(date) { - return (this._useShortMonthNames ? this.shortMonthNames : this.monthNames)[date.getMonth()] + " '" + (""+date.getFullYear()).substring(2); -}; -/** - * @desc: Use short or full month name in the month label axis. Default is true. - * @param: flag - {true|false} - * @type: public - * @topic: 3 - * @before_init: 1 - */ -GanttChart.prototype.useShortMonthNames = function(flag) { - this._useShortMonthNames = flag; -}; -/** - * @desc: Define short month names for your locale - * @param: names - an array of strings, ["Jan", "Feb", ...] - * @type: public - * @topic: 3 - * @before_init: 1 - */ -GanttChart.prototype.setShortMonthNames = function(names) { - this.shortMonthNames = names; -}; -/** - * @desc: Define full month names for your locale - * @param: names - an array of strings, ["January", "February", ...] - * @type: public - * @topic: 3 - * @before_init: 1 - */ -GanttChart.prototype.setMonthNames = function(names) { - this.monthNames = names; -}; -/** - * @desc: Add day in panel time - * @param: row - row, which contains days - * @type: private - * @topic: 4 - */ -GanttChart.prototype.addDayInPanelTime = function(row) -{ - var self = this, idx = row.cells.length, date = new Date(this.startDate); - - var newCell = row.insertCell(idx); - newCell.style.height = "20px"; - newCell.style.width = this.dayInPixels + "px"; - newCell.className = "dayNumber"; - - date.setDate(date.getDate() + parseInt(idx)); - var day = date.getDate() - newCell.innerHTML = day; - newCell.setAttribute("idx", idx); - - var monthRow = row.parentNode.parentNode.rows[0]; - if (idx==0 || day==1) { - var newCell2 = monthRow.insertCell(monthRow.cells.length); - newCell2.className = "monthName"; - newCell2.style.height = "20px"; - if (monthRow.cells.length%2 == 0) newCell2.style.backgroundColor = "#f7f8f7"; - newCell2.colSpan = this._calculateMonthColSpan(new Date(date), Math.max(1,this.countDays-idx)); - newCell2.innerHTML = this.getMonthScaleLabel(date); - } else { - var n = monthRow.cells.length, cs=0; - for(var i=0; i=cs) monthRow.cells[n-1].colSpan += 1; - } - - var w = date.getDay(); - if (w==0 || w==6) newCell.style.backgroundColor = "#f7f8f7"; -}; -/** - * @desc: increment Height of Panel Tasks - * @type: private - * @topic: 4 - */ -GanttChart.prototype.incHeightPanelTasks = function(height) -{ - var containerTasks = this.oData.firstChild; - containerTasks.style.height = parseInt(containerTasks.style.height) + height + "px"; -}; -/** - * @desc: increment Height of Panel Names - * @type: private - * @topic: 4 - */ -GanttChart.prototype.incHeightPanelNames = function(height) -{ - var containerNames = this.panelNames.firstChild; - containerNames.style.height = parseInt(containerNames.style.height) + height + "px"; -}; -/** - * @desc: check Heigh of Panel Tasks - * @type: private - * @topic: 4 - */ -GanttChart.prototype.checkHeighPanelTasks = function() -{ - this._oDataHeight += 11 + this.heightTaskItem; - if ((parseInt(this.oData.firstChild.style.height) <= this._oDataHeight)) { - this.incHeightPanelTasks(this.heightTaskItem + 11); - if (this._showTreePanel) this.incHeightPanelNames(this.heightTaskItem + 11); - } -}; -/** - * @desc: sorting of tasks by EST in the current project - * @param: project - current project - * @type: private - * @topic: 4 - */ -GanttChart.prototype.sortTasksByEST = function(project) -{ - project.ParentTasks.sort(this.sort_byEST); - - for (var i = 0; i < project.ParentTasks.length; i++) - { - project.ParentTasks[i] = this.sortChildTasks(project.ParentTasks[i]); - } - -}; -/** - * @desc: sorting of child tasks in the parent task - * @param: parenttask - (object) parent task - * @type: private - * @topic: 4 - */ -GanttChart.prototype.sortChildTasks = function(parenttask) -{ - parenttask.ChildTasks.sort(this.sort_byEST); - - for (var i = 0; i < parenttask.ChildTasks.length; i++) - { - if (parenttask.ChildTasks[i].ChildTasks.length > 0) this.sortChildTasks(parenttask.ChildTasks[i]); - } - return parenttask; -}; -/** - * @desc: Handler of data errors - * @param: type - type of error - * @param: descr - description of error - * @param: params - current data - * @type: private - * @topic: 5 - */ -GanttChart.prototype.errorDataHandler = function(type, descr, params) -{ - if (!this._isError) - { - this.clearData(); - this.showPanelErrors(); - this._isError = true; - } - this.addErrorInPanelErrors(type, descr); -}; -/** - * @desc: creation of Panel Errors - * @type: private - * @topic: 4 - */ -GanttChart.prototype.createPanelErrors = function() -{ - var tbl = document.createElement("table"); - tbl.width = "100%"; - tbl.style.display = "none"; - tbl.className = "panelErrors"; - this.panelErrors = tbl; - - return tbl; - -}; -/** - * @desc: show of Panel Errors - * @type: private - * @topic: 4 - */ -GanttChart.prototype.showPanelErrors = function() -{ - this.panelErrors.style.display = "inline"; -}; -/** - * @desc: hide of Panel Errors - * @type: private - * @topic: 4 - */ -GanttChart.prototype.hidePanelErrors = function() -{ - for (var i = 0; i < this.panelErrors.rows.length; i++) { - - this.panelErrors.rows[i].parentNode.removeChild(this.panelErrors.rows[i]); - } - this.panelErrors.style.display = "none"; -}; -/** - * @desc: add error message in Panel Errors - * @type: private - * @topic: 4 - */ -GanttChart.prototype.addErrorInPanelErrors = function(type, descr) -{ - var row = this.panelErrors.insertRow(this.panelErrors.rows.length); - var cell = document.createElement("td"); - cell.style.height = "20px"; - cell.style.width = "100px"; - cell.innerHTML = type; - row.appendChild(cell); - - cell = document.createElement("td"); - row.appendChild(cell); - cell.innerHTML = descr; -}; -/** - * @desc: Handler of errors - * @param: type - type of error - * @param: descr - description of error - * @param: params - current data - * @type: private - * @topic: 5 - */ -GanttChart.prototype.errorSendDataHandler = function(type, descr, params) -{ - alert(descr); -}; -/** - * @desc: Handler of errors - * @param: type - type of error - * @param: descr - description of error - * @param: params - current data - * @type: private - * @topic: 5 - */ -GanttChart.prototype.errorLoadDataHandler = function(type, descr, params) -{ - alert(descr); -}; -/** - * @desc: Handler of API errors - * @param: type - type of error - * @param: descr - description of error - * @param: params - current data - * @type: private - * @topic: 5 - */ -GanttChart.prototype.errorAPIHandler = function(type, descr, params) -{ - alert(descr); -}; -/** - * @desc: saves data to server, using setSavePath() url and "application/x-www-form-urlencoded" encoding - * @param: fileName - passed to server as "filename" field, xml content is passed in "data" field - * @type: public - * @topic: 6 - */ -GanttChart.prototype.saveData = function(fileName) -{ - try { - - if (!this.dhtmlXMLSenderObject.isProcessed) - { - this.dhtmlXMLSenderObject.sendData(fileName, this.savePath, this.getXML()); - } - - } catch (e) { - this.Error.throwError("DATA_SEND_ERROR", e, null); - } -}; -/** - * @desc: creation of GanttChart - * @param: divId - id of div in which the control lays - * @param: xmlFile - path to XML document - * @type: public - * @topic: 0 - */ -GanttChart.prototype.create = function(divId) -{ - var self = this; - var content = document.getElementById(divId); - this.content = content; - this.getBrowserType(); - - // - if (this._isIE) { - document.body.attachEvent('onselectstart', function() { - window.event.returnValue = false; - }); - - document.body.attachEvent('onkeydown', function() { - if (event.keyCode == 65 && event.ctrlKey) window.event.returnValue = false; - }); - - } else { - content.addEventListener('mousedown', function(e) { - e.preventDefault(); - }, true); - document.addEventListener('keydown', function(e) { - if (e.keyCode == 65 && e.ctrlKey) e.preventDefault(); - }, true); - } - - //init handlers - this.Error.catchError("DATA_ERROR", function(type, descr, params) { - self.errorDataHandler(type, descr, params) - }); - this.Error.catchError("DATA_SEND_ERROR", function(type, descr, params) { - self.errorSendDataHandler(type, descr, params) - }); - this.Error.catchError("DATA_INSERT_ERROR", function(type, descr, params) { - self.errorAPIHandler(type, descr, params) - }); - this.Error.catchError("DATA_LOAD_ERROR", function(type, descr, params) { - self.errorLoadDataHandler(type, descr, params) - }); - - //create Table - var tableControl = document.createElement("table"); - tableControl.cellPadding = "0"; - tableControl.cellSpacing = "0"; - tableControl.style.cssText = "width: 100%; position: relative;"; - var newRowTblControl = tableControl.insertRow(tableControl.rows.length); - var newCellTblControl; - - //Add to content Table - this.contentHeight = content.offsetHeight; - this.contentWidth = content.offsetWidth; - content.appendChild(tableControl); - - this.countDays = this.getCountDays(); - - this.Project.sort(this.sort_byStartDate); - this.startDate = this.getStartDate(); - - //Creation panel of time - this.panelTime = document.createElement("div"); - this.panelTime.appendChild(this.createPanelTime()); - this.panelTime.style.cssText = "position:relative;overflow:hidden;height:40px;top:0px;left:1px"; - - //Creation panel oData - this.oData = document.createElement("div"); - this.oData.appendChild(this.createPanelTasks()); - this.oData.style.cssText = "position:relative;overflow:auto;height:" + (this.contentHeight - 40) + "px;border-left:#f1f3f1 1px solid"; - - this.oData.firstChild.appendChild(this.createPanelErrors()); - - //Creation panel of names - if (this._showTreePanel) - { - this.panelNames = document.createElement("div"); - newCellTblControl = document.createElement("td"); - newCellTblControl.vAlign = "top"; - - this.panelNames.appendChild(this.createPanelNamesTasks()); - this.panelNames.style.cssText = "position:relative;top:40px;overflow:hidden;border-left:#f1f3f1 1px solid;border-bottom:#f1f3f1 1px solid"; - newCellTblControl.appendChild(this.panelNames); - newRowTblControl.appendChild(newCellTblControl); - } - - //add oData and oDataTime - newCellTblControl = document.createElement("td"); - var divCell = document.createElement("div"); - divCell.style.cssText = "position: relative;"; - divCell.appendChild(this.panelTime); - divCell.appendChild(this.oData); - newCellTblControl.appendChild(divCell); - newRowTblControl.appendChild(newCellTblControl); - - //Show panel of names - if (this._showTreePanel) { - this.panelNames.style.height = (this.contentHeight - 56) + "px"; - this.panelNames.style.width = this.maxWidthPanelNames + "px"; - this.oData.style.width = (this.contentWidth - this.maxWidthPanelNames) + "px"; - this.panelTasks.style.width = this.dayInPixels * this.countDays + "px"; - this.panelTime.style.width = (this.contentWidth - this.maxWidthPanelNames - 0*18) + "px"; - this.panelTime.firstChild.style.width = this.dayInPixels * this.countDays + "px"; - if (this.isShowConMenu && this.contextMenu == null) this.contextMenu = new contextMenu(this); - } else { - this.oData.style.width = this.contentWidth + "px"; - this.panelTime.style.width = (this.contentWidth - 16) + "px"; - } - - if (this._isOpera) { - this.oData.onmousewheel = function() { - return false; - } - } - - this.oData.onscroll = function() { - self.panelTime.scrollLeft = this.scrollLeft; - - if (self.panelNames) { - self.panelNames.scrollTop = this.scrollTop; - if (self.isShowConMenu) self.contextMenu.hideContextMenu(); - } - - }; - - //create pop up time info - this.divTimeInfo = this.createPopUpTimeInfo(); - divCell.appendChild(this.divTimeInfo); - - //create pop up info task - this.oData.firstChild.appendChild(this.createPopUpInfo()); - - //this.Project.sort(this.sort_byStartDate); - //this.startDate = this.getStartDate(); - - for (var i = 0; i < this.Project.length; i++) - { - - for (var k = 0; k < this.Project[i].ParentTasks.length; k++) - { - if (this.isEmpty(this.Project[i].ParentTasks[k].EST)) { - this.Project[i].ParentTasks[k].EST = this.Project[i].StartDate; - } - this.setESTChild(this.Project[i].ParentTasks[k]); - - if (this.setPredTask(this.Project[i])) return; - } - - for (var k = 0; k < this.Project[i].ParentTasks.length; k++) { - if (this.Project[i].ParentTasks[k].EST < this.Project[i].StartDate) { - - if (!this.correctError) { - this.Error.throwError("DATA_ERROR", 24, [this.Project[i].ParentTasks[k].Id,this.Project[i].Id]); - return; - } else { - this.Project[i].ParentTasks[k].EST = this.Project[i].StartDate; - } - } - if (this.checkPosParentTaskInTree(this.Project[i].ParentTasks[k])) return; - } - - this.sortTasksByEST(this.Project[i]); - - } - - for (var i = 0; i < this.Project.length; i++) - { - //creation project - var project = new GanttProject(this, this.Project[i]); - - if (this.arrProjects.length > 0) - { - var previousProject = this.arrProjects[this.arrProjects.length - 1]; - project.previousProject = previousProject; - previousProject.nextProject = project; - } - project.create(); - - this.checkHeighPanelTasks(); - this.arrProjects.push(project); - this.createTasks(project); - - } - - return this; -}; - -GanttChart.prototype.isEmpty = function(value) -{ - return (value == null || value == ''); -}; - -/** - * @desc: returns chart in html format suitable for printing, full-sized and without scrollbars - * @type: public - * @topic: 7 - */ -GanttChart.prototype.getPrintableHTML = function() -{ - var w = parseInt(this.oData.firstChild.style.width) - parseInt(this.oData.style.width); - var h = parseInt(this.panelTasks.style.height) - parseInt(this.panelTasks.parentNode.style.height); - - this.oData.setAttribute("id","ganttPrint02"); - this.panelNames.setAttribute("id","ganttPrint03"); - - var res = 'onload=function(){var w=' + w + ',h=' + h + - ',c1=document.getElementById("ganttPrint01"),c2=document.getElementById("ganttPrint02"),c3=document.getElementById("ganttPrint03");' + - 'c2.style.width=parseInt(c2.style.width)+w+"px";c2.previousSibling.style.width=c2.style.width;c1.style.width=parseInt(c1.style.width)+w+"px";c2.style.height=parseInt(c2.style.height)+h+"px";' + - 'c2.style.overflow="hidden";c3.style.height=c3.firstChild.style.height;c1.style.height=parseInt(c1.style.height)+h+"px";}' + - '
' + this.content.innerHTML + '
'; - - this.oData.setAttribute("id",null); - this.panelNames.setAttribute("id",null); - - return res; -}; - -/** - * @desc: opens chart in a new window, from where you can print it as you like - you can use browser's "Print preview" menu button to layout the chart on your page, choose a paper size etc. - * @param: message - (string) this message will appear in alert window to instruct user what to do for printing. Set it to null to skip this alert. By default it says "Use browser's menu File->Print preview to setup page layout." - * @type: public - * @topic: 7 - */ -GanttChart.prototype.printToWindow = function(message) -{ - var o = window.open(); - o.document.write(this.getPrintableHTML()); - o.document.close(); - if (message!==null) { - o.alert(message ? message : "Use browser's menu \"File->Print preview\" to setup page layout." ); - } -}; - -/** - * @desc: Calculation of Start Date - * @type: private - * @topic: 4 - */ -GanttChart.prototype.getStartDate = function() -{ - for (var i = 0; i < this.Project.length; i++) { - - if (this.startDate) { - if (this.Project[i].StartDate < this.startDate) { - this.startDate = new Date(this.Project[i].StartDate); - } - } - else { - this.startDate = new Date(this.Project[i].StartDate); - } - } - - this.initialPos = 24 * this.hourInPixels; - if (this.startDate) { - return new Date(this.startDate.setHours(this.startDate.getHours() - 24)); - } - else { - return new Date(); - } - -}; -/** - * @desc: Calculation of Count Days - * @type: private - * @topic: 4 - */ -GanttChart.prototype.getCountDays = function() -{ - - if (this._showTreePanel) { - return parseInt((this.contentWidth - this.maxWidthPanelNames) / (this.hourInPixels * 24)); - - } else { - return parseInt((this.contentWidth) / (this.hourInPixels * 24)); - } - -}; -/** - * @desc: Creation of tasks - * @param: project - (object)project - * @type: private - * @topic: 4 - */ -GanttChart.prototype.createTasks = function(project) -{ - for (var j = 0; j < project.Project.ParentTasks.length; j++) - { - if (j > 0) - { - project.Project.ParentTasks[j - 1].nextParentTask = project.Project.ParentTasks[j]; - project.Project.ParentTasks[j].previousParentTask = project.Project.ParentTasks[j - 1]; - } - - var task = new GanttTask(project.Project.ParentTasks[j], project, this); - project.arrTasks.push(task); - task.create(); - - this.checkHeighPanelTasks(); - - if (project.Project.ParentTasks[j].ChildTasks.length > 0) - { - this.createChildItemControls(project.Project.ParentTasks[j].ChildTasks, project); - } - } -}; -/** - * @desc: Creation of tasks - * @param: arrChildTasks - array of child tasks - * @param: project - (object)project - * @type: private - * @topic: 4 - */ -GanttChart.prototype.createChildItemControls = function(arrChildTasks, project) -{ - for (var i = 0; i < arrChildTasks.length; i++) { - - if (i > 0) - { - arrChildTasks[i].previousChildTask = arrChildTasks[i - 1]; - arrChildTasks[i - 1].nextChildTask = arrChildTasks[i]; - } - var task = new GanttTask(arrChildTasks[i], project, this); - task.create(); - - this.checkHeighPanelTasks(); - - if (arrChildTasks[i].ChildTasks.length > 0) - { - this.createChildItemControls(arrChildTasks[i].ChildTasks, project); - } - } - -}; -/** - * @desc: show a small window with the data of task - * @param: event - (object)event - * @type: private - * @topic: 4 - */ -GanttTask.prototype.getPopUpInfo = function(object, event) -{ - //this.cTaskItem[0] - var posY = object.offsetTop + this.Chart.heightTaskItem + 6; - var posX = object.offsetLeft + ((event.layerX == null) ? event.offsetX : event.layerX); - - //data of task - var tblInfo = this.Chart.divInfo.lastChild; - tblInfo.rows[0].cells[0].innerHTML = "
" + this.TaskInfo.Name + "
"; - tblInfo.rows[0].cells[0].innerHTML += "EST: " + this.TaskInfo.EST.getDate() + "." + (this.TaskInfo.EST.getMonth() + 1) + "." + this.TaskInfo.EST.getFullYear() + "
"; - tblInfo.rows[0].cells[0].innerHTML += "Duration: " + this.TaskInfo.Duration + " hours
"; - tblInfo.rows[0].cells[0].innerHTML += "Percent Complete: " + this.TaskInfo.PercentCompleted + "%
"; - - //show predecessor task - if (this.predTask) - { - tblInfo.rows[0].cells[0].innerHTML += "Predecessor Task: "; - tblInfo.rows[0].cells[0].innerHTML += "*" + this.TaskInfo.PredecessorTask.Name + ""; - } - - //show child tasks - if (this.TaskInfo.ChildTasks.length != 0) { - tblInfo.rows[0].cells[0].innerHTML += "Child Tasks: "; - for (var i = 0; i < this.TaskInfo.ChildTasks.length; i++) - { - tblInfo.rows[0].cells[0].innerHTML += (i == this.TaskInfo.ChildTasks.length - 1) ? ("*" + this.TaskInfo.ChildTasks[i].Name + "") : ("*" + this.TaskInfo.ChildTasks[i].Name + ""); - } - } - - //show parent task - if (this.TaskInfo.ParentTask) { - tblInfo.rows[0].cells[0].innerHTML += "Parent Task: "; - tblInfo.rows[0].cells[0].innerHTML += "*" + this.TaskInfo.ParentTask.Name + ""; - } - - this.Chart.divInfo.style.cssText = "z-index:2;position: absolute;display: inline;"; - - if (posY + this.Chart.divInfo.lastChild.offsetHeight + 10 > this.Chart.oData.offsetHeight + this.Chart.oData.scrollTop) { - this.Chart.divInfo.style.top = (posY - this.Chart.divInfo.lastChild.offsetHeight - 10 - this.Chart.heightTaskItem) + "px"; - } - else { - this.Chart.divInfo.style.top = posY + "px"; - } - - if (this.Chart.divInfo.lastChild.offsetWidth + posX + 10 > this.Chart.oData.offsetWidth + this.Chart.oData.scrollLeft) { - this.Chart.divInfo.style.left = posX - (this.Chart.divInfo.lastChild.offsetWidth + posX + 20 - (this.Chart.oData.offsetWidth + this.Chart.oData.scrollLeft)) + "px"; - - } else { - this.Chart.divInfo.style.left = posX + "px"; - } - -}; -/** - * @desc: close a window in browser with the data of task - * @type: private - * @topic: 4 - */ -GanttTask.prototype.closePopUpInfo = function() -{ - this.Chart.divInfo.style.display = "none"; -}; -/** - * @desc: creation connecting lines in panel of names - * @type: private - * @topic: 4 - */ -GanttTask.prototype.createConnectingLinesPN = function() -{ - var arrConnectingLinesNames = []; - - /*var lineVerticalLeft = document.createElement("div"); - lineVerticalLeft.style.cssText = "border-width: 0px 0px 0px 1px; border-style: dotted; border-color: #C0C4C0; margin: 0px; padding: 0px;z-index:10;position: absolute;" + - "height:" + (this.cTaskNameItem[0].offsetTop - this.parentTask.cTaskNameItem[0].offsetTop) + "px;" + - "top:" + (this.parentTask.cTaskNameItem[0].offsetTop + 5) + "px;" + - "left:" + (this.parentTask.cTaskNameItem[0].offsetLeft - 9) + "px;"; - lineVerticalLeft.innerHTML = " "; - this.Chart.panelNames.firstChild.appendChild(lineVerticalLeft); - - var LineHorizontalLeft = document.createElement("div"); - LineHorizontalLeft.noShade = true; - LineHorizontalLeft.color = "#000000"; - LineHorizontalLeft.style.cssText = "left:" + (this.parentTask.cTaskNameItem[0].offsetLeft - 9) + "px;top:" + (this.cTaskNameItem[0].offsetTop + 5) + "px;z-index:10;" + - "height:" + 1 + "px;width:" + (this.cTaskNameItem[0].offsetLeft - this.parentTask.cTaskNameItem[0].offsetLeft + 4 ) + "px;position: absolute;border-width: 1px 0px 0px 0px;font-size: 1px;border-style: dotted; border-color: #C0C4C0;margin: 0px; padding: 0px;"; - this.Chart.panelNames.firstChild.appendChild(LineHorizontalLeft); - - arrConnectingLinesNames.push(lineVerticalLeft); - arrConnectingLinesNames.push(LineHorizontalLeft);*/ - - return arrConnectingLinesNames; - -}; -/** - * @desc: creation connecting lines in panel oData - * @type: private - * @topic: 4 - */ -GanttTask.prototype.createConnectingLinesDS = function() -{ - var oData = this.Chart.oData.firstChild; - var arrLines = []; - - var arrowImg = new Image(); - arrowImg.src = this.Chart.imgs + "arr.gif"; - - //vertical line - var lineVerticalRight = document.createElement("div"); - - //horizontal line - var lineHorizontal = document.createElement("div"); - - var posXPredecessorTask = parseInt(this.predTask.cTaskItem[0].style.left); - var posYPredecessorTask = parseInt(this.predTask.cTaskItem[0].style.top); - - var posXChildTask = parseInt(this.cTaskItem[0].style.left); - var posYChildTask = this.posY + 2; - - //width task item - var widthChildTask = parseInt(this.predTask.cTaskItem[0].firstChild.firstChild.width); - var widthPredecessorTask = parseInt(this.predTask.cTaskItem[0].firstChild.firstChild.width); - - if (posYPredecessorTask < posYChildTask) - { - lineVerticalRight.style.cssText = "border-width: 0px 0px 0px 1px; border-style: solid; border-color: #4A8F43;margin: 0px; padding: 0px;z-index:0;font-size: 1px;position: absolute;" + - "height:" + (posYChildTask - this.Chart.heightTaskItem / 2 - posYPredecessorTask - 3) + "px;width:" + 1 + "px;left:" + (posXPredecessorTask + widthPredecessorTask - 20 ) + "px;top:" + (posYPredecessorTask + this.Chart.heightTaskItem) + "px;"; - - lineHorizontal.style.cssText = "height:1px;border-color: #4A8F43;border-style: solid;border-width: 1px 0px 0px 0px;margin: 0px; padding: 0px;z-index:0;position: absolute;" + - "width:" + (15 + (posXChildTask - (widthPredecessorTask + posXPredecessorTask))) + "px;left:" + (posXPredecessorTask + widthPredecessorTask - 20 ) + "px;top:" + (posYChildTask + 2) + "px;"; - - arrowImg.style.cssText = "margin: 0px; padding: 0px;width:7px;height:14px;position: absolute;left:" + (posXChildTask - 7) + "px;top:" + (posYChildTask - 1) + "px;"; - } else { - lineVerticalRight.style.cssText = "border-width: 0px 0px 0px 1px; border-style: solid; border-color: #4A8F43;margin: 0px; padding: 0px;z-index:0;font-size: 1px;position: absolute;" + - "height:" + (posYPredecessorTask + 2 - posYChildTask) + "px;width:" + 1 + "px;left:" + (posXPredecessorTask + widthPredecessorTask - 20 ) + "px;top:" + (posYChildTask + 2) + "px;"; - - lineHorizontal.style.cssText = "height:1px;border-color: #4A8F43;border-style: solid;border-width: 1px 0px 0px 0px;margin: 0px; padding: 0px;z-index:0;position: absolute;" + - "width:" + (15 + (posXChildTask - (widthPredecessorTask + posXPredecessorTask))) + "px;left:" + (posXPredecessorTask + widthPredecessorTask - 20 ) + "px;top:" + (posYChildTask + 2) + "px;"; - - arrowImg.style.cssText = "margin: 0px; padding: 0px;width:7px;height:14px;position: absolute;left:" + (posXChildTask - 7) + "px;top:" + (posYChildTask - 1) + "px;"; - } - oData.appendChild(lineVerticalRight); - oData.appendChild(lineHorizontal); - oData.appendChild(arrowImg); - - arrLines.push(lineVerticalRight); - arrLines.push(arrowImg); - arrLines.push(lineHorizontal); - - return arrLines; -}; -/** - * @desc: Shows current tasks - * @param: task - GanttTask object. - * @type: private - * @topic: 3 - */ -GanttTask.prototype.showChildTasks = function(task, isOpen) -{ - if (isOpen) - { - for (var i = 0; i < task.childTask.length; i++) - { - if (task.childTask[i].cTaskItem[0].style.display == "none") { - task.childTask[i].cTaskItem[0].style.display = "inline"; - task.childTask[i].cTaskNameItem[0].style.display = "inline"; - if (this.Chart.isShowDescTask) { - task.childTask[i].showDescTask(); - } - - task.isHide = false; - - if (task.childTask[i].cTaskNameItem[2]) { - task.childTask[i].cTaskNameItem[2].style.display = "inline"; - isOpen = task.childTask[i]._isOpen; - } - - for (var k = 0; k < task.childTask[i].cTaskItem[1].length; k++) { - task.childTask[i].cTaskItem[1][k].style.display = "inline"; - - } - for (var k = 0; k < task.childTask[i].cTaskNameItem[1].length; k++) { - task.childTask[i].cTaskNameItem[1][k].style.display = "inline"; - } - - this._heightHideTasks += this.Chart.heightTaskItem + 11; - - if (task.childTask[i].childTask.length > 0) { - this.showChildTasks(task.childTask[i], isOpen); - } - - } - } - } -}; -/** - * @desc: hide child task - * @param: task - (object) GanttTask - * @type: private - * @topic: 3 - */ -GanttTask.prototype.hideChildTasks = function(task) -{ - for (var i = 0; i < task.childTask.length; i++) - { - if (task.childTask[i].cTaskItem[0].style.display != "none") - { - task.childTask[i].cTaskItem[0].style.display = "none"; - task.childTask[i].cTaskNameItem[0].style.display = "none"; - if (this.Chart.isShowDescTask) { - task.childTask[i].hideDescTask(); - } - task.isHide = true; - - if (task.childTask[i].cTaskNameItem[2]) { - task.childTask[i].cTaskNameItem[2].style.display = "none"; - } - - for (var k = 0; k < task.childTask[i].cTaskItem[1].length; k++) { - task.childTask[i].cTaskItem[1][k].style.display = "none"; - } - for (var k = 0; k < task.childTask[i].cTaskNameItem[1].length; k++) { - task.childTask[i].cTaskNameItem[1][k].style.display = "none"; - } - - this._heightHideTasks += this.Chart.heightTaskItem + 11; - - if (task.childTask[i].childTask.length > 0) { - this.hideChildTasks(task.childTask[i]); - } - - } - } -}; -/** - * @desc: shift current tasks - * @param: task - (object) GanttTask - * @param: height - specifies height on which tasks are shifted - * @type: private - * @topic: 4 - */ -GanttTask.prototype.shiftCurrentTasks = function(task, height) -{ - this.shiftNextTask(this, height); - task.Project.shiftNextProject(task.Project, height); -}; - -GanttProject.prototype.shiftNextProject = function(project, height) -{ - if (project.nextProject) { - project.nextProject.shiftProject(height); - this.shiftNextProject(project.nextProject, height); - } - -}; -GanttProject.prototype.shiftProject = function(height) -{ - this.projectItem[0].style.top = parseInt(this.projectItem[0].style.top) + height + "px"; - if (this.Chart.isShowDescProject) { - this.descrProject.style.top = parseInt(this.descrProject.style.top) + height + "px"; - } - - if (this.Chart._showTreePanel) { - this.projectNameItem.style.top = parseInt(this.projectNameItem.style.top) + height + "px"; - } - if (this.arrTasks.length > 0) - this.shiftNextParentTask(this.arrTasks[0], height); - -}; -GanttProject.prototype.shiftTask = function(task, height) -{ - if (this.Chart._showTreePanel) { - - task.cTaskNameItem[0].style.top = parseInt(task.cTaskNameItem[0].style.top) + height + "px"; - if (task.cTaskNameItem[2]) { - task.cTaskNameItem[2].style.top = parseInt(task.cTaskNameItem[2].style.top) + height + "px"; - } - if (task.parentTask && task.cTaskNameItem[1][0]) - { - task.cTaskNameItem[1][0].style.top = parseInt(task.cTaskNameItem[1][0].style.top) + height + "px"; - task.cTaskNameItem[1][1].style.top = parseInt(task.cTaskNameItem[1][1].style.top) + height + "px"; - } - } - - task.cTaskItem[0].style.top = parseInt(task.cTaskItem[0].style.top) + height + "px"; - if (this.Chart.isShowDescTask) { - task.descrTask.style.top = parseInt(task.descrTask.style.top) + height + "px"; - } - if (task.cTaskItem[1][0]) - { - task.cTaskItem[1][0].style.top = parseInt(task.cTaskItem[1][0].style.top) + height + "px"; - task.cTaskItem[1][1].style.top = parseInt(task.cTaskItem[1][1].style.top) + height + "px"; - task.cTaskItem[1][2].style.top = parseInt(task.cTaskItem[1][2].style.top) + height + "px"; - } -}; -GanttProject.prototype.shiftNextParentTask = function(task, height) -{ - this.shiftTask(task, height); - this.shiftChildTasks(task, height); - - if (task.nextParentTask) { - this.shiftNextParentTask(task.nextParentTask, height); - } - -}; -GanttProject.prototype.shiftChildTasks = function(task, height) -{ - for (var i = 0; i < task.childTask.length; i++) - { - this.shiftTask(task.childTask[i], height); - if (task.childTask[i].childTask.length > 0) { - this.shiftChildTasks(task.childTask[i], height); - } - - } -}; - -GanttTask.prototype.shiftTask = function(task, height) -{ - if (this.Chart._showTreePanel) { - task.cTaskNameItem[0].style.top = parseInt(task.cTaskNameItem[0].style.top) + height + "px"; - if (task.cTaskNameItem[2]) { - task.cTaskNameItem[2].style.top = parseInt(task.cTaskNameItem[2].style.top) + height + "px"; - } - if (task.parentTask) - { - if (task.cTaskNameItem[1].length > 0) if ((parseInt(this.cTaskNameItem[0].style.top) > parseInt(task.parentTask.cTaskNameItem[0].style.top)) - && (task.cTaskNameItem[1][0].style.display != "none")) { - task.cTaskNameItem[1][0].style.height = parseInt(task.cTaskNameItem[1][0].style.height) + height + "px"; - } else { - task.cTaskNameItem[1][0].style.top = parseInt(task.cTaskNameItem[1][0].style.top) + height + "px"; - } - if (task.cTaskNameItem[1].length > 1) task.cTaskNameItem[1][1].style.top = parseInt(task.cTaskNameItem[1][1].style.top) + height + "px"; - } - } - - task.cTaskItem[0].style.top = parseInt(task.cTaskItem[0].style.top) + height + "px"; - if (this.Chart.isShowDescTask) { - task.descrTask.style.top = parseInt(task.descrTask.style.top) + height + "px"; - } - if (task.predTask) - { - if (task.cTaskItem[1].length > 0) if (((parseInt(this.cTaskItem[0].style.top) > parseInt(task.predTask.cTaskItem[0].style.top)) || - (this.cTaskItem[0].id == task.predTask.TaskInfo.Id)) && - task.cTaskItem[1][0].style.display != "none") { - task.cTaskItem[1][0].style.height = parseInt(task.cTaskItem[1][0].style.height) + height + "px"; - } else { - task.cTaskItem[1][0].style.top = parseInt(task.cTaskItem[1][0].style.top) + height + "px"; - } - if (task.cTaskItem[1].length > 2) { - task.cTaskItem[1][1].style.top = parseInt(task.cTaskItem[1][1].style.top) + height + "px"; - task.cTaskItem[1][2].style.top = parseInt(task.cTaskItem[1][2].style.top) + height + "px"; - } - } -}; -GanttTask.prototype.shiftNextTask = function(task, height) -{ - if (task.nextChildTask) { - this.shiftTask(task.nextChildTask, height); - this.shiftChildTask(task.nextChildTask, height); - this.shiftNextTask(task.nextChildTask, height); - - } else if (task.parentTask) { - this.shiftNextTask(task.parentTask, height); - - } else if (task.nextParentTask) { - this.shiftTask(task.nextParentTask, height); - this.shiftChildTask(task.nextParentTask, height); - this.shiftNextTask(task.nextParentTask, height); - } -}; -GanttTask.prototype.shiftChildTask = function(task, height) -{ - for (var i = 0; i < task.childTask.length; i++) - { - this.shiftTask(task.childTask[i], height); - if (task.childTask[i].childTask.length > 0) { - this.shiftChildTask(task.childTask[i], height); - } - } -}; - -/** - * @desc: get position of the task on EST - * @param: est - time of the beginning of the task - * @type: private - * @topic: 4 - */ -GanttChart.prototype.getPosOnDate = function(est) -{ - return (est - this.startDate) / (60 * 60 * 1000) * this.hourInPixels; -}; -/** - * @desc: get width on duration - * @param: duration - duration of current task - * @type: private - * @topic: 4 - */ -GanttChart.prototype.getWidthOnDuration = function(duration) -{ - return Math.round(this.hourInPixelsWork * duration); -}; -/** - * @desc: end of dragging of task - * @type: private - * @topic: 5 - */ -GanttTask.prototype.endMove = function() -{ - var width = parseInt(this.cTaskItem[0].style.left) - this.posX; - var est = this.getDateOnPosition(parseInt(this.cTaskItem[0].style.left)); - est = this.checkPos(est); - - this.wasMoved = this.TaskInfo.EST.valueOf() != est.valueOf(); - - if (this.checkMove) { - width = this.Chart.getPosOnDate(est) - this.posX; - this.moveCurrentTaskItem(width, this.moveChild); - this.Project.shiftProjectItem(); - } - - this.checkMove = false; - this.posX = 0; - this.maxPosXMove = -1; - this.minPosXMove = -1; - this.cTaskItem[0].childNodes[1].firstChild.rows[0].cells[0].innerHTML = ""; - - if (this.Chart._isFF) document.body.style.cursor = ""; - if (this.Chart._isIE) this.cTaskItem[0].childNodes[2].childNodes[0].style.cursor = ""; -}; - -GanttTask.prototype.checkPos = function(est) -{ - var h = est.getHours(); - if (h >= 12) - { - est.setDate(est.getDate() + 1); - est.setHours(0); - - if ((parseInt(this.cTaskItem[0].firstChild.firstChild.width) + this.Chart.getPosOnDate(est) > this.maxPosXMove) && (this.maxPosXMove != -1)) - { - est.setDate(est.getDate() - 1); - est.setHours(0); - } - - - } else if ((h < 12) && (h != 0)) - { - est.setHours(0); - if ((this.Chart.getPosOnDate(est) < this.minPosXMove)) - { - est.setDate(est.getDate() + 1); - } - } - this.cTaskItem[0].style.left = this.Chart.getPosOnDate(est) + "px"; - - return est; - -}; - -/** - * @desc: returns max position of child task - * @type: private - * @topic: 4 - */ -GanttTask.prototype.getMaxPosPredChildTaskItem = function() -{ - var posPredChildTaskItem = 0; - var nextPosPredChildTaskItem = 0; - - for (var i = 0; i < this.childPredTask.length; i++) - { - nextPosPredChildTaskItem = this.getMaxPosPredChildTaskItemInTree(this.childPredTask[i]); - if (nextPosPredChildTaskItem > posPredChildTaskItem) - { - posPredChildTaskItem = nextPosPredChildTaskItem; - } - } - return posPredChildTaskItem; - -}; -/** - * @desc: returns max position of child task in tree - * @param: task - (object) task - * @type: private - * @topic: 4 - */ -GanttTask.prototype.getMaxPosPredChildTaskItemInTree = function(task) -{ - var currentPos = parseInt(task.cTaskItem[0].firstChild.firstChild.width) + parseInt(task.cTaskItem[0].style.left); - var posPredChildTaskItem = 0; - var nextPosPredChildTaskItem = 0; - - for (var i = 0; i < task.childPredTask.length; i++) - { - nextPosPredChildTaskItem = this.getMaxPosPredChildTaskItemInTree(task.childPredTask[i]); - if (nextPosPredChildTaskItem > posPredChildTaskItem) - { - posPredChildTaskItem = nextPosPredChildTaskItem; - } - } - - if (posPredChildTaskItem > currentPos) - { - return posPredChildTaskItem; - } - else - { - return currentPos; - } - -}; -/** - * @desc: get task by id - * @param: id - Id of GanttTask - * @type: public - * @topic: 2 - */ -GanttProject.prototype.getTaskById = function(id) -{ - for (var i = 0; i < this.arrTasks.length; i++) - { - var task = this.searchTaskInTree(this.arrTasks[i], id); - if (task) return task; - - } - return null; -}; -/** - * @desc: search GanttTask in child tasks - * @param: task - (object) parent GanttTask - * @param: id - Id of GanttTask - * @type: private - * @topic: 2 - */ -GanttProject.prototype.searchTaskInTree = function(task, id) -{ - if (task.TaskInfo.Id == id) - { - return task; - - } else - { - for (var i = 0; i < task.childTask.length; i++) - { - if (task.childTask[i].TaskInfo.Id == id) - { - return task.childTask[i]; - } - else - { - if (task.childTask[i].childTask.length > 0) - { - var cTask = this.searchTaskInTree(task.childTask[i], id); - if (cTask) return cTask; - } - } - } - } - - return null; -}; -/** - * @desc: shift current projectItem - * @type: private - * @topic: 4 - */ -GanttProject.prototype.shiftProjectItem = function() -{ - var posItemL = null; - var posItemR = null; - var posProjectItemL = parseInt(this.projectItem[0].style.left); - var posProjectItemR = parseInt(this.projectItem[0].firstChild.style.width) + parseInt(this.projectItem[0].style.left); - var widthProjectItem = parseInt(this.projectItem[0].firstChild.style.width); - - for (var t = 0; t < this.arrTasks.length; t++) - { - var tmpPosItemL = parseInt(this.arrTasks[t].cTaskItem[0].style.left); - var tmpPosItemR = parseInt(this.arrTasks[t].cTaskItem[0].style.left) + parseInt(this.arrTasks[t].cTaskItem[0].firstChild.firstChild.width); - - if (!posItemL) { - posItemL = tmpPosItemL; - } - if (!posItemR) { - posItemR = tmpPosItemR; - } - - - if (posItemL > tmpPosItemL) { - posItemL = tmpPosItemL; - } - - if (posItemR < tmpPosItemR) { - posItemR = tmpPosItemR; - } - - } - - if (posItemL != posProjectItemL) - { - this.Project.StartDate = new Date(this.Chart.startDate); - this.Project.StartDate.setHours(this.Project.StartDate.getHours() + (posItemL / this.Chart.hourInPixels)); - } - - this.projectItem[0].style.left = posItemL + "px"; - this.resizeProjectItem(posItemR - posItemL); - - this.Duration = Math.round(parseInt(this.projectItem[0].firstChild.width) / (this.Chart.hourInPixelsWork)); - if (this.Chart.isShowDescProject) { - this.moveDescrProject(); - } - this.addDayInPanelTime(); - -}; -/** - * @desc: add one day - * @type: private - * @topic: 4 - */ -GanttProject.prototype.addDayInPanelTime = function() -{ - var width = parseInt(this.projectItem[0].style.left) + parseInt(this.projectItem[0].firstChild.style.width) + 20; - if (this.Chart.isShowDescProject) { - width += this.descrProject.offsetWidth; - } - - var table = this.Chart.panelTime.firstChild, tbody = table.firstChild; - if (parseInt(tbody.offsetWidth) < width) - { - var countDays = Math.round((width - parseInt(tbody.offsetWidth)) / this.Chart.dayInPixels); - var row = tbody.rows[1]; - for (var n = 0; n < countDays; n++) - { - this.Chart.addPointInTimePanel(row, table); - this.Chart.addDayInPanelTime(row); - } - var w = this.Chart.dayInPixels * (row.cells.length); - tbody.style.width = w + "px"; - this.Chart.panelTasks.style.width = (w-18) + "px"; - } -}; -/** - * @desc: add event - * @param: elm - current element - * @param: evType - string that specifies any of the standard DHTML Events - * @param: fn - pointer that specifies the function to call when sEvent fires - * @type: private - * @topic: 5 - */ -GanttProject.prototype.addEvent = function (elm, evType, fn, useCapture) -{ - if (elm.addEventListener) { - elm.addEventListener(evType, fn, useCapture); - return true; - } - else if (elm.attachEvent) { - return elm.attachEvent('on' + evType, fn); - } - else { - elm['on' + evType] = fn; - } -}; -/** - * @desc: shows popup info - * @param: event - (object)event - * @type: private - * @topic: 4 - */ -GanttProject.prototype.getPopUpInfo = function(object, event) -{ - //this.projectItem[0] - var posX = object.offsetLeft + ((event.layerX == null) ? event.offsetX : event.layerX); - var posY = object.offsetTop + this.Chart.heightTaskItem + 6; - - var tblInfo = this.Chart.divInfo.lastChild; - tblInfo.rows[0].cells[0].innerHTML = "
" + this.Project.Name + "
"; - tblInfo.rows[0].cells[0].innerHTML += "Start Date: " + this.Project.StartDate.getDate() + "." + (this.Project.StartDate.getMonth() + 1) + "." + this.Project.StartDate.getFullYear() + "
"; - tblInfo.rows[0].cells[0].innerHTML += "Duration: " + this.Duration + " hours
"; - tblInfo.rows[0].cells[0].innerHTML += "Percent Complete: " + this.percentCompleted + "%
"; - - this.Chart.divInfo.style.cssText = "z-index:2;position: absolute;display: inline;"; - - if (posY + this.Chart.divInfo.lastChild.offsetHeight + 6 > this.Chart.oData.offsetHeight + this.Chart.oData.scrollTop) - { - this.Chart.divInfo.style.top = (posY - this.Chart.divInfo.lastChild.offsetHeight - 10 - this.Chart.heightTaskItem) + "px"; - } - else { - this.Chart.divInfo.style.top = posY + "px"; - } - - if (this.Chart.divInfo.lastChild.offsetWidth + posX + 10 > this.Chart.oData.offsetWidth + this.Chart.oData.scrollLeft) - { - this.Chart.divInfo.style.left = posX - (this.Chart.divInfo.lastChild.offsetWidth + posX + 20 - (this.Chart.oData.offsetWidth + this.Chart.oData.scrollLeft)) + "px"; - - } else { - this.Chart.divInfo.style.left = posX + "px"; - } -}; -/** - * @desc: hides pop up info - * @type: private - * @topic: 4 - */ -GanttProject.prototype.closePopUpInfo = function() -{ - this.Chart.divInfo.style.display = "none"; -}; -/** - * @desc: resize projectItem - * @param: width - new width - * @type: private - * @topic: 4 - */ -GanttProject.prototype.resizeProjectItem = function(width) -{ - var percentCompleted = this.percentCompleted; - if (percentCompleted > 0 && percentCompleted < 100) - { - this.projectItem[0].firstChild.style.width = width + "px"; - this.projectItem[0].firstChild.width = width + "px"; - this.projectItem[0].style.width = width + "px"; - this.projectItem[0].firstChild.rows[0].cells[0].firstChild.style.width = Math.round(width * percentCompleted / 100) + "px"; - this.projectItem[0].firstChild.rows[0].cells[1].firstChild.style.width = Math.round(width * (100 - percentCompleted) / 100) + "px"; - this.projectItem[0].lastChild.firstChild.width = width + "px"; - - } else if (percentCompleted == 0 || percentCompleted == 100) - { - this.projectItem[0].firstChild.style.width = width + "px"; - this.projectItem[0].firstChild.width = width + "px"; - this.projectItem[0].style.width = width + "px"; - this.projectItem[0].firstChild.rows[0].cells[0].firstChild.style.width = width + "px"; - this.projectItem[0].lastChild.firstChild.width = width + "px"; - } -}; -/** - * @desc: Moving of current task - * @param: width - length of shift of the task - * @param: moveChild - true, if move children together - * @type: private - * @topic: 4 - */ -GanttTask.prototype.moveCurrentTaskItem = function(width, moveChild) -{ - var taskItem = this.cTaskItem[0]; - this.TaskInfo.EST = new Date(this.Chart.startDate); - this.TaskInfo.EST.setHours(this.TaskInfo.EST.getHours() + (parseInt(taskItem.style.left) / this.Chart.hourInPixels)); - if (this.Chart.isShowDescTask) { - this.showDescTask(); - } - - if (this.cTaskItem[1].length > 0) { - this.cTaskItem[1][2].style.width = parseInt(this.cTaskItem[1][2].style.width) + width + "px"; - this.cTaskItem[1][1].style.left = parseInt(this.cTaskItem[1][1].style.left) + width + "px"; - } - - for (var i = 0; i < this.childTask.length; i++) { - if (!this.childTask[i].predTask) { - this.moveChildTaskItems(this.childTask[i], width, moveChild); - } - } - - for (var i = 0; i < this.childPredTask.length; i++) { - this.moveChildTaskItems(this.childPredTask[i], width, moveChild); - } - -}; -/** - * @desc: Moving of child tasks - * @param: task - (object) GanttTask - * @param: width - length of shift of the task - * @param: moveChild - true, if move children together - * @type: private - * @topic: 4 - */ -GanttTask.prototype.moveChildTaskItems = function(task, width, moveChild) -{ - var taskItem = task.cTaskItem[0]; - - if (moveChild) - { - taskItem.style.left = parseInt(taskItem.style.left) + width + "px"; - task.addDayInPanelTime(); - task.TaskInfo.EST = new Date(this.Chart.startDate); - task.TaskInfo.EST.setHours(task.TaskInfo.EST.getHours() + (parseInt(taskItem.style.left) / this.Chart.hourInPixels)); - - for (var n = 0; n < task.cTaskItem[1].length; n++) { - task.cTaskItem[1][n].style.left = parseInt(task.cTaskItem[1][n].style.left) + width + "px"; - } - - for (var i = 0; i < task.childTask.length; i++) { - if (!task.childTask[i].predTask) { - this.moveChildTaskItems(task.childTask[i], width, moveChild); - } - } - - for (var i = 0; i < task.childPredTask.length; i++) { - this.moveChildTaskItems(task.childPredTask[i], width, moveChild); - } - } - else - { - if (task.cTaskItem[1].length > 0) - { - task.cTaskItem[1][2].style.left = parseInt(task.cTaskItem[1][2].style.left) + width + "px"; - task.cTaskItem[1][2].style.width = parseInt(task.cTaskItem[1][2].style.width) - width + "px"; - task.cTaskItem[1][0].style.left = parseInt(task.cTaskItem[1][0].style.left) + width + "px"; - } - } - if (this.Chart.isShowDescTask) { - task.moveDescTask(); - } -}; -/** - * @desc: Addition of new day in panel of time - * @type: private - * @topic: 4 - */ -GanttTask.prototype.addDayInPanelTime = function() -{ - var taskItem = this.cTaskItem[0]; - var width = parseInt(taskItem.style.left) + parseInt(taskItem.firstChild.firstChild.width) + 20; - if (this.Chart.isShowDescTask) { - width += this.descrTask.offsetWidth; - } - - var table = this.Chart.panelTime.firstChild, tbody = table.firstChild; - if (parseInt(tbody.offsetWidth) < width) - { - var row = tbody.rows[1]; - var countDays = Math.round((width + 20 - parseInt(tbody.offsetWidth)) / this.Chart.dayInPixels); - for (var n = 0; n < countDays; n++) - { - this.Chart.addPointInTimePanel(row, table); - this.Chart.addDayInPanelTime(row); - } - var w = this.Chart.dayInPixels * (row.cells.length); - tbody.style.width = w + "px"; - this.Chart.panelTasks.style.width = (w-18) + "px"; - } -}; -/** - * @desc: return of date on position of task - * @param: position - current position of task - * @type: private - * @topic: 4 - */ -GanttTask.prototype.getDateOnPosition = function(position) -{ - var date = new Date(this.Chart.startDate); - date.setHours(date.getHours() + (position / this.Chart.hourInPixels)); - return date; -}; -/** - * @desc: moving of current task - * @param: event - (object) event - * @type: private - * @topic: 4 - */ -GanttTask.prototype.moveItem = function(event) -{ - var pageX = event.screenX; - var posTaskItem = (this.posX + (pageX - this.MouseX)); - var widthTaskItem = parseInt(this.cTaskItem[0].childNodes[0].firstChild.width); - var posTaskItemR = posTaskItem + widthTaskItem; - - if (this.checkMove) - { - var date = this.getDateOnPosition(posTaskItem); - var res = this.Chart.callEvent("onTaskDragging", [this,date])!==false; - if (res && ((this.minPosXMove <= posTaskItem)) - && ((posTaskItemR <= this.maxPosXMove) || (this.maxPosXMove == -1))) - { - this.moveTaskItem(posTaskItem); - } - } -}; -/** - * @desc: shift taskItem - * @param: posX - position of task - * @type: private - * @topic: 4 - */ -GanttTask.prototype.moveTaskItem = function(posX) -{ - this.addDayInPanelTime(); - this.cTaskItem[0].style.left = posX + "px"; - var date = this.getDateOnPosition(posX); - this.cTaskItem[0].childNodes[1].firstChild.rows[0].cells[0].innerHTML = date.getDate() + '.' + (date.getMonth() + 1) + '.' + date.getUTCFullYear(); -}; -/** - * @desc: resize current task - * @param: event - (object) event - * @type: private - * @topic: 4 - */ -GanttTask.prototype.resizeItem = function(event) -{ - if (this.checkResize) - { - var MouseX = event.screenX; - var widthTaskItem = this.taskItemWidth + (MouseX - this.MouseX); - - var countHours = Math.round(widthTaskItem / this.Chart.hourInPixelsWork); - if (this.Chart.callEvent("onTaskResizing", [this,countHours])===false) return; - - if (widthTaskItem >= this.taskItemWidth) - { - if ((widthTaskItem <= this.maxWidthResize) || (this.maxWidthResize == -1)) - { - this.resizeTaskItem(widthTaskItem); - this.addDayInPanelTime(); - - } else if ((this.maxWidthResize != -1) && (widthTaskItem > this.maxWidthResize)) - { - this.resizeTaskItem(this.maxWidthResize); - } - } else if (widthTaskItem <= this.taskItemWidth) - { - if (widthTaskItem >= this.minWidthResize) - { - this.resizeTaskItem(widthTaskItem); - } - else if (widthTaskItem < this.minWidthResize) - { - this.resizeTaskItem(this.minWidthResize); - } - } - } -}; -/** - * @desc: resize current taskItem - * @param: width - width of current taskItem - * @type: private - * @topic: 4 - */ -GanttTask.prototype.resizeTaskItem = function(width) -{ - var taskItem = this.cTaskItem[0]; - var countHours = Math.round(width / this.Chart.hourInPixelsWork); - var c = taskItem.childNodes[0].firstChild.rows[0].cells[0]; - if (c) - { - c.firstChild.style.width = parseInt(c.width) * width / 100 + "px"; - } - c = taskItem.childNodes[0].firstChild.rows[0].cells[1]; - if (c) - { - c.firstChild.style.width = parseInt(c.width) * width / 100 + "px"; - } - - taskItem.childNodes[0].firstChild.width = width + "px"; - taskItem.childNodes[1].firstChild.width = width + "px"; - - //resize info - this.cTaskItem[0].childNodes[1].firstChild.rows[0].cells[0].innerHTML = countHours; - taskItem.childNodes[2].childNodes[0].style.width = width + "px"; - taskItem.childNodes[2].childNodes[1].style.left = width - 10 + "px"; -}; -/** - * @desc: end of stretch of task - * @param: event - (object) event - * @type: private - * @topic: 4 - */ -GanttTask.prototype.endResizeItem = function() -{ - var taskItem = this.cTaskItem[0]; - this.wasResized = this.taskItemWidth != parseInt(taskItem.childNodes[0].firstChild.width); - if (this.wasResized) - { - var posXL = taskItem.offsetLeft; - var posXR = taskItem.offsetLeft + parseInt(taskItem.childNodes[0].firstChild.width); - this.TaskInfo.Duration = Math.round((posXR - posXL) / this.Chart.hourInPixelsWork); - if (this.childPredTask.length > 0) - { - for (var j = 0; j < this.childPredTask.length; j++) - { - this.childPredTask[j].cTaskItem[1][2].style.width = parseInt(this.childPredTask[j].cTaskItem[1][2].style.width) - (parseInt(taskItem.childNodes[0].firstChild.width) - this.taskItemWidth) + "px"; - this.childPredTask[j].cTaskItem[1][2].style.left = parseInt(this.childPredTask[j].cTaskItem[1][2].style.left) + (parseInt(taskItem.childNodes[0].firstChild.width) - this.taskItemWidth) + "px"; - this.childPredTask[j].cTaskItem[1][0].style.left = parseInt(this.childPredTask[j].cTaskItem[1][0].style.left) + (parseInt(taskItem.childNodes[0].firstChild.width) - this.taskItemWidth) + "px"; - } - } - } - this.cTaskItem[0].childNodes[1].firstChild.rows[0].cells[0].innerHTML = ""; - this.checkResize = false; - this.taskItemWidth = 0; - this.MouseX = 0; - if (this.Chart.isShowDescTask) { - this.showDescTask(); - } - this.Project.shiftProjectItem(); - - if (this.Chart._isFF) document.body.style.cursor = ""; -}; - -GanttProject.prototype.moveDescrProject = function() -{ - this.descrProject.style.left = (parseInt(this.projectItem[0].style.left) + this.Duration * this.Chart.hourInPixelsWork + 10); - this.descrProject.innerHTML = this.getDescStr(); -}; - -GanttProject.prototype.showDescrProject = function() -{ - var posX = (parseInt(this.projectItem[0].style.left) + this.Duration * this.Chart.hourInPixelsWork + 10); - this.descrProject.style.left = posX + "px"; - this.descrProject.style.visibility = 'visible'; - this.descrProject.innerHTML = this.getDescStr(); -}; - -GanttProject.prototype.hideDescrProject = function() -{ - this.descrProject.style.visibility = 'hidden'; -}; - -GanttProject.prototype.getDescStr = function() -{ - var str = '', delim = ", "; - - for (var i = 0; i < this.Chart.paramShowProject.length; i++) { - - switch (this.Chart.paramShowProject[i]) { - case "Name": - if (str != "")str += delim; - str += this.Project[this.Chart.paramShowProject[i]]; - break; - case "StartDate": - if (str != "")str += delim; - var d = this.Project[this.Chart.paramShowProject[i]]; - str += d.getDate() + "." + (d.getMonth() + 1) + "." + d.getFullYear(); - break; - case "Duration": - if (str != "")str += delim; - str += this[this.Chart.paramShowProject[i]] + "h"; - break; - case "percentCompleted": - if (str != "")str += delim; - str += this[this.Chart.paramShowProject[i]] + "%"; - break; - - default: - break; - } - - } - return str; -}; - - -GanttProject.prototype.createDescrProject = function() -{ - var posX = (this.posX + this.Duration * this.Chart.hourInPixelsWork + 10); - var divDesc = document.createElement("div"); - divDesc.style.cssText += ";z-index:1;position:absolute;left:" + posX + "px;top:" + this.posY + "px;"; - divDesc.innerHTML = this.getDescStr(); - divDesc.className = "descProject"; - this.descrProject = divDesc; - - if (this.Project.ParentTasks.length == 0) { - this.descrProject.style.visibility = 'hidden'; - } - - if (this.Chart._showTooltip) - { - var self = this; - var getPopUpInfo = function(e) { - if ((!self.Chart._isMove) && (!self.Chart._isResize)) self.getPopUpInfo(self.descrProject, e); - }; - var closePopUpInfo = function() { - self.closePopUpInfo(); - }; - - this.addEvent(divDesc, 'mouseover', getPopUpInfo, false); - this.addEvent(divDesc, 'mouseout', closePopUpInfo, false); - } - return divDesc; -}; - -/** - * @desc: creation of projectItem - * @type: private - * @topic: 0 - */ -GanttProject.prototype.createProjectItem = function() -{ - var self = this; - this.percentCompleted = this.getPercentCompleted(); - this.Duration = this.getDuration(); - - var projectItem = document.createElement("div"); - projectItem.id = this.Project.Id; - projectItem.style.cssText = ";z-index:1;position: absolute;left:" + this.posX + "px;top:" + this.posY + "px;"; - projectItem.style.width = this.Duration * this.Chart.hourInPixelsWork + "px"; - - var tblProjectItem = document.createElement("table"); - projectItem.appendChild(tblProjectItem); - tblProjectItem.cellPadding = "0"; - tblProjectItem.cellSpacing = "0"; - tblProjectItem.style.cssText = "border: solid 1px #BC810D;"; - var width = this.Duration * this.Chart.hourInPixelsWork; - tblProjectItem.width = ((width == 0) ? 1 : width) + "px"; - tblProjectItem.style.width = ((width == 0) ? 1 : width) + "px"; - - var rowprojectItem = tblProjectItem.insertRow(tblProjectItem.rows.length); - - if (this.percentCompleted != -1) - { - if (this.percentCompleted != 0) - { - var cellprojectItem = document.createElement("TD"); - rowprojectItem.appendChild(cellprojectItem); - cellprojectItem.width = this.percentCompleted + "%"; - cellprojectItem.style.lineHeight = "1px"; - var imgPr = document.createElement("img"); - imgPr.style.width = (this.percentCompleted * this.Duration * this.Chart.hourInPixelsWork) / 100 + "px"; - imgPr.style.height = this.Chart.heightTaskItem + "px"; - cellprojectItem.appendChild(imgPr); - imgPr.src = this.Chart.imgs + "parentnode_filled.png"; - - } - - if (this.percentCompleted != 100) - { - var cellprojectItem = document.createElement("TD"); - rowprojectItem.appendChild(cellprojectItem); - cellprojectItem.width = (100 - this.percentCompleted) + "%"; - cellprojectItem.style.lineHeight = "1px"; - var imgPr = document.createElement("img"); - imgPr.style.width = ((100 - this.percentCompleted) * this.Duration * this.Chart.hourInPixelsWork) / 100 + "px"; - imgPr.style.height = this.Chart.heightTaskItem + "px"; - cellprojectItem.appendChild(imgPr); - imgPr.src = this.Chart.imgs + "progress_bg.png"; - } - - } else - { - var cellprojectItem = document.createElement("TD"); - rowprojectItem.appendChild(cellprojectItem); - cellprojectItem.width = "1px"; - cellprojectItem.style.lineHeight = "1px"; - var imgPr = document.createElement("img"); - imgPr.style.width = "1px"; - imgPr.style.height = this.Chart.heightTaskItem; - cellprojectItem.appendChild(imgPr); - imgPr.src = this.Chart.imgs + "progress_bg.png"; - - } - - var divTaskInfo = document.createElement("div"); - divTaskInfo.style.cssText = "text-align:center;z-index:2;position:absolute;left:0px;top:0px;"; - // - - var tblTaskInfo = document.createElement("table"); - divTaskInfo.appendChild(tblTaskInfo); - tblTaskInfo.cellPadding = "0"; - tblTaskInfo.cellSpacing = "0"; - tblTaskInfo.height = this.Chart.heightTaskItem + "px"; - tblTaskInfo.width = ((this.Duration * this.Chart.hourInPixelsWork == 0) ? 1 : this.Duration * this.Chart.hourInPixelsWork) + "px"; - - var rowTaskInfo = tblTaskInfo.insertRow(0); - var cellTaskInfo = document.createElement("td"); - cellTaskInfo.align = "center"; - cellTaskInfo.vAlign = "top"; - cellTaskInfo.height = this.Chart.heightTaskItem + "px"; - cellTaskInfo.className = "moveInfo"; - cellTaskInfo.style.cssText = ";white-space:nowrap;"; - rowTaskInfo.appendChild(cellTaskInfo); - projectItem.appendChild(divTaskInfo); - - if (this.Project.ParentTasks.length == 0) - { - projectItem.style.display = "none"; - - } - - if (this.Chart._showTooltip) - { - var getPopUpInfo = function(e) { - if ((!self.Chart._isMove) && (!self.Chart._isResize)) self.getPopUpInfo(self.projectItem[0], e); - }; - var closePopUpInfo = function() { - self.closePopUpInfo(); - }; - - this.addEvent(divTaskInfo, 'mouseover', getPopUpInfo, false); - this.addEvent(divTaskInfo, 'mouseout', closePopUpInfo, false); - } - return projectItem; -}; -/** - * @desc: Creation of projectNameItem - * @type: private - * @topic: 0 - */ -GanttProject.prototype.createProjectNameItem = function() -{ - var self = this; - var divName = document.createElement("div"); - divName.style.cssText = "cursor:pointer;color:#003366;font-weight:bold;font-size:12px;font-family:Tahoma,Arial;white-space:nowrap;height:15px;z-index:1;position:absolute;left:" + 5 + "px;top:" + this.posY + "px;"; - divName.innerHTML = this.Project.Name; - divName.title = this.Project.Name; - if (this.Chart.isShowConMenu) - { - var showContMenu = function(event) { - - if (self.Chart.contextMenu.clear) self.Chart.contextMenu.clear(); - - var hideContMenu = null; - if (!self.Chart._isIE) - { - hideContMenu = function() { - self.Chart.contextMenu.hideContextMenu(); - self.Chart.content.removeEventListener("mousedown", hideContMenu, false); - }; - - } else - { - hideContMenu = function() { - self.Chart.contextMenu.hideContextMenu(); - self.Chart.content.detachEvent("mousedown", hideContMenu); - }; - } - - self.Chart.content.onmousedown = hideContMenu; - - if (!self.Chart._isIE) - { - event.stopPropagation(); - - } else - { - event.cancelBubble = true; - } - - self.Chart._showContextMenu(event, self); - - }; - - if (this.Chart._isIE) - { - this.addEvent(divName, "contextmenu", function(e) { - showContMenu(e); - return false; - }, false); - - } else - { - this.addEvent(divName, "contextmenu", function(e) { - e.preventDefault(); - showContMenu(e); - }, false); - } - - } - return divName; -}; -/** - * @desc: calculates and returns percent completed of project - * @type: public - * @topic: 0 - */ -GanttProject.prototype.getPercentCompleted = function() -{ - var sum = 0; - var percentCompleted = 0; - - for (var i = 0; i < this.Project.ParentTasks.length; i++) { - sum += parseInt(this.Project.ParentTasks[i].PercentCompleted); - } - if (this.Project.ParentTasks.length != 0) { - return percentCompleted = Math.round(sum / this.Project.ParentTasks.length); - } - else { - return percentCompleted = -1; - } -}; -/** - * @desc: calculates and returns the duration of project in hours - * @type: public - * @topic: 0 - */ -GanttProject.prototype.getDuration = function() -{ - var duration = 0; - var tmpDuration = 0; - if (this.Project.ParentTasks.length > 0) - { - for (var i = 0; i < this.Project.ParentTasks.length; i++) - { - tmpDuration = this.Project.ParentTasks[i].Duration * 24 / this.Chart.hoursInDay + (this.Project.ParentTasks[i].EST - this.Chart.startDate) / (60 * 60 * 1000); - if (tmpDuration > duration) - { - duration = tmpDuration; - } - } - return ((duration - this.posX) / 24) * this.Chart.hoursInDay; - - } else - { - return 0; - } - -}; -/** - * @desc: returns id of project. - * @type: public - * @topic: 0 - */ -GanttProject.prototype.getId = function() -{ - return this.Project.Id; -}; -/** - * @desc: returns name of project. - * @type: public - * @topic: 0 - */ -GanttProject.prototype.getName = function() -{ - return this.Project.Name; -}; -/** - * @desc: returns start date of project. - * @type: public - * @topic: 0 - */ -GanttProject.prototype.getStartDate = function() -{ - return this.Project.StartDate; -}; - -/** - * @desc: add event - * @param: elm - current element - * @param: evType - string that specifies any of the standard DHTML Events - * @param: fn - pointer that specifies the function to call when sEvent fires - * @type: private - * @topic: 5 - */ -GanttTask.prototype.addEvent = function (elm, evType, fn, useCapture) -{ - if (elm.addEventListener) { - elm.addEventListener(evType, fn, useCapture); - return true; - } - else if (elm.attachEvent) { - return elm.attachEvent('on' + evType, fn); - } - else { - elm['on' + evType] = fn; - } -}; -/** - * @desc: the beginning of movement of task - * @param: event - (object)event - * @type: private - * @topic: 5 - */ -GanttTask.prototype.startMove = function (event) -{ - this.moveChild = event.ctrlKey; - this.MouseX = event.screenX; - - this.getMoveInfo(); - - this.checkMove = true; - - if (this.Chart.isShowDescTask) { - this.hideDescTask(); - } - if (this.Chart._isFF) document.body.style.cursor = "move"; - if (this.Chart._isIE) event.srcElement.style.cursor = "move"; -}; - -GanttTask.prototype.showDescTask = function() -{ - var posX = (parseInt(this.cTaskItem[0].style.left) + this.TaskInfo.Duration * this.Chart.hourInPixelsWork + 10); - this.descrTask.style.left = posX + "px"; - this.descrTask.innerHTML = this.getDescStr(); - this.descrTask.style.visibility = 'visible'; - -}; -GanttTask.prototype.hideDescTask = function() -{ - this.descrTask.style.visibility = 'hidden'; -}; -GanttTask.prototype.getDescStr = function() -{ - var str = '', delim = ", "; - for (var i = 0; i < this.Chart.paramShowTask.length; i++) { - var prop = this.Chart.paramShowTask[i], propValue = this.TaskInfo[prop]; - switch (prop) { - case "Name": - if (str != "")str += delim; - str += propValue; - break; - case "EST": - if (str != "")str += delim; - str += propValue.getDate() + "." + (propValue.getMonth() + 1) + "." + propValue.getFullYear(); - break; - case "S-F": - if (str != "")str += delim; - propValue = this.TaskInfo["EST"]; - str += propValue.getDate() + "." + (propValue.getMonth() + 1) + "." + propValue.getFullYear() + " - "; - propValue = this.getFinishDate(); - str += propValue.getDate() + "." + (propValue.getMonth() + 1) + "." + propValue.getFullYear(); - break; - case "Duration": - if (str != "")str += delim; - str += propValue + "h"; - break; - case "PercentCompleted": - if (str != "")str += delim; - str += propValue + "%"; - break; - default: - break; - } - } - return str; -}; -/** - * @desc: returns id of task - * @type: public - * @topic: 0 - */ -GanttTask.prototype.getId = function() -{ - return this.TaskInfo.Id; -}; -/** - * @desc: returns name of task - * @type: public - * @topic: 0 - */ -GanttTask.prototype.getName = function() -{ - return this.TaskInfo.Name; -}; -/** - * @desc: returns duration of task (in hours) - * @type: public - * @topic: 0 - */ -GanttTask.prototype.getDuration = function() -{ - return this.TaskInfo.Duration; -}; -/** - * @desc: returns EST of task - * @type: public - * @topic: 0 - */ -GanttTask.prototype.getEST = function() -{ - return this.TaskInfo.EST; -}; -/** - * @desc: calculates and returns FinishDate of task - * @type: public - * @topic: 0 - */ -GanttTask.prototype.getFinishDate = function() -{ - var date = new Date(this.TaskInfo.EST); - date.setDate(date.getDate() + parseInt((this.TaskInfo["Duration"]-1)/this.Chart.hoursInDay+1)-1); - return date; -}; -/** - * @desc: returns PercentCompleted of task - * @type: public - * @topic: 0 - */ -GanttTask.prototype.getPercentCompleted = function() -{ - return this.TaskInfo.PercentCompleted; -}; -/** - * @desc: returns PredecessorTaskId of task - * @type: public - * @topic: 0 - */ -GanttTask.prototype.getPredecessorTaskId = function() -{ - return this.TaskInfo.PredecessorTaskId ? this.TaskInfo.PredecessorTaskId : null; -}; -/** - * @desc: returns ParentTaskId of task - * @type: public - * @topic: 0 - */ -GanttTask.prototype.getParentTaskId = function() -{ - return this.parentTask ? this.parentTask.getId() : null; -}; - -GanttTask.prototype.moveDescTask = function() -{ - var posX = (parseInt(this.cTaskItem[0].style.left) + this.TaskInfo.Duration * this.Chart.hourInPixelsWork + 10); - this.descrTask.style.left = posX + "px"; -}; - -/** - * @desc: Defines max and min position of movement - * @type: private - * @topic: 4 - */ -GanttTask.prototype.getMoveInfo = function() -{ - this.posX = parseInt(this.cTaskItem[0].style.left); - var widthTaskItem = parseInt(this.cTaskItem[0].childNodes[0].firstChild.width); - var posParentTaskItem = (this.parentTask == null) ? 0 : parseInt(this.parentTask.cTaskItem[0].style.left); - var posPredTaskItem = (this.predTask == null) ? 0 : parseInt(this.predTask.cTaskItem[0].style.left) + parseInt(this.predTask.cTaskItem[0].childNodes[0].firstChild.width); - var widthParentTaskItem = (this.parentTask == null) ? 0 : parseInt(this.parentTask.cTaskItem[0].childNodes[0].firstChild.width); - - var childPredPosX = 0; - var childParentPosX = 0; - var childParentPosXR = 0; - if (this.childPredTask.length > 0) - { - var posChildTaskItem = null; - for (var n = 0; n < this.childPredTask.length; n++) - { - if ((!posChildTaskItem) || ((posChildTaskItem) && (posChildTaskItem > parseInt(this.childPredTask[n].cTaskItem[0].style.left)))) - { - posChildTaskItem = parseInt(this.childPredTask[n].cTaskItem[0].style.left); - } - } - childPredPosX = posChildTaskItem; - } - if (this.childTask.length > 0) - { - var posChildTaskItemR = null; - for (var n = 0; n < this.childTask.length; n++) - { - if ((!posChildTaskItemR) || ((posChildTaskItemR) && (posChildTaskItemR > (parseInt(this.childTask[n].cTaskItem[0].style.left))))) - { - posChildTaskItemR = parseInt(this.childTask[n].cTaskItem[0].style.left); - } - } - childParentPosXR = posChildTaskItemR; - - var posChildTaskItem = null; - for (var n = 0; n < this.childTask.length; n++) - { - if ((!posChildTaskItem) || ((posChildTaskItem) && (posChildTaskItem < (parseInt(this.childTask[n].cTaskItem[0].style.left) + parseInt(this.childTask[n].cTaskItem[0].firstChild.firstChild.width))))) - { - posChildTaskItem = parseInt(this.childTask[n].cTaskItem[0].style.left) + parseInt(this.childTask[n].cTaskItem[0].firstChild.firstChild.width); - } - } - - childParentPosX = posChildTaskItem; - } - - if (!this.moveChild) - { - if (this.childPredTask.length > 0) { - if (this.maxPosXMove < childPredPosX) this.maxPosXMove = childPredPosX; - } - if (this.childTask.length > 0) { - if ((this.childPredTask.length > 0) && (this.maxPosXMove - widthTaskItem) > childParentPosXR) this.maxPosXMove = this.maxPosXMove - ((this.maxPosXMove - widthTaskItem) - childParentPosXR); - if (!(this.childPredTask.length > 0)) this.maxPosXMove = childParentPosXR + widthTaskItem; - this.minPosXMove = (childParentPosX - widthTaskItem); - } - - if (posParentTaskItem > 0) - { - if ((!(this.childPredTask.length > 0)) && (this.childTask.length > 0)) { - if (this.maxPosXMove > posParentTaskItem + widthParentTaskItem) { - this.maxPosXMove = posParentTaskItem + widthParentTaskItem; - } - } - if (this.minPosXMove <= posParentTaskItem) { - this.minPosXMove = posParentTaskItem; - } - if ((!(this.childTask.length > 0)) && (!(this.childPredTask.length > 0))) { - this.maxPosXMove = posParentTaskItem + widthParentTaskItem; - - } else if ((!(this.childTask.length > 0)) && (this.childPredTask.length > 0)) { - if ((posParentTaskItem + widthParentTaskItem) > posPredTaskItem) { - this.maxPosXMove = childPredPosX; - } - } - } - - if (posPredTaskItem > 0) { - if (this.minPosXMove <= posPredTaskItem) { - this.minPosXMove = posPredTaskItem; - } - } - if ((posPredTaskItem == 0) && (posParentTaskItem == 0)) { - if (this.minPosXMove <= this.Chart.initialPos) { - this.minPosXMove = this.Chart.initialPos; - } - } - } else - { - if ((posParentTaskItem > 0) && (posPredTaskItem == 0)) - { - this.minPosXMove = posParentTaskItem; - this.maxPosXMove = posParentTaskItem + widthParentTaskItem; - - } else if ((posParentTaskItem == 0) && (posPredTaskItem == 0)) - { - this.minPosXMove = this.Chart.initialPos; - this.maxPosXMove = -1; - - } else if ((posParentTaskItem > 0) && (posPredTaskItem > 0)) - { - this.minPosXMove = posPredTaskItem; - this.maxPosXMove = posParentTaskItem + widthParentTaskItem; - - } else if ((posParentTaskItem == 0) && (posPredTaskItem > 0)) - { - this.minPosXMove = posPredTaskItem; - this.maxPosXMove = -1; - } - - if ((this.parentTask) && (this.childPredTask.length > 0)) - { - var posChildTaskItem = this.getMaxPosPredChildTaskItem(this); - var posParentTaskItem = parseInt(this.parentTask.cTaskItem[0].style.left) + parseInt(this.parentTask.cTaskItem[0].firstChild.firstChild.width); - this.maxPosXMove = this.posX + widthTaskItem + posParentTaskItem - posChildTaskItem; - } - } -}; -/** - * @desc: The beginning of extension of task - * @param: event - (object) event - * @type: private - * @topic: 5 - */ -GanttTask.prototype.startResize = function(event) -{ - this.MouseX = event.screenX; - this.getResizeInfo(); - if (this.Chart.isShowDescTask) { - this.hideDescTask(); - } - this.checkResize = true; - this.taskItemWidth = parseInt(this.cTaskItem[0].firstChild.firstChild.width); - if (this.Chart._isFF)document.body.style.cursor = "e-resize"; - -}; -/** - * @desc: Defines max and min position of stretchings - * @type: private - * @topic: 4 - */ -GanttTask.prototype.getResizeInfo = function() -{ - var taskItem = this.cTaskItem[0]; - var posParentTaskItem = (this.parentTask == null) ? 0 : parseInt(this.parentTask.cTaskItem[0].style.left); - var widthParentTaskItem = (this.parentTask == null) ? 0 : parseInt(this.parentTask.cTaskItem[0].childNodes[0].firstChild.width); - var posTaskItem = parseInt(this.cTaskItem[0].style.left); - - var childPredPosX = 0; - var childParentPosX = 0; - if (this.childPredTask.length > 0) - { - var posChildTaskItem = null; - for (var n = 0; n < this.childPredTask.length; n++) - { - if ((!posChildTaskItem) || ((posChildTaskItem) && (posChildTaskItem > parseInt(this.childPredTask[n].cTaskItem[0].style.left)))) - { - posChildTaskItem = parseInt(this.childPredTask[n].cTaskItem[0].style.left); - - } - } - childPredPosX = posChildTaskItem; - } - - if (this.childTask.length > 0) - { - var posChildTaskItem = null; - for (var n = 0; n < this.childTask.length; n++) - { - if ((!posChildTaskItem) || ((posChildTaskItem) && (posChildTaskItem < (parseInt(this.childTask[n].cTaskItem[0].style.left) + parseInt(this.childTask[n].cTaskItem[0].firstChild.firstChild.width))))) - { - posChildTaskItem = parseInt(this.childTask[n].cTaskItem[0].style.left) + parseInt(this.childTask[n].cTaskItem[0].firstChild.firstChild.width); - } - } - - childParentPosX = posChildTaskItem; - } - - this.minWidthResize = this.Chart.dayInPixels; - - if (this.childTask.length > 0) - { - this.minWidthResize = childParentPosX - posTaskItem; - } - - if ((this.childPredTask.length > 0) && (!this.parentTask)) - { - this.maxWidthResize = childPredPosX - posTaskItem; - - } else if ((this.childPredTask.length > 0) && (this.parentTask)) - { - var w1 = posParentTaskItem + widthParentTaskItem - posTaskItem; - var w2 = childPredPosX - posTaskItem; - this.maxWidthResize = Math.min(w1, w2); - - } else if ((this.childPredTask.length == 0) && (this.parentTask)) - { - this.maxWidthResize = posParentTaskItem + widthParentTaskItem - posTaskItem; - } - -}; -/** - * @desc: creation of taskItem - * @type: private - * @topic: 0 - */ -GanttTask.prototype.createTaskItem = function() -{ - var self = this; - this.posX = this.Chart.getPosOnDate(this.TaskInfo.EST); - - var itemControl = document.createElement("div"); - itemControl.id = this.TaskInfo.Id; - itemControl.style.cssText = ";z-index:1;position:absolute;left:" + this.posX + "px;top:" + this.posY + "px;"; - - var divTaskItem = document.createElement("div"); - itemControl.appendChild(divTaskItem); - divTaskItem.style.cssText = "z-index:1;position: absolute;left:0px;top:0px;"; - - var tblTaskItem = document.createElement("table"); - divTaskItem.appendChild(tblTaskItem); - tblTaskItem.cellPadding = "0"; - tblTaskItem.cellSpacing = "0"; - tblTaskItem.width = this.TaskInfo.Duration * this.Chart.hourInPixelsWork + "px"; - tblTaskItem.style.cssText = "border: solid 1px #6589A9;"; - - var rowTblTask = tblTaskItem.insertRow(tblTaskItem.rows.length); - - if (this.TaskInfo.PercentCompleted != 0) - { - var cellTblTask = document.createElement("td"); - rowTblTask.appendChild(cellTblTask); - cellTblTask.height = this.Chart.heightTaskItem + "px"; - cellTblTask.width = this.TaskInfo.PercentCompleted + "%"; - cellTblTask.style.lineHeight = "1px"; - var imgPr = document.createElement("img"); - imgPr.style.width = (this.TaskInfo.PercentCompleted * this.TaskInfo.Duration * this.Chart.hourInPixelsWork) / 100 + "px"; - imgPr.style.height = this.Chart.heightTaskItem + "px"; - cellTblTask.appendChild(imgPr); - imgPr.src = this.Chart.imgs + "progress_filled.png"; - } - - if (this.TaskInfo.PercentCompleted != 100) - { - var cellTblTask = document.createElement("td"); - rowTblTask.appendChild(cellTblTask); - cellTblTask.height = this.Chart.heightTaskItem + "px"; - cellTblTask.width = (100 - this.TaskInfo.PercentCompleted) + "%"; - cellTblTask.style.lineHeight = "1px"; - var imgPrF = document.createElement("img"); - imgPrF.style.width = ((100 - this.TaskInfo.PercentCompleted) * this.TaskInfo.Duration * this.Chart.hourInPixelsWork) / 100 + "px"; - imgPrF.style.height = this.Chart.heightTaskItem + "px"; - cellTblTask.appendChild(imgPrF); - imgPrF.src = this.Chart.imgs + "progress_bg.png"; - - } - - if (this.Chart.isEditable) - { - var divTaskInfo = document.createElement("div"); - divTaskInfo.style.cssText = "text-align:center;font-size:9px;z-index:2;position: absolute;left:0px;top:0px;"; - - var tblTaskInfo = document.createElement("table"); - divTaskInfo.appendChild(tblTaskInfo); - tblTaskInfo.cellPadding = "0"; - tblTaskInfo.cellSpacing = "0"; - tblTaskInfo.height = this.Chart.heightTaskItem + "px"; - tblTaskInfo.width = this.TaskInfo.Duration * this.Chart.hourInPixelsWork + "px"; - - var rowTaskInfo = tblTaskInfo.insertRow(0); - var cellTaskInfo = document.createElement("TD"); - cellTaskInfo.align = "center"; - cellTaskInfo.vAlign = "top"; - cellTaskInfo.height = this.Chart.heightTaskItem + "px"; - cellTaskInfo.className = "moveInfo"; - cellTaskInfo.style.cssText = ";white-space:nowrap;font-size:9px"; - rowTaskInfo.appendChild(cellTaskInfo); - itemControl.appendChild(divTaskInfo); - } - - var divTaskName = document.createElement("div"); - itemControl.appendChild(divTaskName); - divTaskName.style.cssText = ";z-index:2;position: absolute;left:0px;top:0px;"; - - var divMove = document.createElement("div"); - divMove.innerHTML = ""; - if (this.Chart._isIE) - { - divMove.style.background = "#000000"; - divMove.style.filter = "alpha(opacity=0)"; - } - divMove.style.height = this.Chart.heightTaskItem + "px"; - divMove.style.width = this.TaskInfo.Duration * this.Chart.hourInPixelsWork + "px"; - divTaskName.appendChild(divMove); - - if (this.Chart._showTooltip) - { - var getPopUpInfo = function(e) { - if ((!self.Chart._isMove) && (!self.Chart._isResize)) self.getPopUpInfo(self.cTaskItem[0], e); - }; - var closePopUpInfo = function() { - self.closePopUpInfo(); - }; - - this.addEvent(divMove, 'mouseover', getPopUpInfo, false); - this.addEvent(divMove, 'mouseout', closePopUpInfo, false); - } - - var taskClick = function() { - self.Chart.callEvent("onTaskClick", [self]); - }; - this.addEvent(divMove, 'click', taskClick, false); - - if (this.Chart.isEditable) - { - //Create resize area - var divResize = document.createElement("div"); - divResize.style.cssText = ";z-index:10;position: absolute;left:" + (this.TaskInfo.Duration * this.Chart.hourInPixelsWork - 10) + "px;top:0px;"; - divResize.style.height = this.Chart.heightTaskItem + "px"; - divResize.style.width = "10px"; - divResize.innerHTML = ""; - divTaskName.appendChild(divResize); - - var startMove = function(e) { - if (self.Chart.callEvent("onTaskStartDrag", [self])===false) return; - - var moveItem = function(e1) { - if (self.checkMove) self.moveItem(e1); - }; - var endMove = function() { - if (self.checkMove) { - self.endMove(); - self.Chart._isMove = false; - if (self.Chart._isIE) - { - document.body.releaseCapture(); - document.detachEvent("onmousemove", moveItem); - document.detachEvent("onmouseup", endMove); - } else { - document.removeEventListener("mousemove", moveItem, true); - document.removeEventListener("mouseup", endMove, true); - } - if (self.wasMoved) self.Chart.callEvent("onTaskEndDrag", [self]); - } - }; - self.addEvent(document, 'mousemove', moveItem, true); - self.addEvent(document, 'mouseup', endMove, true); - - if (self.Chart._showTooltip) self.closePopUpInfo(); - self.startMove(e); - self.Chart._isMove = true; - if (self.Chart._isIE) document.body.setCapture(false); - }; - - var startResize = function(e) { - if (self.Chart.callEvent("onTaskStartResize", [self])===false) return; - - var resizeItem = function(e1) { - if (self.checkResize)self.resizeItem(e1); - }; - - var endResizeItem = function() { - if (self.checkResize) { - self.endResizeItem(); - self.Chart._isResize = false; - if (self.Chart._isIE) - { - document.body.releaseCapture(); - document.detachEvent("onmousemove", resizeItem); - document.detachEvent("onmouseup", endResizeItem); - } else { - document.removeEventListener("mousemove", resizeItem, true); - document.removeEventListener("mouseup", endResizeItem, true); - } - if (self.wasResized) self.Chart.callEvent("onTaskEndResize", [self]); - } - }; - - self.addEvent(document, 'mousemove', resizeItem, false); - self.addEvent(document, 'mouseup', endResizeItem, false); - - self.startResize(e); - if (self.Chart._isIE) document.body.setCapture(false); - self.Chart._isResize = true; - }; - - this.addEvent(divMove, 'mousedown', startMove, false); - this.addEvent(divResize, 'mousedown', startResize, false); - - var setCursorResize = function(e2) { - if (!self.Chart._isMove) (e2.srcElement?e2.srcElement:e2.target).style.cursor = "e-resize"; - }; - var setCursorStandart = function(e3) { - if (!self.checkResize) (e3.srcElement?e3.srcElement:e3.target).style.cursor = ""; - }; - - this.addEvent(divResize, 'mouseover', setCursorResize, false); - this.addEvent(divResize, 'mouseout', setCursorStandart, false); - } - return itemControl; -}; -/** - * @desc: creation of taskNameItem - * @type: private - * @topic: 0 - */ -GanttTask.prototype.createTaskNameItem = function(hasChildren) -{ - var self = this; - var divName = document.createElement("div"); - divName.id = this.TaskInfo.Id; - divName.style.cssText = "cursor:pointer;white-space:nowrap;height:15px;z-index:1;position:absolute;left:20px;top: " + this.posY + "px;"; - if (hasChildren) divName.style.fontWeight = "bold"; - divName.className = "taskNameItem"; - divName.title = this.TaskInfo.Name; - divName.innerHTML = this.TaskInfo.Name; - if (this.Chart.isShowConMenu) - { - var showContMenu = function(event) { - - if (self.Chart.contextMenu.clear) self.Chart.contextMenu.clear(); - - var hideContMenu = function() { - self.Chart.contextMenu.hideContextMenu(); - if (self.Chart._isIE) - self.Chart.content.detachEvent("mousedown", hideContMenu); - else - self.Chart.content.removeEventListener("mousedown", hideContMenu, false); - }; - - self.Chart.content.onmousedown = hideContMenu; - - if (!self.Chart._isIE) - { - event.stopPropagation(); - } else - { - event.cancelBubble = true; - } - - self.Chart._showContextMenu(event, self); - - }; - - if (this.Chart._isIE) - { - this.addEvent(divName, "contextmenu", function(e) { - showContMenu(e); - return false; - }, false); - - } else - { - this.addEvent(divName, "contextmenu", function(e) { - e.preventDefault(); - showContMenu(e); - }, false); - } - } - return divName; -}; - - -GanttTask.prototype.createTaskDescItem = function() -{ - var posX = (this.posX + this.TaskInfo.Duration * this.Chart.hourInPixelsWork + 10); - var divDesc = document.createElement("div"); - divDesc.style.cssText += ";z-index:1;position:absolute;left:" + posX + "px;top:" + this.posY + "px;"; - divDesc.innerHTML = this.getDescStr(); - divDesc.className = "descTask"; - this.descrTask = divDesc; - - if (this.Chart._showTooltip) - { - var self = this; - var getPopUpInfo = function(e) { - if ((!self.Chart._isMove) && (!self.Chart._isResize)) self.getPopUpInfo(self.descrTask, e); - }; - var closePopUpInfo = function() { - self.closePopUpInfo(); - }; - - this.addEvent(divDesc, 'mouseover', getPopUpInfo, false); - this.addEvent(divDesc, 'mouseout', closePopUpInfo, false); - } - return divDesc; -}; - -/** - * @desc: check Width of taskNameItem - * @type: private - * @topic: 4 - */ -GanttTask.prototype.checkWidthTaskNameItem = function() -{ - if (this.cTaskNameItem[0].offsetWidth + this.cTaskNameItem[0].offsetLeft > this.Chart.maxWidthPanelNames) - { - var width = this.cTaskNameItem[0].offsetWidth + this.cTaskNameItem[0].offsetLeft - this.Chart.maxWidthPanelNames; - var countChar = Math.round(width / (this.cTaskNameItem[0].offsetWidth / this.cTaskNameItem[0].firstChild.length)); - var tName = this.TaskInfo.Name.substring(0, this.cTaskNameItem[0].firstChild.length - countChar - 3); - tName += "..."; - this.cTaskNameItem[0].innerHTML = tName; - } - -}; -/** - * @desc: creation of GanttTask - * @type: private - * @topic: 0 - */ -GanttTask.prototype.create = function() -{ - var containerTasks = this.Chart.oData.firstChild; - var containerNames = null; - if (this.Chart._showTreePanel) containerNames = this.Chart.panelNames.firstChild; - var predecessorTask = this.TaskInfo.PredecessorTask; - var parentTask = this.TaskInfo.ParentTask; - var isCParentTask = (this.TaskInfo.ChildTasks.length > 0); - var self = this; - - this.cTaskItem = []; - this.cTaskNameItem = []; - - //creation arrTasks - if (!parentTask) - { - if (this.TaskInfo.previousParentTask) { - this.previousParentTask = this.Project.getTaskById(this.TaskInfo.previousParentTask.Id); - var lastChildTask = this.Chart.getLastChildTask(this.previousParentTask); - this.posY = parseInt(lastChildTask.cTaskItem[0].style.top) + this.Chart.heightTaskItem + 11; - this.previousParentTask.nextParentTask = this; - - } else { - this.posY = parseInt(this.Project.projectItem[0].style.top) + this.Chart.heightTaskItem + 11; - } - } - - if (parentTask) { - var task = this.Project.getTaskById(this.TaskInfo.ParentTask.Id); - this.parentTask = task; - - if (this.TaskInfo.previousChildTask) { - this.previousChildTask = this.Project.getTaskById(this.TaskInfo.previousChildTask.Id); - var lastChildTask = this.Chart.getLastChildTask(this.previousChildTask); - this.posY = parseInt(lastChildTask.cTaskItem[0].style.top) + this.Chart.heightTaskItem + 11; - this.previousChildTask.nextChildTask = this; - - } else { - this.posY = parseInt(task.cTaskItem[0].style.top) + this.Chart.heightTaskItem + 11; - } - task.childTask.push(this); - } - - if (predecessorTask) { - var task = this.Project.getTaskById(predecessorTask.Id); - this.predTask = task; - task.childPredTask.push(this); - } - - //creation task item - this.cTaskItem.push(this.createTaskItem()); - containerTasks.appendChild(this.cTaskItem[0]); - - if (this.Chart.panelNames) { - this.cTaskNameItem.push(this.createTaskNameItem(isCParentTask)); - this.Chart.panelNames.firstChild.appendChild(this.cTaskNameItem[0]); - } - - if (this.Chart.isShowDescTask) { - containerTasks.appendChild(this.createTaskDescItem()); - } - - //Create Connecting Lines - var arrConnectingLines = []; - if (predecessorTask) arrConnectingLines = this.createConnectingLinesDS(); - this.cTaskItem.push(arrConnectingLines); - - if (this.Chart.panelNames) - { - //Create Connecting Lines - var arrConnectingLinesNames = []; - if (parentTask) - { - this.cTaskNameItem[0].style.left = parseInt(this.parentTask.cTaskNameItem[0].style.left) + 15 + "px"; - arrConnectingLinesNames = this.createConnectingLinesPN(); - } - this.checkWidthTaskNameItem(); - - var treeImg = null; - if (isCParentTask) treeImg = this.createTreeImg(); - - this.cTaskNameItem.push(arrConnectingLinesNames); - this.cTaskNameItem.push(treeImg); - } - this.addDayInPanelTime(); - return this; -}; - -/** - * @desc: creation of image of node - * @type: private - * @topic: 4 - */ -GanttTask.prototype.createTreeImg = function() -{ - var self = this; - var treeImg = new Image(); - treeImg.src = this.Chart.imgs + "minus.gif"; - treeImg.id = this.TaskInfo.Id; - - treeImg.onclick = function() - { - if (self._isOpen) - { - this.src = self.Chart.imgs + "plus.gif"; - self._isOpen = false; - self.hideChildTasks(self); - self.shiftCurrentTasks(self, -self._heightHideTasks); - } - else - { - this.src = self.Chart.imgs + "minus.gif"; - self._isOpen = true; - self.shiftCurrentTasks(self, self._heightHideTasks); - self.showChildTasks(self, true); - self._heightHideTasks = 0; - } - }; - - this.Chart.panelNames.firstChild.appendChild(treeImg); - treeImg.style.cssText = "cursor:pointer;left:" + (parseInt(this.cTaskNameItem[0].style.left) - 12) + "px;top:" + (parseInt(this.cTaskNameItem[0].style.top) + 3) + "px;z-index:12;position:absolute;"; - - return treeImg; -}; -/** - * @desc: returns last child of GanttTask - * @type: private - * @topic: 2 - */ -GanttChart.prototype.getLastChildTask = function(task) -{ - if (task.childTask.length > 0) - { - return this.getLastChildTask(task.childTask[task.childTask.length - 1]); - - } else - { - return task; - } - -}; -/** - * @desc: dhtmlXMLSenderObject constructor - * @type: public - * @topic: 0 - */ -dhtmlXMLSenderObject = function(ganttChart) -{ - this.xmlHttp = this.createXMLHttpRequest(); - this.isProcessed = false; - this.path = null; - this.filename = null; - this.Chart = ganttChart; -}; -/** - * @desc: creation (object) XMLHttpRequest - * @type: private - * @topic: 4 - */ -dhtmlXMLSenderObject.prototype.createXMLHttpRequest = function() -{ - if (window.XMLHttpRequest) { - return new XMLHttpRequest(); - } - else if (window.ActiveXObject) { - return new ActiveXObject("Microsoft.XMLHTTP"); - } -}; -/** - * @desc: Sends the data on a server - * @type: private - * @topic: 6 - */ -dhtmlXMLSenderObject.prototype.sendData = function(filename, path, xmlData) -{ - var self = this; - this.path = path; - this.filename = filename; - - if ((this.path == null) || (this.path == "")) - { - this.Chart.Error.throwError("DATA_SEND_ERROR", 3, null); - return; - } - if ((this.filename == null) || (this.filename == "")) - { - this.Chart.Error.throwError("DATA_SEND_ERROR", 4, null); - return; - } - - this.isProcessed = true; - this.xmlHttp.open("POST", this.path, true); - if (this.Chart._isFF) - { - this.xmlHttp.onerror = function() { - self.xmlHttp.onreadystatechange = null; - self.xmlHttp.abort(); - self.isProcessed = false; - } - } - this.xmlHttp.onreadystatechange = function() { - self.getStatus(); - }; - this.xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); - this.xmlHttp.send("data=" + encodeURI(xmlData) + "&filename=" + filename); - - -}; -/** - * @desc: Returns the status of operation - * @type: private - * @topic: 4 - */ -dhtmlXMLSenderObject.prototype.getStatus = function() -{ - if (this.xmlHttp.readyState == 4) - { - - var _status = ""; - try { - _status = this.xmlHttp.status; - - } catch(e) { - this.Chart.Error.throwError("DATA_SEND_ERROR", 1, null); - return 0; - } - - switch (_status) { - - case 0: - this.Chart.Error.throwError("DATA_SEND_ERROR", 1, null); - //this.xmlHttp.abort(); - break; - case 404: - this.Chart.Error.throwError("DATA_SEND_ERROR", 5, [this.path]); - //this.xmlHttp.abort(); - break; - case 500: - this.Chart.Error.throwError("DATA_SEND_ERROR", 2, null); - //this.xmlHttp.abort(); - break; - case 12029: - this.Chart.Error.throwError("DATA_SEND_ERROR", 1, null); - //this.xmlHttp.abort(); - break; - default: - if (!(_status >= 200 && _status < 300 || _status == 304)) - { - this.Chart.Error.throwError("DATA_SEND_ERROR", 0, null); - //this.xmlHttp.abort(); - } - break; - } - this.isProcessed = false; - - } -}; -/** - * @desc: GanttError constructor - * @type: private - * @topic: 0 - */ -function GanttError() { - - this.catches = []; - this._errors = []; - this._init(); - - return this; -} -/** - * @desc: initialization of control errors - * @type: private - * @topic: 4 - */ -GanttError.prototype._init = function() -{ - //connection errors - this._errors[0] = "Connection error"; - this._errors[1] = "Cannot connect"; - this._errors[2] = "Server error"; - this._errors[3] = "Path is null or empty"; - this._errors[4] = "Filename is null or empty"; - this._errors[5] = "File (%0) is not found"; - - //API errors - this._errors[6] = "Percent Complete should be a number"; - this._errors[7] = "Percent Complete should be <= 100"; - this._errors[8] = "Percent Complete should be >= 0"; - this._errors[9] = "Increase duration of task(%0)"; - this._errors[10] = "Reduce duration of task(%0)"; - this._errors[11] = "Increase EST of child task (%0)"; - this._errors[12] = "Reduce EST of task (%0)"; - this._errors[13] = "The project (%0) is added"; - this._errors[14] = "Start Date of the project < start Date of the control"; - this._errors[15] = "Task (%0) cannot be the child of predecessor task(%1)"; - this._errors[16] = "Time of the termination of predecessor task(%0) > EST of child task(%1)"; - this._errors[17] = "The Predecessor (%0) task does not exist"; - this._errors[18] = "The EST of task (%0) < start date of the control"; - this._errors[19] = "Time of the termination of parent task (%0) < time of the termination of child task(%1)"; - this._errors[20] = "The EST of task (%0) < EST of parent task(%1)"; - this._errors[21] = "The parent task (%0) does not exist"; - this._errors[22] = "The task (%0) is added"; - this._errors[23] = "The project (%0) is added"; - this._errors[24] = "Task (%0) EST < project (%1) startDate"; - this._errors[25] = "Parent task (%0) EST cannot be null"; - this._errors[26] = "Predecessor task (%0) position error. Reduce duration of predecessor task (%0) or increase EST of child task (%1)"; - this._errors[27] = "Predecessor task (%0) does not exist"; - this._errors[28] = "Increase duration of parent task (%0) or reduce EST of child task (%1) or reduce duration of child task(%1)"; - this._errors[29] = "Reduce EST of parent task (%0) or increase EST of child task (%1)"; - this._errors[30] = "The task(%0) does not exist"; - this._errors[31] = "The project(%0) does not exist"; - this._errors[32] = "Predecessor task(%0) and child task(%1) should have the same parent"; - this._errors[33] = "Reduce EST of parent task (%0) or increase EST of child task (%1)"; - this._errors[34] = "EST of task(%0) < start date of the project(%1)"; - this._errors[35] = "Percent Complete should be <= 100 and >= 0"; - this._errors[36] = "You may not connect a task to itself."; - this._errors[37] = "Cannot parse this XML string."; -}; -/** - * @desc: bind type of exception with handler - * @param: type - type of error - * @param: handler - handler name - * @type: private - * @topic: 4 - */ -GanttError.prototype.catchError = function(type, handler) { - - this.catches[type] = handler; -}; -/** - * @desc: get error string - * @param: str - error message - * @param: params - replace %i params in message - * @type: private - * @topic: 4 - */ -GanttError.prototype.getErrorString = function(str, params) -{ - if (!params) { - return str; - } else { - for (var i = 0; i < params.length; i++) { - - var re = new RegExp("%" + i, "gi"); - str = str.replace(re, params[i]); - - } - return str; - } -}; -/** - * @desc: throw error - * @param: type - type of error - * @param: description - description of error - * @param: params - current data - * @type: private - * @topic: 4 - */ -GanttError.prototype.throwError = function(type, description, params) { - if (this.catches[type]) - { - var index = parseInt(description); - var errorStr = this.getErrorString(this._errors[index], params); - return this.catches[type](type, errorStr, params); - } - return null; -}; - -function contextMenu(chart) -{ - this.Chart = chart; - this.TabContainer = null; - this.MenuPanel = null; - this.tabPanel = null; - this.arrTabs = []; - this.isShow = false; - this.hideDiv = null; - this._init(); -} - -contextMenu.prototype._init = function() -{ - this.createMenuPanel(); - this.createHideDiv(); - this.createTabContainer(); - this.createTabPanel(); - - var self = this; - var arrItems = []; - - var tab1 = this.createTab(1, "Rename task", "t", true, this); - tab1.addItem(1, "New name", document.createElement("input"), "text", function() { - tab1.arrItems[0].control.focus(); - }); - tab1.addItem(2, "Rename", document.createElement("input"), "button", - function() { - var name = tab1.arrItems[0].control.value; - try { - tab1.object.setName(name); - tab1.hide(); - } catch(e) { - - } - } - ); - - var tab2 = this.createTab(2, "Delete task", "t", true, this); - tab2.addItem(1, "Delete", document.createElement("input"), "button", - function() - { - try { - tab2.object.Project.deleteTask(tab2.object.TaskInfo.Id); - tab2.hide(); - } - catch(e) { - - } - } - ); - var tab3 = this.createTab(3, "Set EST", "t", true, this); - tab3.addItem(1, "EST", document.createElement("input"), "text", function() { - tab3.arrItems[0].control.focus(); - }); - tab3.addItem(2, "Move children", document.createElement("input"), "checkbox", function() { - tab3.arrItems[1].control.focus(); - }); - tab3.addItem(3, "Update", document.createElement("input"), "button", - function() { - var isMoveChild = tab3.arrItems[1].control.checked; - var arr = tab3.arrItems[0].control.value.split("."); - var est = (arr.length < 3) ? null : (new Date(arr[2], parseInt(arr[1]) - 1, arr[0])); - try { - if (tab3.object.setEST(est, isMoveChild)) tab3.hide(); - } catch(e) { - - } - } - ); - - var tab4 = this.createTab(4, "Set duration", "t", true, this); - tab4.addItem(1, "Duration", document.createElement("input"), "text", function() { - tab4.arrItems[0].control.focus(); - }); - tab4.addItem(2, "Update", document.createElement("input"), "button", - function() { - var d = tab4.arrItems[0].control.value; - try { - if (tab4.object.setDuration(d)) tab4.hide(); - } catch(e) { - - } - } - ); - - var tab5 = this.createTab(5, "Set % complete", "t", true, this); - tab5.addItem(1, "Percent Complete", document.createElement("input"), "text", function() { - tab5.arrItems[0].control.focus(); - }); - tab5.addItem(2, "Update", document.createElement("input"), "button", - function() { - var p = tab5.arrItems[0].control.value; - try { - if (tab5.object.setPercentCompleted(p)) tab5.hide(); - } catch(e) { - - } - } - ); - - var tab13 = this.createTab(13, "Set predecessor", "t", true, this); - tab13.addItem(1, "Predecessor", document.createElement("input"), "text", function() { - tab13.arrItems[0].control.focus(); - }); - tab13.addItem(2, "Update", document.createElement("input"), "button", - function() { - var p = tab13.arrItems[0].control.value; - try { - if (tab13.object.setPredecessor(p)) tab13.hide(); - } catch(e) { - - } - } - ); - - var tab6 = this.createTab(6, "Rename project", "p", true, this); - tab6.addItem(1, "New name", document.createElement("input"), "text", function() { - tab6.arrItems[0].control.focus(); - }); - tab6.addItem(2, "Rename", document.createElement("input"), "button", - function() { - var name = tab6.arrItems[0].control.value; - try { - tab6.object.setName(name); - tab6.hide(); - } catch(e) { - - } - } - ); - - var tab7 = this.createTab(7, "Delete project", "p", true, this); - tab7.addItem(1, "Delete", document.createElement("input"), "button", - function() { - try { - tab7.object.Chart.deleteProject(tab7.object.Project.Id); - tab7.hide(); - } catch(e) { - - } - } - ); - - var tab8 = this.createTab(8, "Set % complete", "p", true, this); - tab8.addItem(1, "Percent Complete", document.createElement("input"), "text", function() { - tab8.arrItems[0].control.focus(); - }); - tab8.addItem(2, "Update", document.createElement("input"), "button", - function() { - var p = tab8.arrItems[0].control.value; - try { - if (tab8.object.setPercentCompleted(p)) tab8.hide(); - } catch(e) { - - } - } - ); - - var tab9 = this.createTab(9, "Add new task", "p", true, this); - tab9.addItem(1, "Id", document.createElement("input"), "text", function() { - tab9.arrItems[0].control.focus(); - }); - tab9.addItem(2, "Name", document.createElement("input"), "text", function() { - tab9.arrItems[1].control.focus(); - }); - tab9.addItem(3, "EST", document.createElement("input"), "text", function() { - tab9.arrItems[2].control.focus(); - }); - tab9.addItem(4, "Duration", document.createElement("input"), "text", function() { - tab9.arrItems[3].control.focus(); - }); - tab9.addItem(5, "Percent complete", document.createElement("input"), "text", function() { - tab9.arrItems[4].control.focus(); - }); - tab9.addItem(6, "Parent task id", document.createElement("input"), "text", function() { - tab9.arrItems[5].control.focus(); - }); - tab9.addItem(7, "Pred task id", document.createElement("input"), "text", function() { - tab9.arrItems[6].control.focus(); - }); - - tab9.addItem(9, "Insert", document.createElement("input"), "button", - function() { - try { - var id = tab9.arrItems[0].control.value; - var name = tab9.arrItems[1].control.value; - var arr = tab9.arrItems[2].control.value.split("."); - var est = (arr.length < 3) ? null : (new Date(arr[2], parseInt(arr[1]) - 1, arr[0])); - var duration = tab9.arrItems[3].control.value; - var pc = tab9.arrItems[4].control.value; - var parentTaskId = tab9.arrItems[5].control.value; - var predTaskId = tab9.arrItems[6].control.value; - if (tab9.object.insertTask(id, name, est, duration, pc, predTaskId, parentTaskId)) tab9.hide(); - - } catch(e) { - - } - } - ); - - var tab11 = this.createTab(11, "Add successor task", "t", true, this); - tab11.addItem(1, "Id", document.createElement("input"), "text", function() { - tab11.arrItems[0].control.focus(); - }); - tab11.addItem(2, "Name", document.createElement("input"), "text", function() { - tab11.arrItems[1].control.focus(); - }); - tab11.addItem(3, "EST", document.createElement("input"), "text", function() { - tab11.arrItems[2].control.focus(); - }); - tab11.addItem(4, "Duration", document.createElement("input"), "text", function() { - tab11.arrItems[3].control.focus(); - }); - tab11.addItem(5, "Percent complete", document.createElement("input"), "text", function() { - tab11.arrItems[4].control.focus(); - }); - tab11.addItem(6, "Insert", document.createElement("input"), "button", - function() { - try { - var pr = tab11.object.Project; - var id = tab11.arrItems[0].control.value; - var name = tab11.arrItems[1].control.value; - var arr = tab11.arrItems[2].control.value.split("."); - var est = (arr.length < 3) ? null : (new Date(arr[2], parseInt(arr[1]) - 1, arr[0])); - var duration = tab11.arrItems[3].control.value; - var pc = tab11.arrItems[4].control.value; - var parentTaskId = (tab11.object.parentTask == null) ? "" : tab11.object.parentTask.TaskInfo.Id; - var predTaskId = tab11.object.TaskInfo.Id; - if (pr.insertTask(id, name, est, duration, pc, predTaskId, parentTaskId)) tab11.hide(); - - } catch(e) { - // - } - } - ); - - var tab10 = this.createTab(10, "Add child task", "t", true, this); - tab10.addItem(1, "Id", document.createElement("input"), "text", function() { - tab10.arrItems[0].control.focus(); - }); - tab10.addItem(2, "Name", document.createElement("input"), "text", function() { - tab10.arrItems[1].control.focus(); - }); - tab10.addItem(3, "EST", document.createElement("input"), "text", function() { - tab10.arrItems[2].control.focus(); - }); - tab10.addItem(4, "Duration", document.createElement("input"), "text", function() { - tab10.arrItems[3].control.focus(); - }); - tab10.addItem(5, "Percent complete", document.createElement("input"), "text", function() { - tab10.arrItems[4].control.focus(); - }); - tab10.addItem(6, "Insert", document.createElement("input"), "button", - function() { - try { - var pr = tab10.object.Project; - var id = tab10.arrItems[0].control.value; - var name = tab10.arrItems[1].control.value; - var arr = tab10.arrItems[2].control.value.split("."); - var est = (arr.length < 3) ? null : (new Date(arr[2], parseInt(arr[1]) - 1, arr[0])); - var duration = tab10.arrItems[3].control.value; - var pc = tab10.arrItems[4].control.value; - var parentTaskId = tab10.object.TaskInfo.Id; - var predTaskId = ""; - if (pr.insertTask(id, name, est, duration, pc, predTaskId, parentTaskId)) tab10.hide(); - - } catch(e) { - // - } - } - ); - - var tab12 = this.createTab(12, "-Insert new project-", "p", false, this); - tab12.addItem(1, "Id", document.createElement("input"), "text", function() { - tab12.arrItems[0].control.focus(); - }); - tab12.addItem(2, "Name", document.createElement("input"), "text", function() { - tab12.arrItems[1].control.focus(); - }); - tab12.addItem(3, "Start date", document.createElement("input"), "text", function() { - tab12.arrItems[2].control.focus(); - }); - tab12.addItem(4, "Insert", document.createElement("input"), "button", - function() { - try { - - var id = tab12.arrItems[0].control.value; - var namePr = tab12.arrItems[1].control.value; - var arr = tab12.arrItems[2].control.value.split("."); - var startDatePr = (arr.length < 3) ? null : (new Date(arr[2], parseInt(arr[1]) - 1, arr[0])); - if (self.Chart.insertProject(id, namePr, startDatePr)) tab12.hide(); - - } catch(e) { - - } - } - ); -}; - -contextMenu.prototype.createHideDiv = function() -{ - this.hideDiv = document.createElement("div"); - this.hideDiv.style.position = "absolute"; - this.hideDiv.style.left = "0px"; - this.hideDiv.style.top = "0px"; - this.Chart.content.appendChild(this.hideDiv); - this.hideDiv.style.zIndex = 12; - this.hideDiv.style.display = "none"; - this.hideDiv.style.background = "#7D7E7D"; - this.hideDiv.style.cssText += ";-moz-opacity: 0.5;filter: alpha(opacity=50);opacity:.50;"; - this.hideDiv.style.width = this.Chart.content.offsetWidth + 2 + "px"; - this.hideDiv.style.height = this.Chart.content.offsetHeight + 2 + "px"; - -}; - -contextMenu.prototype.createMenuPanel = function() -{ - this.MenuPanel = document.createElement("div"); - this.MenuPanel.style.visibility = "hidden"; - this.MenuPanel.style.cssText += ";z-index:10;"; - this.MenuPanel.style.position = "absolute"; - this.Chart.content.appendChild(this.MenuPanel); - this.MenuPanel.innerHTML = "
"; - this.MenuPanel.firstChild.className = "contextMenu"; - - this.MenuPanel.firstChild.cellPadding = 0; - this.MenuPanel.firstChild.cellSpacing = 0; - this.MenuPanel.firstChild.style.cssText += ";background:url(" + this.Chart.imgs + "menu/menu_bg.png);"; -}; -contextMenu.prototype.createTabPanel = function() -{ - this.tabPanel = document.createElement("div"); - this.tabPanel.style.visibility = "hidden"; - this.tabPanel.style.zIndex = "30"; - this.TabContainer.firstChild.rows[0].cells[0].appendChild(this.tabPanel); - this.tabPanel.style.width = "385px"; - this.tabPanel.style.height = "290px"; - this.tabPanel.innerHTML = "
"; - this.tabPanel.firstChild.cellPadding = 0; - this.tabPanel.firstChild.cellSpacing = 0; - this.tabPanel.firstChild.style.cssText = "width:385px;border: 1px solid #808080;"; - this.tabPanel.firstChild.rows[0].cells[0].style.cssText = ";height:26px;background:url(" + this.Chart.imgs + "/menu/window_tr.png);background-repeat: no-repeat;color:#fff;font-size:14px;font-weight: bold;font-family: Tahoma, Arial"; - this.tabPanel.firstChild.rows[0].cells[0].align = "center"; - this.tabPanel.firstChild.rows[1].cells[0].style.cssText = ";height:270px;background:#F7F7F7;"; - this.tabPanel.firstChild.rows[1].cells[0].innerHTML = "
"; - this.tabPanel.firstChild.rows[1].cells[0].firstChild.style.cssText = "width:250px;font-size:11px;font-family:Tahoma,Arial;"; - this.tabPanel.firstChild.rows[1].cells[0].align = "center"; -}; - -contextMenu.prototype.addItemMenuPanel = function(tab) -{ - var self = this; - var row = this.MenuPanel.firstChild.insertRow(this.MenuPanel.firstChild.rows.length); - var cell = document.createElement('td'); - cell.innerHTML = tab.Description; - cell.style.cssText = "padding-left:10px;height:18px;"; - - this.addEvent(cell, "mousedown", function() { - tab.show(); - }, false); - - - cell.onmouseover = function() { - this.style.background = "url(" + self.Chart.imgs + "menu/menu_selection.png)"; - }; - cell.onmouseout = function() { - this.style.background = ""; - }; - - row.appendChild(cell); -}; - -contextMenu.prototype.showContextMenu = function(x, y, object) -{ - if (object.constructor == GanttTask) - { - for (var i = 0; i < this.arrTabs.length; i++) { - if (this.arrTabs[i].type == "t") - { - this.arrTabs[i].object = object; - this.addItemMenuPanel(this.arrTabs[i]); - } - } - } else if (object.constructor == GanttProject) - { - for (var i = 0; i < this.arrTabs.length; i++) { - if (this.arrTabs[i].type == "p") - { - this.arrTabs[i].object = object; - this.addItemMenuPanel(this.arrTabs[i]); - } - } - } - - this.isShow = true; - this.MenuPanel.style.cssText += ";z-index:15;"; - this.MenuPanel.style.visibility = "visible"; - - this.MenuPanel.style.top = parseInt(y) + this.Chart.heightTaskItem - this.Chart.oData.scrollTop + 5 + "px"; - this.MenuPanel.style.left = x; - -}; -contextMenu.prototype.hideContextMenu = function() -{ - this.isShow = false; - this.MenuPanel.style.visibility = "hidden"; - -}; -contextMenu.prototype.clear = function() -{ - this.MenuPanel.removeChild(this.MenuPanel.firstChild); - this.MenuPanel.innerHTML = "
"; - this.MenuPanel.firstChild.className = "contextMenu"; - this.MenuPanel.firstChild.cellPadding = 0; - this.MenuPanel.firstChild.cellSpacing = 0; - this.MenuPanel.firstChild.style.cssText += ";background:url(" + this.Chart.imgs + "menu/menu_bg.png);"; -}; -contextMenu.prototype.createTab = function(id, desc, type, showOInfo, menu) -{ - var tab = new contextMenuTab(id, desc, type, showOInfo, menu); - this.arrTabs.push(tab); - return tab; -}; -contextMenu.prototype.createTabContainer = function() -{ - this.TabContainer = document.createElement("div"); - this.TabContainer.style.position = "absolute"; - this.TabContainer.style.top = "0px"; - this.TabContainer.style.left = "0px"; - this.TabContainer.style.visibility = "hidden"; - this.TabContainer.style.zIndex = "50"; - this.Chart.content.appendChild(this.TabContainer); - this.TabContainer.innerHTML = "
"; - this.TabContainer.firstChild.style.cssText = ";width:100%;height:100%;"; - this.TabContainer.firstChild.rows[0].cells[0].align = "center"; - this.TabContainer.style.width = this.Chart.content.offsetWidth + 2 + "px"; - this.TabContainer.style.height = this.Chart.content.offsetHeight + 2 + "px"; - -}; - -contextMenu.prototype.getTabById = function(id) -{ - for (var i = 0; i < this.arrTabs.length; i++) { - if (this.arrTabs[i].Id == id) { - return this.arrTabs[i]; - } - } - return null; -}; -function contextMenuTab(id, description, type, showOInfo, contextMenu) -{ - this.Id = id; - this.arrItems = []; - this.TabItemContainer = null; - this.Description = description; - this.contextMenu = contextMenu; - this.type = type; - this.object = null; - this.showObjectInfo = showOInfo; - -} - -/** - * @desc: add event - * @param: elm - current element - * @param: evType - string that specifies any of the standard DHTML Events - * @param: fn - pointer that specifies the function to call when sEvent fires - * @type: private - * @topic: 5 - */ -contextMenu.prototype.addEvent = function (elm, evType, fn, useCapture) -{ - if (elm.addEventListener) { - elm.addEventListener(evType, fn, useCapture); - return true; - } - else if (elm.attachEvent) { - return elm.attachEvent('on' + evType, fn); - } - else { - elm['on' + evType] = fn; - } -}; - -contextMenuTab.prototype.addItem = function(id, name, control, type, handler) -{ - if (handler) { - control.onclick = handler; - } - control.type = type; - if (type == "button") - { - control.value = name; - } - var tabItem = new contextMenuTabItem(id, name, control, this); - this.arrItems.push(tabItem); -}; - -contextMenuTab.prototype.show = function() -{ - this.contextMenu.hideDiv.style.display = "inline"; - this.contextMenu.TabContainer.style.visibility = "visible"; - - var self = this; - this.contextMenu.tabPanel.firstChild.rows[0].cells[0].innerHTML = this.Description; - this.contextMenu.tabPanel.style.visibility = "visible"; - var t = this.contextMenu.tabPanel.firstChild.rows[1].cells[0].firstChild; - var c,c2,r = null; - - if (this.showObjectInfo) - { - if (this.object) { - if (this.object.constructor == GanttTask) { - this.insertData(t, "Id", this.object.TaskInfo.Id); - this.insertData(t, "Name", this.object.TaskInfo.Name); - this.insertData(t, "Duration", this.object.TaskInfo.Duration + " hrs"); - this.insertData(t, "Percent complete", this.object.TaskInfo.PercentCompleted + "%"); - this.insertData(t, "EST", this.object.TaskInfo.EST.getDate() + "." + (this.object.TaskInfo.EST.getMonth() + 1) + "." + this.object.TaskInfo.EST.getFullYear()); - this.insertData(t, "Predecessor", this.object.TaskInfo.PredecessorTaskId); - } else - { - this.insertData(t, "Id", this.object.Project.Id); - this.insertData(t, "Name", this.object.Project.Name); - this.insertData(t, "Start date", this.object.Project.StartDate.getDate() + "." + (this.object.Project.StartDate.getMonth() + 1) + "." + this.object.Project.StartDate.getFullYear()); - } - } - } - - var btnCell = null; - for (var i = 0; i < this.arrItems.length; i++) { - if (this.arrItems[i].control.type == "button") - { - r = t.insertRow(t.rows.length); - c = r.insertCell(r.cells.length); - btnCell = r.insertCell(r.cells.length); - btnCell.appendChild(this.arrItems[i].control); - - } else - { - r = t.insertRow(t.rows.length); - c = r.insertCell(r.cells.length); - c2 = r.insertCell(r.cells.length); - c.innerHTML = this.arrItems[i].Name; - c2.appendChild(this.arrItems[i].control); - - } - } - - var b = document.createElement("input"); - b.type = "button"; - b.value = "Cancel"; - b.onclick = function() - { - self.hide(); - }; - - if (!btnCell) { - r = t.insertRow(t.rows.length); - c = r.insertCell(r.cells.length); - btnCell = r.insertCell(r.cells.length); - } else { - b.style.marginLeft = "10px"; - } - btnCell.appendChild(b); -}; -contextMenuTab.prototype.hide = function() -{ - this.contextMenu.tabPanel.style.visibility = "hidden"; - var t = this.contextMenu.tabPanel.firstChild.rows[1].cells[0].firstChild; - t.parentNode.removeChild(t); - this.contextMenu.tabPanel.firstChild.rows[1].cells[0].innerHTML = "
"; - this.contextMenu.tabPanel.firstChild.rows[1].cells[0].firstChild.style.cssText = "width:250px;font-size:11px;font-family:Tahoma,Arial;"; - - this.contextMenu.hideDiv.style.display = "none"; - this.contextMenu.TabContainer.style.visibility = "hidden"; -}; - -contextMenuTab.prototype.insertData = function(t, name, value) -{ - var c,c2,r = null; - r = t.insertRow(t.rows.length); - c = r.insertCell(r.cells.length); - c.style.cssText = "width:100px"; - c.innerHTML = name; - c2 = r.insertCell(r.cells.length); - c2.innerHTML = value; - -}; -contextMenuTab.prototype.insertControl = function(t, name, value) -{ - var c,c2,r = null; - r = t.insertRow(t.rows.length); - c = r.insertCell(r.cells.length); - c.innerHTML = name; - c2 = r.insertCell(r.cells.length); - c2.appendChild(value); -}; - -function contextMenuTabItem(id, name, control, tab) -{ - this.Id = id; - this.Name = name; - this.control = control; - this.tab = tab; - -} diff --git a/phpgwapi/js/dhtmlxGantt/whatsnew.txt b/phpgwapi/js/dhtmlxGantt/whatsnew.txt deleted file mode 100755 index c4e207fab9..0000000000 --- a/phpgwapi/js/dhtmlxGantt/whatsnew.txt +++ /dev/null @@ -1,40 +0,0 @@ -### 2.1 -- Milestone and Projects support -- Custom configuration of the lightbox for different task types -- Non-linear scales, ability to skip time from the scale - -- Ability to calculate duration in work days/hours instead of calendar time - -- Support of multiple gantts on the page (requires PRO version) - -- Updated some localisations -- Added more configurations and API methods events -- Various bugfixes - -### 2.0 - -- jQuery integration -- Major performance improvements -- Ready-to-use PHP integration - -- Configurable multi-line scales -- Configurable multi-column grid with optional sorting and Drag-n-Drop -- Configurable popup form for editing tasks -- All text elements can be defined through templates -- All date strings can be configured -- All text labels can be localized - -- Default skin changed to "terrace" -- 3 new skins -- Bars can have an optional inner resizer -- Optional UI for task creation -- Vertical and horizontal lines can be colored based on custom rules - -- Loading and serialization from JSON -- Loading and serialization with the simplified XML format -- 3 types of task linking -- Gantt charts work on touch devices - -- A LOT of events added -- Templates and configuration options added -- API simplified, it uses a single gantt object instead of a bunch of different objects \ No newline at end of file