From c4f56f2c3b6e6c52946c23865713ed85c717ee82 Mon Sep 17 00:00:00 2001 From: Nathan Gray Date: Wed, 16 Apr 2014 19:47:29 +0000 Subject: [PATCH] New dhtmlxGantt library, and etemplate2 widget to use it (work in progress) --- etemplate/js/et2_widget_gantt.js | 438 + etemplate/js/etemplate2.js | 1 + etemplate/templates/default/etemplate2.css | 17 + .../js/dhtmlxGantt/codebase/dhtmlxgantt.css | 20 +- .../js/dhtmlxGantt/codebase/dhtmlxgantt.js | 392 +- .../codebase/ext/dhtmlxgantt_quick_info.js | 13 + .../codebase/ext/dhtmlxgantt_tooltip.js | 10 + .../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/license.txt | 339 + phpgwapi/js/dhtmlxGantt/readme.txt | 18 + .../01_initialization/01_basic_init.html | 39 + .../01_initialization/02_load_json.html | 20 + .../01_initialization/03_load_xml.html | 21 + .../01_initialization/04_connector_json.html | 21 + .../01_initialization/05_connector_xml.html | 22 + .../01_initialization/06_touch_forced.html | 23 + .../samples/01_initialization/07_jquery.html | 22 + .../08_explicit_time_range.html | 24 + .../09_backward_compatibility.html | 20 + .../01_initialization/10_fixed_size.html | 16 + .../01_initialization/11_clickable_links.html | 45 + .../01_initialization/12_localization.html | 22 + .../13_project_duration.html | 79 + .../01_initialization/14_reinitializtion.html | 44 + .../15_connector_json_enddate.html | 21 + .../16_projects_and_milestones.html | 83 + .../samples/01_initialization/index.html | 191 +- .../samples/02_extensions/01_quickinfo.html | 21 + .../samples/02_extensions/02_tooltip.html | 20 + .../samples/02_extensions/index.html | 87 + .../samples/03_scales/01_multiple_scales.html | 38 + .../samples/03_scales/02_month_days.html | 29 + .../samples/03_scales/03_full_year.html | 38 + .../samples/03_scales/04_days.html | 30 + .../samples/03_scales/05_dynamic_scales.html | 99 + .../samples/03_scales/06_custom_scales.html | 33 + .../samples/03_scales/07_minutes_scale.html | 63 + .../03_scales/08_scale_autoconfig.html | 47 + .../samples/03_scales/09_skip_weekends.html | 47 + .../samples/03_scales/10_working_hours.html | 62 + .../dhtmlxGantt/samples/03_scales/index.html | 127 + .../04_customization/01_outer_content.html | 28 + .../04_customization/02_custom_tree.html | 61 + .../04_customization/03_link_styles.html | 70 + .../04_customization/04_task_styles.html | 69 + .../04_customization/05_tree_template.html | 34 + .../06_highlight_weekend.html | 40 + .../04_customization/07_progress_text.html | 35 + .../04_customization/08_templates.html | 63 + .../04_customization/09_html_content.html | 83 + .../04_customization/10_context_menu.html | 53 + .../04_customization/11_split_task.html | 47 + .../04_customization/12_custom_task_type.html | 110 + .../13_autosize_container.html | 26 + .../samples/04_customization/index.html | 142 + .../01_lightbox_customization.html | 43 + .../05_lightbox/02_progress_lightbox.html | 60 + .../samples/05_lightbox/02_select.html | 44 + .../samples/05_lightbox/03_validation.html | 78 + .../samples/05_lightbox/04_custom_editor.html | 42 + .../samples/05_lightbox/05_template.html | 42 + .../samples/05_lightbox/06_custom_button.html | 73 + .../samples/05_lightbox/07_time.html | 23 + .../05_lightbox/08_parent_selector.html | 34 + .../samples/05_lightbox/common/v_complete.png | Bin 0 -> 1232 bytes .../samples/05_lightbox/index.html | 122 + .../samples/06_skins/01_default.html | 19 + .../samples/06_skins/02_default_lightbox.html | 25 + .../samples/06_skins/03_skyblue.html | 19 + .../samples/06_skins/04_meadow.html | 28 + .../samples/06_skins/05_broadway.html | 30 + .../dhtmlxGantt/samples/06_skins/index.html | 102 + .../samples/07_grid/01_builtin_sorting.html | 35 + .../samples/07_grid/02_branch_ordering.html | 22 + .../samples/07_grid/03_filtering.html | 96 + .../samples/07_grid/04_custom_sorting.html | 39 + .../samples/07_grid/05_sort_api.html | 48 + .../samples/07_grid/06_without_grid.html | 21 + .../js/dhtmlxGantt/samples/07_grid/index.html | 107 + .../samples/08_api/01_dnd_events.html | 60 + .../samples/08_api/02_constraints.html | 96 + .../samples/08_api/03_validation.html | 40 + .../samples/08_api/04_limit_project.html | 131 + .../samples/08_api/05_limit_drag_dates.html | 77 + .../dhtmlxGantt/samples/08_api/06_export.html | 22 + .../js/dhtmlxGantt/samples/08_api/index.html | 107 + .../09_worktime/01_working_hours_per_day.html | 98 + .../samples/09_worktime/02_working_days.html | 59 + .../09_worktime/03_exclude_holidays.html | 150 + .../04_custom_workday_duration.html | 95 + .../09_worktime/05_adjust_to_worktime.html | 61 + .../samples/09_worktime/index.html | 102 + .../js/dhtmlxGantt/samples/common/data.json | 242 + .../js/dhtmlxGantt/samples/common/data.xml | 225 + .../samples/common/dhtmlxMenu/dhtmlxcommon.js | 944 ++ .../samples/common/dhtmlxMenu/dhtmlxmenu.js | 2214 +++++ .../dhtmlxMenu/ext/dhtmlxmenu_effects.js | 138 + .../common/dhtmlxMenu/ext/dhtmlxmenu_ext.js | 999 ++ .../imgs/dhxmenu_dhx_black/dhtmlxmenu_bg.gif | Bin 0 -> 195 bytes .../dhxmenu_dhx_black/dhtmlxmenu_chrd.gif | Bin 0 -> 372 bytes .../dhxmenu_dhx_black/dhtmlxmenu_loader.gif | Bin 0 -> 401 bytes .../dhxmenu_dhx_black/dhtmlxmenu_subar.gif | Bin 0 -> 111 bytes .../dhxmenu_dhx_black/dhtmlxmenu_subsepbg.gif | Bin 0 -> 56 bytes .../dhxmenu_dhx_black/dhtmlxmenu_upar.gif | Bin 0 -> 124 bytes .../imgs/dhxmenu_dhx_blue/dhtmlxmenu_bg.gif | Bin 0 -> 194 bytes .../imgs/dhxmenu_dhx_blue/dhtmlxmenu_chrd.gif | Bin 0 -> 372 bytes .../dhxmenu_dhx_blue/dhtmlxmenu_loader.gif | Bin 0 -> 401 bytes .../dhxmenu_dhx_blue/dhtmlxmenu_subar.gif | Bin 0 -> 119 bytes .../dhxmenu_dhx_blue/dhtmlxmenu_subsepbg.gif | Bin 0 -> 56 bytes .../imgs/dhxmenu_dhx_blue/dhtmlxmenu_upar.gif | Bin 0 -> 106 bytes .../dhxmenu_dhx_skyblue/dhtmlxmenu_chrd.gif | Bin 0 -> 372 bytes .../dhxmenu_dhx_skyblue/dhtmlxmenu_loader.gif | Bin 0 -> 401 bytes .../dhxmenu_dhx_skyblue/dhtmlxmenu_subar.gif | Bin 0 -> 119 bytes .../dhxmenu_dhx_skyblue/dhtmlxmenu_upar.gif | Bin 0 -> 106 bytes .../dhxmenu_bg_acccell.gif | Bin 0 -> 52 bytes .../dhxmenu_dhx_skyblue/dhxmenu_subselbg.gif | Bin 0 -> 164 bytes .../dhxmenu_dhx_skyblue/dhxmenu_subsepbg.gif | Bin 0 -> 56 bytes .../dhxmenu_dhx_skyblue/dhxmenu_topselbg.gif | Bin 0 -> 170 bytes .../dhxmenu_dhx_skyblue/dhxmenu_topsepbg.gif | Bin 0 -> 122 bytes .../dhxmenu_dhx_terrace/dhtmlxmenu_chrd.gif | Bin 0 -> 1916 bytes .../dhxmenu_dhx_terrace/dhtmlxmenu_loader.gif | Bin 0 -> 847 bytes .../dhxmenu_dhx_terrace/dhtmlxmenu_subar.gif | Bin 0 -> 149 bytes .../dhxmenu_dhx_terrace/dhxmenu_bg_item.gif | Bin 0 -> 74 bytes .../dhxmenu_bg_item_sel.gif | Bin 0 -> 74 bytes .../dhxmenu_dhx_terrace/dhxmenu_bg_subsep.gif | Bin 0 -> 65 bytes .../imgs/dhxmenu_dhx_web/dhxmenu_chrd.gif | Bin 0 -> 2509 bytes .../imgs/dhxmenu_dhx_web/dhxmenu_loader.gif | Bin 0 -> 1683 bytes .../imgs/dhxmenu_dhx_web/dhxmenu_subar.gif | Bin 0 -> 1188 bytes .../imgs/dhxmenu_dhx_web/dhxmenu_subselbg.gif | Bin 0 -> 52 bytes .../imgs/dhxmenu_dhx_web/dhxmenu_subsepbg.gif | Bin 0 -> 1094 bytes .../imgs/dhxmenu_dhx_web/dhxmenu_topbg.gif | Bin 0 -> 66 bytes .../imgs/dhxmenu_dhx_web/dhxmenu_topselbg.gif | Bin 0 -> 66 bytes .../imgs/dhxmenu_dhx_web/dhxmenu_topsepbg.gif | Bin 0 -> 68 bytes .../imgs/dhxmenu_dhx_web/dhxmenu_upar.gif | Bin 0 -> 1930 bytes .../common/dhtmlxMenu/sample_images/about.gif | Bin 0 -> 626 bytes .../dhtmlxMenu/sample_images/about_dis.gif | Bin 0 -> 1465 bytes .../sample_images/bug_reporting.gif | Bin 0 -> 1015 bytes .../sample_images/bug_reporting_dis.gif | Bin 0 -> 1662 bytes .../common/dhtmlxMenu/sample_images/close.gif | Bin 0 -> 382 bytes .../dhtmlxMenu/sample_images/close_dis.gif | Bin 0 -> 1431 bytes .../common/dhtmlxMenu/sample_images/copy.gif | Bin 0 -> 598 bytes .../dhtmlxMenu/sample_images/copy_dis.gif | Bin 0 -> 1435 bytes .../common/dhtmlxMenu/sample_images/cut.gif | Bin 0 -> 608 bytes .../dhtmlxMenu/sample_images/cut_dis.gif | Bin 0 -> 1440 bytes .../common/dhtmlxMenu/sample_images/help.gif | Bin 0 -> 1076 bytes .../dhtmlxMenu/sample_images/help_dis.gif | Bin 0 -> 1716 bytes .../common/dhtmlxMenu/sample_images/new.gif | Bin 0 -> 586 bytes .../dhtmlxMenu/sample_images/new_dis.gif | Bin 0 -> 1418 bytes .../common/dhtmlxMenu/sample_images/open.gif | Bin 0 -> 628 bytes .../dhtmlxMenu/sample_images/open_dis.gif | Bin 0 -> 1463 bytes .../dhtmlxMenu/sample_images/page_setup.gif | Bin 0 -> 1659 bytes .../sample_images/page_setup_dis.gif | Bin 0 -> 597 bytes .../common/dhtmlxMenu/sample_images/paste.gif | Bin 0 -> 382 bytes .../dhtmlxMenu/sample_images/paste_dis.gif | Bin 0 -> 1427 bytes .../common/dhtmlxMenu/sample_images/print.gif | Bin 0 -> 387 bytes .../dhtmlxMenu/sample_images/print_dis.gif | Bin 0 -> 1437 bytes .../common/dhtmlxMenu/sample_images/redo.gif | Bin 0 -> 327 bytes .../dhtmlxMenu/sample_images/redo_dis.gif | Bin 0 -> 1377 bytes .../common/dhtmlxMenu/sample_images/save.gif | Bin 0 -> 391 bytes .../dhtmlxMenu/sample_images/save_as.gif | Bin 0 -> 1663 bytes .../dhtmlxMenu/sample_images/save_as_dis.gif | Bin 0 -> 404 bytes .../dhtmlxMenu/sample_images/save_dis.gif | Bin 0 -> 1441 bytes .../dhtmlxMenu/sample_images/select_all.gif | Bin 0 -> 605 bytes .../sample_images/select_all_dis.gif | Bin 0 -> 1655 bytes .../common/dhtmlxMenu/sample_images/undo.gif | Bin 0 -> 327 bytes .../dhtmlxMenu/sample_images/undo_dis.gif | Bin 0 -> 1377 bytes .../dhtmlxMenu/skins/dhtmlxmenu_dhx_black.css | 342 + .../dhtmlxMenu/skins/dhtmlxmenu_dhx_blue.css | 342 + .../skins/dhtmlxmenu_dhx_skyblue.css | 347 + .../skins/dhtmlxmenu_dhx_terrace.css | 356 + .../dhtmlxMenu/skins/dhtmlxmenu_dhx_web.css | 364 + .../js/dhtmlxGantt/samples/common/dhxmenu.xml | 31 + .../js/dhtmlxGantt/samples/common/docs.css | 1308 +++ .../dhtmlxGantt/samples/common/loaddata.json | 11 + .../js/dhtmlxGantt/samples/common/log.txt | 947 ++ .../js/dhtmlxGantt/samples/common/olddata.xml | 49 + .../js/dhtmlxGantt/samples/common/testdata.js | 86 + phpgwapi/js/dhtmlxGantt/samples/index.html | 158 +- phpgwapi/js/dhtmlxGantt/samples/readme.txt | 17 + phpgwapi/js/dhtmlxGantt/whatsnew.txt | 40 + 280 files changed, 30260 insertions(+), 480 deletions(-) create mode 100644 etemplate/js/et2_widget_gantt.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/ext/dhtmlxgantt_quick_info.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/ext/dhtmlxgantt_tooltip.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_ar.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_be.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_ca.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_cn.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_cs.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_da.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_de.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_el.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_es.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_fi.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_fr.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_he.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_hu.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_id.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_it.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_jp.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_nb.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_nl.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_no.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_pl.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_pt.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_ro.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_ru.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_si.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_sk.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_sv.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_tr.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/locale/locale_ua.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/skins/dhtmlxgantt_broadway.css create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/skins/dhtmlxgantt_meadow.css create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/skins/dhtmlxgantt_skyblue.css create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/skins/dhtmlxgantt_terrace.css create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/dhtmlxgantt.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/dhtmlxgantt.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/ext/dhtmlxgantt_quick_info.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/ext/dhtmlxgantt_quick_info.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/ext/dhtmlxgantt_tooltip.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/ext/dhtmlxgantt_tooltip.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ar.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ar.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_be.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_be.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ca.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ca.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_cn.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_cn.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_cs.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_cs.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_da.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_da.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_de.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_de.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_el.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_el.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_es.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_es.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_fi.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_fi.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_fr.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_fr.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_he.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_he.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_hu.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_hu.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_id.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_id.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_it.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_it.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_jp.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_jp.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_nb.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_nb.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_nl.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_nl.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_no.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_no.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_pl.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_pl.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_pt.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_pt.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ro.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ro.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ru.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ru.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_si.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_si.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_sk.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_sk.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_sv.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_sv.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_tr.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_tr.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ua.js create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ua.js.map create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_broadway.css create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_meadow.css create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_skyblue.css create mode 100755 phpgwapi/js/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_terrace.css create mode 100755 phpgwapi/js/dhtmlxGantt/license.txt create mode 100755 phpgwapi/js/dhtmlxGantt/readme.txt create mode 100755 phpgwapi/js/dhtmlxGantt/samples/01_initialization/01_basic_init.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/01_initialization/02_load_json.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/01_initialization/03_load_xml.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/01_initialization/04_connector_json.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/01_initialization/05_connector_xml.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/01_initialization/06_touch_forced.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/01_initialization/07_jquery.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/01_initialization/08_explicit_time_range.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/01_initialization/09_backward_compatibility.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/01_initialization/10_fixed_size.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/01_initialization/11_clickable_links.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/01_initialization/12_localization.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/01_initialization/13_project_duration.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/01_initialization/14_reinitializtion.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/01_initialization/15_connector_json_enddate.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/01_initialization/16_projects_and_milestones.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/02_extensions/01_quickinfo.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/02_extensions/02_tooltip.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/02_extensions/index.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/03_scales/01_multiple_scales.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/03_scales/02_month_days.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/03_scales/03_full_year.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/03_scales/04_days.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/03_scales/05_dynamic_scales.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/03_scales/06_custom_scales.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/03_scales/07_minutes_scale.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/03_scales/08_scale_autoconfig.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/03_scales/09_skip_weekends.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/03_scales/10_working_hours.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/03_scales/index.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/04_customization/01_outer_content.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/04_customization/02_custom_tree.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/04_customization/03_link_styles.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/04_customization/04_task_styles.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/04_customization/05_tree_template.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/04_customization/06_highlight_weekend.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/04_customization/07_progress_text.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/04_customization/08_templates.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/04_customization/09_html_content.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/04_customization/10_context_menu.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/04_customization/11_split_task.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/04_customization/12_custom_task_type.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/04_customization/13_autosize_container.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/04_customization/index.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/05_lightbox/01_lightbox_customization.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/05_lightbox/02_progress_lightbox.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/05_lightbox/02_select.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/05_lightbox/03_validation.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/05_lightbox/04_custom_editor.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/05_lightbox/05_template.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/05_lightbox/06_custom_button.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/05_lightbox/07_time.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/05_lightbox/08_parent_selector.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/05_lightbox/common/v_complete.png create mode 100755 phpgwapi/js/dhtmlxGantt/samples/05_lightbox/index.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/06_skins/01_default.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/06_skins/02_default_lightbox.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/06_skins/03_skyblue.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/06_skins/04_meadow.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/06_skins/05_broadway.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/06_skins/index.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/07_grid/01_builtin_sorting.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/07_grid/02_branch_ordering.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/07_grid/03_filtering.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/07_grid/04_custom_sorting.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/07_grid/05_sort_api.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/07_grid/06_without_grid.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/07_grid/index.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/08_api/01_dnd_events.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/08_api/02_constraints.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/08_api/03_validation.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/08_api/04_limit_project.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/08_api/05_limit_drag_dates.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/08_api/06_export.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/08_api/index.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/09_worktime/01_working_hours_per_day.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/09_worktime/02_working_days.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/09_worktime/03_exclude_holidays.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/09_worktime/04_custom_workday_duration.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/09_worktime/05_adjust_to_worktime.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/09_worktime/index.html create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/data.json create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/data.xml create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/dhtmlxcommon.js create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/dhtmlxmenu.js create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/ext/dhtmlxmenu_effects.js create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/ext/dhtmlxmenu_ext.js create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_black/dhtmlxmenu_bg.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_black/dhtmlxmenu_chrd.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_black/dhtmlxmenu_loader.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_black/dhtmlxmenu_subar.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_black/dhtmlxmenu_subsepbg.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_black/dhtmlxmenu_upar.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_blue/dhtmlxmenu_bg.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_blue/dhtmlxmenu_chrd.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_blue/dhtmlxmenu_loader.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_blue/dhtmlxmenu_subar.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_blue/dhtmlxmenu_subsepbg.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_blue/dhtmlxmenu_upar.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_skyblue/dhtmlxmenu_chrd.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_skyblue/dhtmlxmenu_loader.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_skyblue/dhtmlxmenu_subar.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_skyblue/dhtmlxmenu_upar.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_skyblue/dhxmenu_bg_acccell.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_skyblue/dhxmenu_subselbg.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_skyblue/dhxmenu_subsepbg.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_skyblue/dhxmenu_topselbg.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_skyblue/dhxmenu_topsepbg.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_terrace/dhtmlxmenu_chrd.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_terrace/dhtmlxmenu_loader.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_terrace/dhtmlxmenu_subar.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_terrace/dhxmenu_bg_item.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_terrace/dhxmenu_bg_item_sel.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_terrace/dhxmenu_bg_subsep.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_web/dhxmenu_chrd.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_web/dhxmenu_loader.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_web/dhxmenu_subar.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_web/dhxmenu_subselbg.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_web/dhxmenu_subsepbg.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_web/dhxmenu_topbg.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_web/dhxmenu_topselbg.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_web/dhxmenu_topsepbg.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/imgs/dhxmenu_dhx_web/dhxmenu_upar.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/about.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/about_dis.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/bug_reporting.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/bug_reporting_dis.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/close.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/close_dis.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/copy.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/copy_dis.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/cut.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/cut_dis.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/help.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/help_dis.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/new.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/new_dis.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/open.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/open_dis.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/page_setup.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/page_setup_dis.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/paste.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/paste_dis.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/print.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/print_dis.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/redo.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/redo_dis.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/save.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/save_as.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/save_as_dis.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/save_dis.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/select_all.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/select_all_dis.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/undo.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/sample_images/undo_dis.gif create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/skins/dhtmlxmenu_dhx_black.css create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/skins/dhtmlxmenu_dhx_blue.css create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/skins/dhtmlxmenu_dhx_skyblue.css create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/skins/dhtmlxmenu_dhx_terrace.css create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/skins/dhtmlxmenu_dhx_web.css create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/dhxmenu.xml create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/docs.css create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/loaddata.json create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/log.txt create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/olddata.xml create mode 100755 phpgwapi/js/dhtmlxGantt/samples/common/testdata.js create mode 100755 phpgwapi/js/dhtmlxGantt/samples/readme.txt create mode 100755 phpgwapi/js/dhtmlxGantt/whatsnew.txt diff --git a/etemplate/js/et2_widget_gantt.js b/etemplate/js/et2_widget_gantt.js new file mode 100644 index 0000000000..de2278f431 --- /dev/null +++ b/etemplate/js/et2_widget_gantt.js @@ -0,0 +1,438 @@ +/** + * EGroupware eTemplate2 - JS widget for GANTT chart + * + * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License + * @package etemplate + * @subpackage api + * @link http://www.egroupware.org + * @author Nathan Gray + * @copyright Nathan Gray 2014 + * @version $Id$ + */ + +"use strict"; + +/*egw:uses + jsapi.jsapi; + jquery.jquery; + /phpgwapi/js/dhtmlxtree/js/dhtmlXCommon.js; // otherwise gantt breaks + /phpgwapi/js/dhtmlxGantt/codebase/dhtmlxgantt.js; + et2_core_inputWidget; +*/ + +/** + * Gantt chart + * + * The gantt widget allows children, which are displayed as a header. Any child input + * widgets are bound as live filters on existing data. The filter is done based on + * widget ID, such that the value of the widget must match that attribute in the task + * or the task will not be displayed. There is special handling for + * date widgets with IDs 'start_date' and 'end_date' to filter as an inclusive range + * instead of simple equality. + * + * @see http://docs.dhtmlx.com/gantt/index.html + * @augments et2_valueWidget + */ +var et2_gantt = et2_valueWidget.extend( +{ + // Filters are inside gantt namespace + createNamespace: true, + + attributes: { + "autoload": { + "name": "Autoload", + "type": "string", + "default": "", + "description": "JSON URL or menuaction to be called for projects with no, GET parameter selected contains id" + }, + value: {type: 'any'} + }, + + // Common configuration for Egroupware/eTemplate + gantt_config: { + // Gantt takes a different format of date format, all the placeholders are prefixed with '%' + api_date: '%Y-%n-%d %H:%i:%s', + xml_date: '%Y-%n-%d %H:%i:%s', + + // Duration is a unitless field. This is the unit. + duration_unit: 'minute', + + show_progress: true, + min_column_width: 30, + fit_tasks: true, + autosize: 'y', + scale_unit: 'day', + date_scale: '%d',//(egw.preference('dateformat')).replace(/[YMmdhHisaA]/g,function(a) {return '%'+a;}), + subscales: [ + {unit:"month", step:1, date:"%F, %Y"}, + //{unit:"hour", step:1, date:"%G"} + ], + columns: [ + {name: "text", label: egw.lang('Title'), tree: true, width: '*'} + ] + }, + + init: function(_parent, _attrs) { + // _super.apply is responsible for the actual setting of the params (some magic) + this._super.apply(this, arguments); + + // Gantt instance + this.gantt = null; + + // Filters + // Gantt chart empties its div on creation, so we don't add filters to main + // DOM node until after + this.filters = $j(document.createElement("div")) + .addClass('et2_gantt_header'); + + this.htmlNode = $j(document.createElement("div")) + .css('height', this.options.height) + .addClass('et2_gantt'); + this.setDOMNode(this.htmlNode[0]); + }, + + destroy: function() { + if(this.gantt !== null) + { + this.gantt.detachAllEvents(); + this.gantt.clearAll(); + this.gantt = null; + + this._super.apply(this, arguments);} + + this.htmlNode.remove(); + this.htmlNode = null; + }, + + doLoadingFinished: function() { + this._super.apply(this, arguments); + if(this.gantt != null) return false; + + var config = jQuery.extend({}, this.gantt_config); + + // Set initial values for start and end, if those filters exist + var start_date = this.getWidgetById('start_date'); + var end_date = this.getWidgetById('end_date'); + if(start_date) + { + config.start_date = start_date.getValue() ? new Date(start_date.getValue() * 1000) : null; + } + if(end_date) + { + config.end_date = end_date.getValue() ? new Date(end_date.getValue() * 1000): null; + } + + // Initialize chart + this.gantt = $j(this.htmlNode).dhx_gantt(config); + + // Gantt empties the div, so put any children in now + this.htmlNode.prepend(this.filters); + + if(this.options.value) + { + this.set_value(this.options.value); + } + + // Update start & end dates with chart values for consistency + if(start_date) + { + start_date.set_value(this.gantt.getState().min_date); + } + if(end_date) + { + end_date.set_value(this.gantt.getState().max_date); + } + + // Bind some events to make things nice and et2 + this._bindGanttEvents(); + + this._bindChildren(); + + return true; + }, + + getDOMNode: function(_sender) { + // Return filter container for children + if (_sender != this && this._children.indexOf(_sender) != -1) + { + return this.filters[0]; + } + + // Normally simply return the main div + return this._super.apply(this, arguments); + }, + + /** + * Sets the data to be displayed in the gantt chart. + * + * Data is a JSON object with 'data' and 'links', both of which are arrays. + * { + * data:[ + * {id:1, text:"Project #1", start_date:"01-04-2013", duration:18}, + * {id:2, text:"Task #1", start_date:"02-04-2013", duration:8, parent:1}, + * {id:3, text:"Task #2", start_date:"11-04-2013", duration:8, parent:1} + * ], + * links:[ + * {id:1, source:1, target:2, type:"1"}, + * {id:2, source:2, target:3, type:"0"} + * ] + * }; + * Any additional data can be included and used, but the above is the minimum + * required data. + * + * @see http://docs.dhtmlx.com/gantt/desktop__loading.html + */ + set_value: function(value) { + if(this.gantt == null) return false; + + // Ensure proper format, no extras + var safe_value = { + data: value.data || [], + links: value.links || [] + }; + this.gantt.parse(safe_value); + + // Set some things from the value + + // Set zoom + if(!this.options.zoom) this.set_zoom(); + + // If this is not the first gantt chart the browser renders, sometimes it needs a nudge + try + { + this.gantt.render(); + } + catch (e) + { + this.egw().debug('warning', 'Problem rendering gantt', e); + } + }, + + /** + * Set a URL to fetch the data from the server. + * Data must be in the specified format. + * @see http://docs.dhtmlx.com/gantt/desktop__loading.html + */ + set_autoload: function(url) { + if(this.gantt == null) return false; + this.options.autoloading = url; + + throw new Exception('Not implemented yet - apparently loading segments is not supported automatically'); + }, + + /** + * Sets the level of detail for the chart, which adjusts the scale(s) across the + * top and the granularity of the drag grid. + * + * Gantt chart needs a render() after changing. + * + * @param {int} level Higher levels show more grid, at larger granularity. + * @return {int} Current level + */ + set_zoom: function(level) { + + var subscales = []; + var scale_unit = 'day'; + var date_scale = '%d'; + var step = 1; + + // No level? Auto calculate. + if(level > 4) level = 4; + if(!level || level < 1) { + // Make sure we have the most up to date info for the calculations + // There may be a more efficient way to trigger this though + try { + this.gantt.render(); + } + catch (e) + {} + + var difference = (this.gantt.getState().max_date - this.gantt.getState().min_date)/1000; // seconds + // Spans more than a year + if(difference > 31536000 || this.gantt.getState().max_date.getFullYear() != this.gantt.getState().min_date.getFullYear()) + { + level = 4; + } + // More than 2 months + else if(difference > 5256000 || this.gantt.getState().max_date.getMonth() != this.gantt.getState().min_date.getMonth()) + { + level = 3; + } + // More than 3 days + else if (difference > 259200) + { + level = 2; + } + else + { + level = 1; + } + } + + // Adjust Gantt settings for specified level + switch(level) + { + case 4: + // A year or more, scale in weeks + subscales.push({unit: "month", step: 1, date: '%F %Y'}); + scale_unit = 'week'; + date_scale= '#%W'; + break; + case 3: + // Less than a year, several months + subscales.push({unit: "month", step: 1, date: '%F'}); + break; + case 2: + default: + // About a month + subscales.push({unit: "day", step: 1, date: '%F %d'}); + scale_unit = 'hour'; + date_scale = this.egw().preference('timeformat') == '24' ? "%G" : "%g"; + break; + case 1: + // A day or two, scale in Minutes + subscales.push({unit: "day", step: 1, date: '%F %d'}); + date_scale = this.egw().preference('timeformat') == '24' ? "%G:%i" : "%g:%i"; + + step = 1;//this.egw().preference('interval','calendar') || 15; + scale_unit = 'hour'; + } + + // Apply settings + this.gantt.config.subscales = subscales; + this.gantt.config.scale_unit = scale_unit; + this.gantt.config.date_scale = date_scale; + this.gantt.config.step = step; + + return level; + }, + + /** + * Bind all the internal gantt events for nice widget actions + */ + _bindGanttEvents: function() { + var gantt_widget = this; + + // Double click + this.gantt.attachEvent("onBeforeLightbox", function(id) { + var task = this.getTask(id); + if(task.pe_app) + { + gantt_widget.egw().open(task.pe_app_id, task.pe_app); + } + else + { + gantt_widget.egw().open(id, 'projectmanager'); + } + + // Don't do gantt default actions + return false; + }); + + // Bind AJAX for dynamic expansion + this.gantt.attachEvent("onTaskOpened", function(id, item) { + // Node children are already there & displayed + // TODO: Load children of children of this node. + debugger; + }); + + // Filters + this.gantt.attachEvent("onBeforeTaskDisplay", function(id, task) { + var display = true; + gantt_widget.iterateOver(function(_widget){ + switch(_widget.id) + { + // Start and end date are an interval. Also update the chart to + // display those dates. Special handling because date widgets give + // value in timestamp (seconds), gantt wants Date object (ms) + case 'start_date': + if(_widget.getValue()) + { + display = display && ((task[_widget.id].valueOf() / 1000) >= _widget.getValue()); + } + return; + case 'end_date': + // End date is not actually a required field, so accept undefined too + if(_widget.getValue()) + { + display = display && (typeof task[_widget.id] == 'undefined' || !task[_widget.id] || ((task[_widget.id].valueOf() / 1000) <= _widget.getValue())); + } + return; + } + + // Regular equality comparison + if(_widget.getValue() && typeof task[_widget.id] != 'undefined' && task[_widget.id] != _widget.getValue()) + { + display = false; + } + },gantt_widget, et2_inputWidget); + return display; + }); + }, + + /** + * Bind onchange for any child input widgets + */ + _bindChildren: function() { + var gantt_widget = this; + this.iterateOver(function(_widget){ + // Existing change function + var widget_change = _widget.change; + + var change = function(_node) { + // Call previously set change function + var result = widget_change.call(_widget,_node); + + // Update filters + if(result && _widget.isDirty()) { + // Update dirty + _widget._oldValue = _widget.getValue(); + + // Start date & end date change the display + if(_widget.id == 'start_date' || _widget.id == 'end_date') + { + var start = this.getWidgetById('start_date'); + var end = this.getWidgetById('end_date'); + gantt_widget.gantt.config.start_date = start && start.getValue() ? new Date(start.getValue() * 1000) : gantt_widget.gantt.getState().min_date; + gantt_widget.gantt.config.end_date = end && end.getValue() ? new Date(end.getValue() * 1000) : gantt_widget.gantt.getState().max_date; + if(gantt_widget.gantt.config.end_date <= gantt_widget.gantt.config.start_date) + { + gantt_widget.gantt.config.end_date = null; + if(end) end.set_value(null); + } + gantt_widget.set_zoom(); + gantt_widget.gantt.render(); + } + + gantt_widget.gantt.refreshData(); + } + // In case this gets bound twice, it's important to return + return true; + }; + + if(_widget.change != change) _widget.change = change; + }, this, et2_inputWidget); + } +}); +et2_register_widget(et2_gantt, ["gantt"]); + +/** + * Common look, feel & settings for all Gantt charts + */ +// Localize to user's language - breaks if file is not there +//egw.includeJS("/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_" + egw.preference('lang') + ".js"); + +// Set icon to match application +gantt.templates.grid_file = function(item) { + if(!item.pe_app || !egw.image(item.pe_icon)) return "
"; + return "
"; +} + +// Show nicer intervals in minute duration +gantt.templates.date_scale = function(date) { + if(gantt.config.scale_unit == 'minute') + { + date.setMinutes((date.getMinutes() % this.gantt.config.step) * this.gantt.config.step); + } + return gantt.date.date_to_str(gantt.config.date_scale)(date); +} \ No newline at end of file diff --git a/etemplate/js/etemplate2.js b/etemplate/js/etemplate2.js index 2672c0396d..8eebeb2dc3 100644 --- a/etemplate/js/etemplate2.js +++ b/etemplate/js/etemplate2.js @@ -33,6 +33,7 @@ et2_widget_dropdown_button; et2_widget_styles; et2_widget_favorites; + et2_widget_gantt; et2_widget_html; et2_widget_htmlarea; et2_widget_tabs; diff --git a/etemplate/templates/default/etemplate2.css b/etemplate/templates/default/etemplate2.css index 4331a30e55..4a92a7bbfb 100644 --- a/etemplate/templates/default/etemplate2.css +++ b/etemplate/templates/default/etemplate2.css @@ -8,6 +8,11 @@ */ @import url("../../../phpgwapi/js/jquery/magicsuggest/src/magicsuggest-1.3.1.css"); +/** + * dhtmlXgantt chart + */ +@import url("../../../phpgwapi/js/dhtmlxGantt/codebase/dhtmlxgantt.css"); + /** * Top level */ @@ -1389,6 +1394,18 @@ div.ui-toolbar-menulist{ margin-right: 5px; } +.et2_gantt +{ + width: 100%; + height: 100%; + min-height: 300px; + overflow: hidden; +} +.et2_gantt .gantt_tree_icon +{ + background-size: 18px; +} + /** * Do not wrap content of a single widget incl. a label or children of a hbox. * Taking into eg. select-account widget rendered as ul and prefixed with a label diff --git a/phpgwapi/js/dhtmlxGantt/codebase/dhtmlxgantt.css b/phpgwapi/js/dhtmlxGantt/codebase/dhtmlxgantt.css index 2923173eeb..5a2e2b6203 100644 --- a/phpgwapi/js/dhtmlxGantt/codebase/dhtmlxgantt.css +++ b/phpgwapi/js/dhtmlxGantt/codebase/dhtmlxgantt.css @@ -1,15 +1,5 @@ -.taskPanelBorder{border-width: 2px 2px 2px 2px;border-style:solid;border-color: #737373;} -.taskName{font-family: Tahoma, Arial; font-weight: bold;font-size: 11px;color: #FFFFFF;cursor: pointer;white-space: nowrap;} -.moveInfo{font-family: Tahoma, Arial;font-size: 10px;color:#006600;white-space: nowrap;} -.descTask{font-family: Tahoma, Arial;font-size: 10px;color:#276F9E;cursor: default;white-space: nowrap;} -.descProject{font-family: Tahoma, Arial;font-size: 10px;color:#006600;cursor: default;white-space: nowrap;} -.dayNumber, .monthName{font-family:Tahoma,Arial;font-weight:bold;font-size:9px;color:#858585;text-align:center;vertical-align:middle;} -.monthName {border-top:1px solid #f1f3f1; border-bottom:1px solid #f1f3f1; border-left:1px solid #f1f3f1;text-align:left;padding-left:5px;} -.poPupInfo{background: #FFFFFF;width : 170px;border: 1px dotted #279e00;padding: 4px 6px 4px 6px;float: left;} -.poPupTime{background: #FFFFFF;border: 1px dotted #279e00;height : 25px;width : 70px;position: absolute;z-index:2;} -.contextMenu{z-index:10;width:150px;cursor:pointer;font-family: Tahoma, Arial;font-size:12px;color:#7D7D7D;border: 1px solid #808080;} -.taskNameItem{font-family: Tahoma, Arial;font-size: 11px;font-weight: normal;color: #7D7D7D;} -.panelErrors{;padding: 4px 6px 4px 6px;font-family: Tahoma, Arial;font-size: 12px;color: red;white-space: nowrap;} -.st {font-family: Arial, Helvetica, Sans-serif; font-size: 10px; font-weight: normal; color: #688060;} -.ut {font-family: Arial, Helvetica, Sans-serif; font-size: 11px; font-weight: normal; color: #323232;} -.lt {font-family: Arial, Helvetica, Sans-serif; font-size: 11px; font-weight: normal; color: #323232; padding: 0px 0px 0px 14px; margin: 0px; display: block;} +/* +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 index 454e20e783..962001cb13 100644 --- a/phpgwapi/js/dhtmlxGantt/codebase/dhtmlxgantt.js +++ b/phpgwapi/js/dhtmlxGantt/codebase/dhtmlxgantt.js @@ -1,384 +1,8 @@ -//v.1.3 build 100805 - -/* -Copyright DHTMLX LTD. http://www.dhtmlx.com -To use this component please contact sales@dhtmlx.com to obtain license -*/ - -function GanttProjectInfo(id, name, startDate) -{this.Id = id;this.Name = name;this.StartDate = startDate;this.ParentTasks = []};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}}}}};GanttProjectInfo.prototype.addTask = function(task) -{this.ParentTasks.push(task);task.setProject(this)};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};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};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};GanttTaskInfo.prototype.addChildTask = function(task) -{this.ChildTasks.push(task);task.ParentTask = this};GanttTaskInfo.prototype.setProject = function(project) -{this.Project = project;for (var j = 0;j < this.ChildTasks.length;j++){this.ChildTasks[j].setProject(project)}};function GanttTask(taskInfo, project, chart) -{this.isTask = true;this.Chart = chart;this.Project = project;this.TaskInfo = taskInfo;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};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};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}};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()};function GanttChart() -{this.Error = new GanttError();this.dhtmlXMLSenderObject = new dhtmlXMLSenderObject(this);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;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";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)};GanttChart.prototype.setImagePath = function(newPath) -{this.imgs = newPath};GanttChart.prototype.setStylePath = function(newPath) -{this.stylePath = newPath};GanttChart.prototype.setSavePath = function(newPath) -{this.savePath = newPath};GanttChart.prototype.setLoadPath = function(newPath) -{this.loadPath = newPath};GanttChart.prototype.setCorrectError = function(isCorrectError) -{this.correctError = isCorrectError};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)}};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)}};GanttChart.prototype.showContextMenu = function(show) -{this.isShowConMenu = show};GanttChart.prototype.setContextMenu = function(menu) -{this.showContextMenu(true);this.contextMenu = menu};GanttChart.prototype.showNewProject = function(show) -{this.isShowNewProject = show};GanttChart.prototype.getParamShowTask = function(param) -{switch (param) {case 'n': - - return 0;break;case 'd': - - return 1;break;case 'e': - - return 2;break;case 'p': - - return 3;break;case 's-f': - - return 4;break;default: - return 0;break}};GanttChart.prototype.getParamShowProject = function(param) -{switch (param) {case 'n': - - return 0;break;case 'd': - - return 1;break;case 's': - - return 2;break;case 'p': - - 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};GanttChart.prototype.setEditable = function(isEditable) -{this.isEditable = isEditable};GanttChart.prototype.showTreePanel = function(show) -{this._showTreePanel = show};GanttChart.prototype.showTooltip = function(show) -{this._showTooltip = show};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};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}};GanttChart.prototype.addProject = function(projectInfo) -{this.Project.push(projectInfo)};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])}};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])}};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()}};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};GanttProject.prototype.deleteChildTask = function(task) -{if (task){if (task.cTaskItem[0].style.display == "none"){this.Chart.openTree(task.parentTask)};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}};if (task.childTask.length > 0){while (task.childTask.length > 0){this.deleteChildTask(task.childTask[0])}};if (task.cTaskItem[0].style.display != "none")task.shiftCurrentTasks(task, -23);this.Project.deleteTask(task.TaskInfo.Id);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])}};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])};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}};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};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)}};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};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};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};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)};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};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)}};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)}};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}};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}};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};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};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}};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};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}};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};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()}};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};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();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)}};GanttChart.prototype.clearAll = function() -{this._oDataHeight = 0;this.startDate = null;this._isError = false;this.hidePanelErrors();this.clearData();this.clearItems()};GanttChart.prototype.clearData = function() -{this._oDataHeight = 0;this.startDate = null;this._isError = false;this.hidePanelErrors();this.Project = [];this.arrProjects = []};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())};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])}};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 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)}};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)}}};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};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};GanttChart.prototype.sort_byEST = function(a, b) -{if (a.EST < b.EST)return -1;if (a.EST > b.EST)return 1;return 0};GanttChart.prototype.sort_byStartDate = function(a, b) -{if (a["StartDate"] < b["StartDate"])return -1;if (a["StartDate"] > b["StartDate"])return 1;return 0};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])}};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};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};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};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};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);for (var i = 0;i < this.countDays;i++){this.addPointInTimePanel(newRow, panelTime);this.addDayInPanelTime(newRow)};return panelTime};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};GanttChart.prototype.getMonthScaleLabel = function(date) {return (this._useShortMonthNames ? this.shortMonthNames : this.monthNames)[date.getMonth()] + " '" + (""+date.getFullYear()).substring(2)};GanttChart.prototype.useShortMonthNames = function(flag) {this._useShortMonthNames = flag};GanttChart.prototype.setShortMonthNames = function(names) {this.shortMonthNames = names};GanttChart.prototype.setMonthNames = function(names) {this.monthNames = names};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"};GanttChart.prototype.incHeightPanelTasks = function(height) -{var containerTasks = this.oData.firstChild;containerTasks.style.height = parseInt(containerTasks.style.height) + height + "px"};GanttChart.prototype.incHeightPanelNames = function(height) -{var containerNames = this.panelNames.firstChild;containerNames.style.height = parseInt(containerNames.style.height) + height + "px"};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)}};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])}};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};GanttChart.prototype.errorDataHandler = function(type, descr, params) -{if (!this._isError){this.clearData();this.showPanelErrors();this._isError = true};this.addErrorInPanelErrors(type, descr)};GanttChart.prototype.createPanelErrors = function() -{var tbl = document.createElement("table");tbl.width = "100%";tbl.style.display = "none";tbl.className = "panelErrors";this.panelErrors = tbl;return tbl};GanttChart.prototype.showPanelErrors = function() -{this.panelErrors.style.display = "inline"};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"};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};GanttChart.prototype.errorSendDataHandler = function(type, descr, params) -{alert(descr)};GanttChart.prototype.errorLoadDataHandler = function(type, descr, params) -{alert(descr)};GanttChart.prototype.errorAPIHandler = function(type, descr, params) -{alert(descr)};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)}};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)};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) - });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;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();this.panelTime = document.createElement("div");this.panelTime.appendChild(this.createPanelTime());this.panelTime.style.cssText = "position:relative;overflow:hidden;height:40px;top:0px;left:1px";this.oData = document.createElement("div");this.oData.appendChild(this.createPanelTasks());this.oData.style.cssText = "position:relative;overflow:scroll;height:" + (this.contentHeight - 40) + "px;border-left:#f1f3f1 1px solid";this.oData.firstChild.appendChild(this.createPanelErrors());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)};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);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()}};this.divTimeInfo = this.createPopUpTimeInfo();divCell.appendChild(this.divTimeInfo);this.oData.firstChild.appendChild(this.createPopUpInfo());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++){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 == '')};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};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." )}};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()}};GanttChart.prototype.getCountDays = function() -{if (this._showTreePanel){return parseInt((this.contentWidth - this.maxWidthPanelNames) / (this.hourInPixels * 24))}else {return parseInt((this.contentWidth) / (this.hourInPixels * 24))}};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)}}};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)}}};GanttTask.prototype.getPopUpInfo = function(object, event) -{var posY = object.offsetTop + this.Chart.heightTaskItem + 6;var posX = object.offsetLeft + ((event.layerX == null) ? event.offsetX : event.layerX);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 + "%
";if (this.predTask){tblInfo.rows[0].cells[0].innerHTML += "Predecessor Task: ";tblInfo.rows[0].cells[0].innerHTML += "*" + this.TaskInfo.PredecessorTask.Name + ""};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 + "")}};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"}};GanttTask.prototype.closePopUpInfo = function() -{this.Chart.divInfo.style.display = "none"};GanttTask.prototype.createConnectingLinesPN = function() -{var arrConnectingLinesNames = [];return arrConnectingLinesNames};GanttTask.prototype.createConnectingLinesDS = function() -{var oData = this.Chart.oData.firstChild;var arrLines = [];var arrowImg = new Image();arrowImg.src = this.Chart.imgs + "arr.gif";var lineVerticalRight = document.createElement("div");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;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};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)}}}}};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])}}}};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)}}};GanttChart.prototype.getPosOnDate = function(est) -{return (est - this.startDate) / (60 * 60 * 1000) * this.hourInPixels};GanttChart.prototype.getWidthOnDuration = function(duration) -{return Math.round(this.hourInPixelsWork * duration)};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};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};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}};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};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};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()};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"}};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}};GanttProject.prototype.getPopUpInfo = function(object, event) -{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"}};GanttProject.prototype.closePopUpInfo = function() -{this.Chart.divInfo.style.display = "none"};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"}};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)}};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()}};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"}};GanttTask.prototype.getDateOnPosition = function(position) -{var date = new Date(this.Chart.startDate);date.setHours(date.getHours() + (position / this.Chart.hourInPixels));return date};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)}}};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()};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)}}}};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";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"};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};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};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};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}};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}};GanttProject.prototype.getId = function() -{return this.Project.Id};GanttProject.prototype.getName = function() -{return this.Project.Name};GanttProject.prototype.getStartDate = function() -{return this.Project.StartDate};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}};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};GanttTask.prototype.getId = function() -{return this.TaskInfo.Id};GanttTask.prototype.getName = function() -{return this.TaskInfo.Name};GanttTask.prototype.getDuration = function() -{return this.TaskInfo.Duration};GanttTask.prototype.getEST = function() -{return this.TaskInfo.EST};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};GanttTask.prototype.getPercentCompleted = function() -{return this.TaskInfo.PercentCompleted};GanttTask.prototype.getPredecessorTaskId = function() -{return this.TaskInfo.PredecessorTaskId ? this.TaskInfo.PredecessorTaskId : null};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"};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}}};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"};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}};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){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};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};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}};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 = [];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)};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())};var arrConnectingLines = [];if (predecessorTask)arrConnectingLines = this.createConnectingLinesDS();this.cTaskItem.push(arrConnectingLines);if (this.Chart.panelNames){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};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};GanttChart.prototype.getLastChildTask = function(task) -{if (task.childTask.length > 0){return this.getLastChildTask(task.childTask[task.childTask.length - 1])}else - {return task}};dhtmlXMLSenderObject = function(ganttChart) -{this.xmlHttp = this.createXMLHttpRequest();this.isProcessed = false;this.path = null;this.filename = null;this.Chart = ganttChart};dhtmlXMLSenderObject.prototype.createXMLHttpRequest = function() -{if (window.XMLHttpRequest){return new XMLHttpRequest()}else if (window.ActiveXObject){return new ActiveXObject("Microsoft.XMLHTTP")}};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)};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);break;case 404: - this.Chart.Error.throwError("DATA_SEND_ERROR", 5, [this.path]);break;case 500: - this.Chart.Error.throwError("DATA_SEND_ERROR", 2, null);break;case 12029: - this.Chart.Error.throwError("DATA_SEND_ERROR", 1, null);break;default: - if (!(_status >= 200 && _status < 300 || _status == 304)) - {this.Chart.Error.throwError("DATA_SEND_ERROR", 0, null)};break};this.isProcessed = false}};function GanttError() {this.catches = [];this._errors = [];this._init();return this};GanttError.prototype._init = function() -{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";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."};GanttError.prototype.catchError = function(type, handler) {this.catches[type] = handler};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}};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};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}; -//v.1.3 build 9733 - -/* -Copyright DHTMLX LTD. http://www.dhtmlx.com -*/ \ No newline at end of file +/* +This software is allowed to use under GPL or you need to obtain Commercial or Enterise License + to use it in non-GPL project. Please contact sales@dhtmlx.com for details +*/ +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=new Array),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}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){if(t&&"object"==typeof t&&!t.tagName){var 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 var 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&&null!=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){if(this.xmlDoc.responseXML){var n=this.xmlDoc.responseXML.getElementsByTagName(t);if(0==n.length&&-1!=t.indexOf(":"))var n=this.xmlDoc.responseXML.getElementsByTagName(t.split(":")[1]);var i=n[0]}else var i=this.xmlDoc.documentElement;if(i)return this._retry=!1,i;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)):(_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]),null!=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=new Array,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):(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;o",s.innerHTML=r,e.content){var d=e.content;"string"==typeof d&&(d=document.getElementById(d)),"none"==d.style.display&&(d.style.display=""),s.childNodes[e.title?1:0].appendChild(d)}return s.onclick=function(n){n=n||event;var i=n.target||n.srcElement;if(i.className||(i=i.parentNode),"dhtmlx_popup_button"==i.className.split(" ")[0]){var a=i.getAttribute("result");a="true"==a||("false"==a?!1:a),t(e,a)}},e.box=s,(n||a)&&(c=e),s}function r(t,i,a){var r=t.tagName?t:s(t,i,a);t.hidden||n(!0),document.body.appendChild(r);var o=Math.abs(Math.floor(((window.innerWidth||document.documentElement.offsetWidth)-r.offsetWidth)/2)),d=Math.abs(Math.floor(((window.innerHeight||document.documentElement.offsetHeight)-r.offsetHeight)/2));return r.style.top="top"==t.position?"-3px":d+"px",r.style.left=o+"px",r.onkeydown=e,r.focus(),t.hidden&&dhtmlx.modalbox.hide(r),r}function o(t){return r(t,!0,!1)}function d(t){return r(t,!0,!0)}function l(t){return r(t)}function h(t,e,n){return"object"!=typeof t&&("function"==typeof e&&(n=e,e=""),t={text:t,type:e,callback:n}),t}function _(t,e,n,i){return"object"!=typeof t&&(t={text:t,type:e,expire:n,id:i}),t.id=t.id||g.uid(),t.expire=t.expire||g.expire,t}var c=null;document.attachEvent?document.attachEvent("onkeydown",e):document.addEventListener("keydown",e,!0),dhtmlx.alert=function(){var t=h.apply(this,arguments);return t.type=t.type||"confirm",o(t)},dhtmlx.confirm=function(){var t=h.apply(this,arguments);return t.type=t.type||"alert",d(t)},dhtmlx.modalbox=function(){var t=h.apply(this,arguments);return t.type=t.type||"alert",l(t)},dhtmlx.modalbox.hide=function(t){for(;t&&t.getAttribute&&!t.getAttribute("dhxbox");)t=t.parentNode;t&&(t.parentNode.removeChild(t),n(!1))};var g=dhtmlx.message=function(t){t=_.apply(this,arguments),t.type=t.type||"info";var e=t.type.split("-")[0];switch(e){case"alert":return o(t);case"confirm":return d(t);case"modalbox":return l(t);default:return a(t)}};g.seed=(new Date).valueOf(),g.uid=function(){return g.seed++},g.expire=4e3,g.keyboard=!0,g.position="top",g.pull={},g.timers={},g.hideAll=function(){for(var t in g.pull)g.hide(t)},g.hide=function(t){var e=g.pull[t];e&&e.parentNode&&(window.setTimeout(function(){e.parentNode.removeChild(e),e=null},2e3),e.className+=" hidden",g.timers[t]&&window.clearTimeout(g.timers[t]),delete g.pull[t])}}(),gantt={version:"2.0.0"},dhtmlxEventable=function(obj){obj._silent_mode=!1,obj._silentStart=function(){this._silent_mode=!0},obj._silentEnd=function(){this._silent_mode=!1},obj.attachEvent=function(t,e,n){return t="ev_"+t.toLowerCase(),this[t]||(this[t]=new this._eventCatcher(n||this)),t+":"+this[t].addEvent(e)},obj.callEvent=function(t,e){return this._silent_mode?!0:(t="ev_"+t.toLowerCase(),this[t]?this[t].apply(this,e):!0)},obj.checkEvent=function(t){return!!this["ev_"+t.toLowerCase()]},obj._eventCatcher=function(obj){var dhx_catch=[],z=function(){for(var t=!0,e=0;ethis.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._scroll_task_area(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,0);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){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};this.callEvent("onTaskCreated",[s]),this.addTask(s),this.showTask(s.id),this.config.details_on_create&&this.showLightbox(s.id)},this)},gantt._render_grid=function(){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),n.length>0)for(var o=r/(n.length?n.length:1),a=0;an+o.width&&(o.width=this.config.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),h="width:"+(o.width-(r?1:0))+"px;",_=o.label||i["column_"+o.name];_=_||"";var c="
"+_+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){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 h=0;h0;_?(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=0===t.$index%2?"":" 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.getTaskIndex=function(t){for(var e=this._branches[this.getTask(t).parent],n=0;nr&&e--}this._branch_update(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);return n?(this.hideQuickInfo&&this._hideQuickInfo(),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.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);if(this.isTaskExists(d)){var l=gantt._get_position(o),h=this.getTask(d),_=this.getTask(t.config.id);if(l.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)&&t){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));e[o]+=d,r+=d}e[e.length-1]+=t-r},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)=h;h++)if(+s[h]!=+a[l]);else{var _=this.getSum(t.width,r,h-1),c=this.getSum(e.width,d,l-1);c!=_&&this.setSumWidth(_,e,d,l-1),r=h,d=l}},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)},formatScales: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),h=0,_=0;_t.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 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));return this.path},get_endpoint:function(t){var e,n,i=gantt.config.links,a=gantt._get_visible_order(t.source),s=gantt._get_visible_order(t.target);return t.type==i.start_to_start?(e=gantt._pull[t.source].start_date,n=gantt._pull[t.target].start_date):t.type==i.finish_to_finish?(e=gantt._pull[t.source].end_date,n=gantt._pull[t.target].end_date):t.type==i.finish_to_start?(e=gantt._pull[t.source].end_date,n=gantt._pull[t.target].start_date):dhtmlx.assert(!1,"Invalid link type"),{x:gantt.posFromDate(e),e_x:gantt.posFromDate(n),y:gantt._y_from_ind(a),e_y:gantt._y_from_ind(s)}}},gantt._init_links_dnd=function(){function t(t){var e=n(),i=["gantt_link_tooltip"];e.from&&e.to&&(gantt.isLinkAllowed(e.from,e.to,e.from_start,e.to_start)?i.push("gantt_allowed_link"):i.push("gantt_invalid_link"));var a=gantt.templates.drag_link_class(e.from,e.from_start,e.to,e.to_start);a&&i.push(a);var s="
"+gantt.templates.drag_link(e.from,e.from_start,e.to,e.to_start)+"
";t.innerHTML=s}function e(t,e){t.style.left=e.x+5+"px",t.style.top=e.y+5+"px"}function n(){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 i(){gantt._link_source_task=gantt._link_source_task_start=gantt._link_target_task=gantt._link_target_task_start=null}function a(t,e,i,a){var d=o(),l=n(),h=["gantt_link_direction"];gantt.templates.link_direction_class&&h.push(gantt.templates.link_direction_class(l.from,l.from_start,l.to,l.to_start));var _=Math.sqrt(Math.pow(i-t,2)+Math.pow(a-e,2));if(_=Math.max(0,_-3)){d.className=h.join(" ");var c=(a-e)/(i-t),g=Math.atan(c);2==r(t,i,e,a)?g+=Math.PI:3==r(t,i,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(_)+"px"];if(-1!=window.navigator.userAgent.indexOf("MSIE 8.0")){v.push('-ms-filter: "'+s(u,f)+'"');var x=Math.abs(Math.round(t-i)),k=Math.abs(Math.round(a-e));switch(r(t,i,e,a)){case 1:p-=k;break;case 2:m-=x,p-=k;break;case 3:m-=x}}v.push("top:"+p+"px"),v.push("left:"+m+"px"),d.style.cssText=v.join(";")}}function s(t,e){return"progid:DXImageTransform.Microsoft.Matrix(M11 = "+e+","+"M12 = -"+t+","+"M21 = "+t+","+"M22 = "+e+","+"SizingMethod = 'auto expand'"+")"}function r(t,e,n,i){return e>=t?n>=i?1:4:n>=i?2:3}function o(){return l._direction||(l._direction=document.createElement("div"),gantt.$task_links.appendChild(l._direction)),l._direction}function d(){l._direction&&(l._direction.parentNode&&l._direction.parentNode.removeChild(l._direction),l._direction=null)}var l=new dhtmlxDnD(this.$task_bars,{sensitivity:0,updates_per_second:60}),h="task_left",_="gantt_link_point",c="gantt_link_control";l.attachEvent("onBeforeDragStart",dhtmlx.bind(function(t,e){var n=e.target||e.srcElement;if(i(),gantt.getState().drag_id)return!1;if(gantt._locate_css(n,_)){gantt._locate_css(n,h)&&(gantt._link_source_task_start=!0);var a=gantt._link_source_task=this.locate(e),s=gantt.getTask(a);return this._dir_start={y:gantt._y_from_ind(gantt._get_visible_order(a))+gantt.config.row_height/2,x:gantt.posFromDate(gantt._link_source_task_start?s.start_date:s.end_date)},!0}return!1},this)),l.attachEvent("onAfterDragStart",dhtmlx.bind(function(){t(l.config.marker)},this)),l.attachEvent("onDragMove",dhtmlx.bind(function(n,i){var s=l.config,r=l.getPosition(i);e(s.marker,r);var o=gantt._is_link_drop_area(i),d=gantt._link_target_task,_=gantt._link_landing,c=gantt._link_target_task_start,g=gantt.locate(i);if(o)var u=!1,u=!!gantt._locate_css(i,h),o=!!g;if(gantt._link_target_task=g,gantt._link_landing=o,gantt._link_target_task_start=u,o){var f=gantt.getTask(g),p=Math.floor((i.srcElement||i.target).offsetWidth/2);this._dir_end={y:gantt._y_from_ind(gantt._get_visible_order(g))+gantt.config.row_height/2,x:gantt.posFromDate(u?f.start_date:f.end_date)+(u?-1:1)*p}}else this._dir_end=gantt._get_mouse_pos(i);var m=!(_==o&&d==g&&c==u);return m&&(d&&gantt.refreshTask(d,!1),g&&gantt.refreshTask(g,!1)),m&&t(s.marker),a(this._dir_start.x,this._dir_start.y,this._dir_end.x,this._dir_end.y),!0},this)),l.attachEvent("onDragEnd",dhtmlx.bind(function(){var t=n();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})}i(),t.from&&gantt.refreshTask(t.from,!1),t.to&&gantt.refreshTask(t.to,!1),d()},this)),gantt._is_link_drop_area=function(t){return!!gantt._locate_css(t,c)}},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(),this._taskRenderer=gantt._task_renderer("line",this._render_task_element,this.$task_bars),this._linkRenderer=gantt._task_renderer("links",this._render_link_element,this.$task_links),this._gridRenderer=gantt._task_renderer("grid_items",this._render_grid_item,this.$grid_data),this._bgRenderer=gantt._task_renderer("bg_lines",this._render_bg_line,this.$task_bg),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._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])){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))},"0"),this.eachTask(function(t){t.start_date&&+t.start_date<+a&&(a=new Date(t.start_date))},"0"),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(_)}return e.join("")},gantt._render_tasks_scales=function(){this._init_tasks_range(),this._scroll_resize(),this._set_sizes();var t=this._scale_helpers,e=[t.primaryScale()].concat(this.config.subscales);t.sortScales(e);for(var n=t.prepareConfigs(e,this.config.min_column_width,this.$task.offsetWidth,this.config.scale_height-1),i=this._tasks=n[n.length-1],a=[],s=this.templates.scale_row_class,r=0;r'+this._prepare_scale_html(n[r])+"")}this.$task_scale.style.height=this.config.scale_height-1+"px",this.$task_data.style.width=this.$task_scale.style.width=i.full_width+this.$scroll_ver.offsetWidth+"px",this.$task_links.style.width=this.$task_bars.style.width=i.full_width+"px",e=a.join(""),this.$task_scale.innerHTML=e},gantt._render_bg_line=function(t){for(var e=gantt._tasks,n=e.count,i=[],a=0;n>a;a++){var s=e.width[a],r="width:"+s+"px;",o="gantt_task_cell"+(a==n-1?" gantt_last_cell":"");h=this.templates.task_cell_class(t,e.trace_x[a]),h&&(o+=" "+h);var d="
";i.push(d)}var l=0!==t.$index%2,h=gantt.templates.task_row_class(t.start_date,t.end_date,t),_="gantt_task_row"+(l?" odd":"")+(h?" "+h:"");this.getState().selected_task==t.id&&(_+=" gantt_selected");var c=document.createElement("div");return c.className=_,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._render_task_element=function(t){if(!(+t.start_date<+this._max_date&&+t.end_date>+this._min_date))return!1;var e=this._get_task_coord(t),n=this.posFromDate(t.end_date),i=this.config,a=this._tasks.bar_height;a=Math.min(a,this.config.row_height);var s=Math.floor((this.config.row_height-a)/2),r=document.createElement("div"),o=Math.round(n-e.x);r.setAttribute(this.config.task_attribute,t.id),r.appendChild(gantt._render_task_content(t,o)),r.className=this._combine_item_class("gantt_task_line",this.templates.task_class(t.start_date,t.end_date,t),t.id),r.style.cssText=["left:"+e.x+"px","top:"+(s+e.y)+"px","height:"+a+"px","line-height:"+a+"px","width:"+o+"px"].join(";");var d=this._render_leftside_content(t);return d&&r.appendChild(d),d=this._render_rightside_content(t),d&&r.appendChild(d),i.show_progress&&this._render_task_progress(t,r,o),i.drag_resize&&!this._is_flex_task(t)&&gantt._render_pair(r,"gantt_task_drag",t,function(t){var e=document.createElement("div");return e.className=t,e}),i.drag_links&&gantt._render_pair(r,"gantt_link_control",t,function(t){var e=document.createElement("div");e.className=t,e.style.cssText=["height:"+a+"px","line-height:"+a+"px"].join(";");var n=document.createElement("div");return n.className="gantt_link_point",e.appendChild(n),e}),r},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 i=0;is;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.showTask=function(t){var e=this.getTaskNode(t),n=Math.max(e.offsetLeft-this.config.task_scroll_offset,0),i=e.offsetTop-(this.$task_data.offsetHeight-this.config.row_height)/2;this._scroll_task_area(n,i)},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={},n=t.data,i=0;in;n++)if(e[n]==t)return n;return-1},gantt.eachTask=function(t,e,n){e=e||0,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))},0,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");var n={collections:{links:[]}},i=n.data=[];xml=e.doXPath("//task");for(var a=0;at&&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._update_parents(e.id),this.refreshTask(e.id),this.callEvent("onAfterTaskUpdate",[t,e]),this._sync_order(),this._adjust_scales(),void 0)},gantt.addTask=function(t,e){return dhtmlx.defined(e)||(e=t.parent||0),dhtmlx.defined(this._pull[e])||(e=0),t.parent=e,t=this._init_task(t),this.callEvent("onBeforeTaskAdd",[t.id,t])===!1?!1:(this._pull[t.id]=t,this._branches[t.parent]||(this._branches[t.parent]=[]),this._branches[t.parent].push(t.id),this.refreshData(),this.callEvent("onAfterTaskAdd",[t.id,t]),this._adjust_scales(),t.id)},gantt.deleteTask=function(t){return this._deleteTask(t)},gantt._deleteTask=function(t,e){var n=this.getTask(t);if(!e&&this.callEvent("onBeforeTaskDelete",[t,n])===!1)return!1;!e&&this._dp&&this._dp.setUpdateMode("off");var i=this._branches[n.id]||[];this._selected_task==t&&(this._selected_task=null);for(var a=0;a0;)this.deleteLink(n.$source[0]);for(;n.$target.length>0;)this.deleteLink(n.$target[0]);return delete this._pull[t],delete this._branches[t],this._branch_update(n.parent,t),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.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._lightbox_id==t&&(this._lightbox_id=e),this._branch_update(n.parent,t,e),this._sync_order(),this.callEvent("onTaskIdChange",[t,e])},gantt._branch_update=function(t,e,n){var i=this._branches[t];if(i){for(var a=[],s=0;s+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<+a&&(a=new Date(t.start_date))},n.id),1/0!=a&&(n.start_date=a)}(n.$no_end||n.$no_start)&&(this._update_task_duration(n),e||this.refreshTask(n.id,!0)),n.parent&&this.isTaskExists(n.parent)&&this._update_parents(n.parent,e)}},gantt._round_date=function(t,e,n){for(var i=gantt.date[n+"_start"](new Date(this._min_date));+t>+i;)i=gantt.date.add(i,e,n);var a=gantt.date.add(i,-1*e,n);return Math.abs(t-a)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.callEvent("onBeforeLightbox",[t])){var e=this.getLightbox();this._center_lightbox(e),this.showCover(),this._fill_lightbox(t,e),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.config.lightbox.sections,i=0;i
"+this.locale.labels[i[a]]+"
";i=this.config.buttons_right;for(var a in i)n+="
"+this.locale.labels[i[a]]+"
";n+="",t.innerHTML=n,gantt.config.drag_lightbox&&(t.firstChild.onmousedown=gantt._ready_to_dnd,t.firstChild.onselectstart=function(){return!1},t.firstChild.style.cursor="pointer",gantt._init_dnd_events()),document.body.insertBefore(t,document.body.firstChild),this._lightbox=t;var s=this.config.lightbox.sections;n=this._render_sections(s);for(var r=t.getElementsByTagName("div"),a=0;a
"+this.locale.labels["button_"+t[n].button]+"
"),this.config.wide_form&&(e+="
"),e+="
"+a+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(){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)),n&&(i=gantt.form_blocks[gantt.config.lightbox.sections[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(){this.callEvent("onLightboxCancel",[this._lightbox_id,this.$new]),this.hideLightbox()},gantt._save_lightbox=function(){var t=this.getLightboxValues();this.callEvent("onLightboxSave",[this._lightbox_id,t,!!t.$new])&&(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.config.lightbox.sections,n=0;n0&&(r+=" "),d){case"%Y":t._time_format_order[2]=o,t._time_format_order.size++,r+=" ";break;case"%m":t._time_format_order[1]=o,t._time_format_order.size++,r+="";break;case"%d":t._time_format_order[0]=o,t._time_format_order.size++,r+="";break;case"%H:%i":var a=1440,s=0;t._time_format_order[3]=o,t._time_format_order.size++,r+=""}}return r},_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="
"+e+"  –  "+e+"
";return n},set_value:function(t,e,n,i){function a(){var t=new Date(r[o[2]].value,r[o[1]].value,r[o[0]].value,0,0),e=new Date(t.getTime()+1e3*60*gantt.config.event_duration);this.form_blocks._fill_lightbox_select(r,o.size,e,o,s)}var s=this.config,r=t.getElementsByTagName("select"),o=i._time_format_order;if(i._time_format_size,s.auto_end_date&&s.event_duration)for(var d=0;4>d;d++)r[d].onchange=a;this.form_blocks._fill_lightbox_select(r,0,n.start_date,o,s),this.form_blocks._fill_lightbox_select(r,o.size,n.end_date,o,s)},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._tasks.unit+"s"],i="
"+n+"
",a="
"+e+" "+i+"
";return a},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.date.add(e,n,gantt._tasks.unit);_.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],h=[d[0],d[2]],_=t.getElementsByTagName("span")[0],c=i._time_format_order;h[0].onclick=dhtmlx.bind(function(){s(-1*this.config.duration_step)},this),h[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):(window.setTimeout(function(){a() +},1),void 0)},this),l.onchange=dhtmlx.bind(function(){a()},this),this.form_blocks._fill_lightbox_select(o,0,n.start_date,c,r);var g,u=gantt._tasks.unit;g=n.end_date?(n.end_date.valueOf()-n.start_date.valueOf())/(1e3*this._get_line(u)):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.date.add(e.start_date,i,this._tasks.unit),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])}}},gantt._is_lightbox_timepicker=function(){for(var t=this.config.lightbox.sections,e=0;e
",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(){gantt.deleteTask(t),gantt.hideLightbox()})}}},gantt._set_sizes=function(){this._x=this._obj.clientWidth,this._y=this._obj.clientHeight,this._x<20||this._y<20||(this.$grid.style.height=this.$task.style.height=this._y-this.$scroll_hor.offsetHeight-2+"px",this.$grid_data.style.height=this.$task_data.style.height=this._y-(this.config.scale_height||0)-this.$scroll_hor.offsetHeight-2+"px",this.$grid.style.width=this.config.grid_width-1+"px",this.$grid_data.style.width=this.config.grid_width-1+"px",this.$task.style.width=this._x-this.config.grid_width-2+"px")},gantt.getScrollState=function(){return{x:this.$task.scrollLeft,y:this.$task_data.scrollTop}},gantt.scrollTo=function(t,e){null!==t&&(this.$task.scrollLeft=t),null!==e&&(this.$task_data.scrollTop=e)},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]||0;t&&this.showTask(t)}},gantt._set_scroll_events=function(){dhtmlxEvent(this.$scroll_hor,"scroll",function(){if(!gantt._touch_scroll_active){var t=gantt.$scroll_hor.scrollLeft;gantt._scroll_task_area(t)}}),dhtmlxEvent(this.$scroll_ver,"scroll",function(){if(!gantt._touch_scroll_active){var t=gantt.$scroll_ver.scrollTop;gantt.$grid_data.scrollTop=t,gantt._scroll_task_area(null,t)}}),dhtmlxEvent(this.$task,"scroll",function(){var t=gantt.$task.scrollLeft;gantt.$scroll_hor.scrollLeft=t}),dhtmlxEvent(this.$task_data,"scroll",function(){var t=gantt.$task_data.scrollTop;gantt.$scroll_ver.scrollTop=gantt.$grid_data.scrollTop=t}),dhtmlxEvent(gantt.$container,"mousewheel",function(t){if(t.wheelDeltaX){var e=t.wheelDeltaX/-40,n=gantt.$task.scrollLeft+30*e;gantt._scroll_task_area(n,null),gantt.$scroll_hor.scrollTop=i}else{var e=t.wheelDelta/-40;"undefined"==typeof t.wheelDelta&&(e=t.detail);var i=gantt.$grid_data.scrollTop+30*e;gantt._scroll_task_area(null,i),gantt.$scroll_ver.scrollTop=i}return t.preventDefault&&t.preventDefault(),t.cancelBubble=!0,!1})},gantt._scroll_resize=function(){if(!(this._x<20||this._y<20)){var t=this.config.grid_width,e=this._x-t,n=this._y-this.config.scale_height,i=this.$task_data.offsetWidth-this.config.scroll_size,a=this.config.row_height*this._order.length,s=i>e,r=a>n;this.$scroll_hor.style.display=s?"block":"none",this.$scroll_hor.style.height=(s?this.config.scroll_size:0)+"px",this.$scroll_hor.style.width=this._x-(r?this.config.scroll_size:2)+"px",this.$scroll_hor.firstChild.style.width=i+t+this.config.scroll_size+2+"px",this.$scroll_ver.style.display=r?"block":"none",this.$scroll_ver.style.width=(r?this.config.scroll_size:0)+"px",this.$scroll_ver.style.height=this._y-(s?this.config.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+a+"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)},gantt.selectTask=function(t){if(this.config.select_task){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.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"},duration_unit:"day",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,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"}]},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){this.config[t]&&!this.config[t].$used&&(e&&this.templates[t]||(this.templates[t]=this.date.date_to_str(this.config[t])),this.config[t]=new String(this.config[t]),this.config[t].$used=!0)},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""},task_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("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,[]):(t.error("Method "+n+" does not exist on jQuery.dhx_gantt"),void 0)}}(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",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)",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 h=d.pageX-l.pageX,_=d.pageY-l.pageY;!o&&(Math.abs(h)>5||Math.abs(_)>5)&&(gantt._touch_scroll_active=o=!0,s=0,a=gantt.getScrollState()),o&&gantt.scrollTo(a.x+h,a.y+_)}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 r=!1,void 0;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)})}; \ 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 new file mode 100755 index 0000000000..d942eac048 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/ext/dhtmlxgantt_quick_info.js @@ -0,0 +1,13 @@ +/* +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 new file mode 100755 index 0000000000..d14af2d55b --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/ext/dhtmlxgantt_tooltip.js @@ -0,0 +1,10 @@ +/* +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/locale/locale.js b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale.js new file mode 100755 index 0000000000..15dac11e3d --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale.js @@ -0,0 +1,7 @@ +/* +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 new file mode 100755 index 0000000000..6e0f679acf --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_ar.js @@ -0,0 +1,7 @@ +/* +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 new file mode 100755 index 0000000000..6de9062792 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_be.js @@ -0,0 +1,7 @@ +/* +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 new file mode 100755 index 0000000000..f087979c7c --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_ca.js @@ -0,0 +1,7 @@ +/* +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 new file mode 100755 index 0000000000..eb3cbb82ee --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_cn.js @@ -0,0 +1,7 @@ +/* +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 new file mode 100755 index 0000000000..a5a193e31a --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_cs.js @@ -0,0 +1,7 @@ +/* +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 new file mode 100755 index 0000000000..e4d0999329 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_da.js @@ -0,0 +1,7 @@ +/* +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 new file mode 100755 index 0000000000..ab0e7c344c --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_de.js @@ -0,0 +1,7 @@ +/* +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 new file mode 100755 index 0000000000..903ae5f695 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_el.js @@ -0,0 +1,7 @@ +/* +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 new file mode 100755 index 0000000000..cf2267b41c --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_es.js @@ -0,0 +1,7 @@ +/* +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 new file mode 100755 index 0000000000..fcf87e19af --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_fi.js @@ -0,0 +1,7 @@ +/* +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 new file mode 100755 index 0000000000..6f9b2ea639 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_fr.js @@ -0,0 +1,7 @@ +/* +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 new file mode 100755 index 0000000000..3d991b4a13 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_he.js @@ -0,0 +1,7 @@ +/* +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 new file mode 100755 index 0000000000..2b11bee283 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_hu.js @@ -0,0 +1,7 @@ +/* +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 new file mode 100755 index 0000000000..1449540331 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_id.js @@ -0,0 +1,7 @@ +/* +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 new file mode 100755 index 0000000000..c5ce336207 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_it.js @@ -0,0 +1,7 @@ +/* +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 new file mode 100755 index 0000000000..251ca403b2 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_jp.js @@ -0,0 +1,7 @@ +/* +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 new file mode 100755 index 0000000000..934915fbca --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_nb.js @@ -0,0 +1,7 @@ +/* +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 new file mode 100755 index 0000000000..8576684643 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_nl.js @@ -0,0 +1,7 @@ +/* +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 new file mode 100755 index 0000000000..33ace5e467 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_no.js @@ -0,0 +1,7 @@ +/* +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 new file mode 100755 index 0000000000..0e2119dae6 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_pl.js @@ -0,0 +1,7 @@ +/* +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 new file mode 100755 index 0000000000..a36c497ed7 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_pt.js @@ -0,0 +1,7 @@ +/* +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 new file mode 100755 index 0000000000..e62d3f2228 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_ro.js @@ -0,0 +1,7 @@ +/* +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 new file mode 100755 index 0000000000..eddc78e969 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_ru.js @@ -0,0 +1,7 @@ +/* +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 new file mode 100755 index 0000000000..c52c078f8f --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_si.js @@ -0,0 +1,7 @@ +/* +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 new file mode 100755 index 0000000000..0eefa08b17 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_sk.js @@ -0,0 +1,7 @@ +/* +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 new file mode 100755 index 0000000000..365e2c8117 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_sv.js @@ -0,0 +1,7 @@ +/* +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 new file mode 100755 index 0000000000..ceb3811dfb --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_tr.js @@ -0,0 +1,7 @@ +/* +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 new file mode 100755 index 0000000000..336eef875d --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/locale/locale_ua.js @@ -0,0 +1,7 @@ +/* +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 new file mode 100755 index 0000000000..06b8d25556 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/skins/dhtmlxgantt_broadway.css @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..c54baed87c --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/skins/dhtmlxgantt_meadow.css @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..6c7aeafbd0 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/skins/dhtmlxgantt_skyblue.css @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..5a2e2b6203 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/skins/dhtmlxgantt_terrace.css @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..af5bd90e7e --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/dhtmlxgantt.js @@ -0,0 +1,8378 @@ +/* +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 new file mode 100755 index 0000000000..32b2025d67 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/dhtmlxgantt.js.map @@ -0,0 +1,4 @@ +/* +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 new file mode 100755 index 0000000000..22fb18a45c --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/ext/dhtmlxgantt_quick_info.js @@ -0,0 +1,181 @@ +/* +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 new file mode 100755 index 0000000000..0244093f93 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/ext/dhtmlxgantt_quick_info.js.map @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..a87db87c96 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/ext/dhtmlxgantt_tooltip.js @@ -0,0 +1,145 @@ +/* +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 new file mode 100755 index 0000000000..72aab40403 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/ext/dhtmlxgantt_tooltip.js.map @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..6df0abd8e9 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale.js @@ -0,0 +1,50 @@ +/* +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 new file mode 100755 index 0000000000..602c700f0f --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale.js.map @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..b5b2bdb384 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ar.js @@ -0,0 +1,53 @@ +/* +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 new file mode 100755 index 0000000000..95aaa79f81 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ar.js.map @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..485257c2ef --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_be.js @@ -0,0 +1,54 @@ +/* +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 new file mode 100755 index 0000000000..34b9b9d492 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_be.js.map @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..cefca7fc30 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ca.js @@ -0,0 +1,57 @@ +/* +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 new file mode 100755 index 0000000000..31e54559ae --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ca.js.map @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..2df35d5bc7 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_cn.js @@ -0,0 +1,60 @@ +/* +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 new file mode 100755 index 0000000000..4f0e00a9bc --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_cn.js.map @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..980da02a9d --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_cs.js @@ -0,0 +1,54 @@ +/* +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 new file mode 100755 index 0000000000..44b51622cf --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_cs.js.map @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..3acce56a8c --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_da.js @@ -0,0 +1,54 @@ +/* +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 new file mode 100755 index 0000000000..0523c56ef9 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_da.js.map @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..ea03e48aad --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_de.js @@ -0,0 +1,54 @@ +/* +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 new file mode 100755 index 0000000000..534e9a1a74 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_de.js.map @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..4966dbe1af --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_el.js @@ -0,0 +1,54 @@ +/* +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 new file mode 100755 index 0000000000..769f3668bc --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_el.js.map @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..f27d647de5 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_es.js @@ -0,0 +1,57 @@ +/* +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 new file mode 100755 index 0000000000..65e79e043e --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_es.js.map @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..17b3605df0 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_fi.js @@ -0,0 +1,54 @@ +/* +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 new file mode 100755 index 0000000000..a8891fd5b2 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_fi.js.map @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..81fed8c01d --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_fr.js @@ -0,0 +1,52 @@ +/* +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 new file mode 100755 index 0000000000..5894cf620e --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_fr.js.map @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..ff665b6add --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_he.js @@ -0,0 +1,54 @@ +/* +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 new file mode 100755 index 0000000000..67bd8d3368 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_he.js.map @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..67cbcbb42b --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_hu.js @@ -0,0 +1,54 @@ +/* +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 new file mode 100755 index 0000000000..a5c9163cea --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_hu.js.map @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..ba82dc187b --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_id.js @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..c4f2c0f0f1 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_id.js.map @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..db695646bc --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_it.js @@ -0,0 +1,54 @@ +/* +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 new file mode 100755 index 0000000000..9ba62a9af2 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_it.js.map @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..d46fc8a3b4 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_jp.js @@ -0,0 +1,57 @@ +/* +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 new file mode 100755 index 0000000000..70dfcff405 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_jp.js.map @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..ff5edb32c9 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_nb.js @@ -0,0 +1,54 @@ +/* +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 new file mode 100755 index 0000000000..46e395e05e --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_nb.js.map @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..e5363a64b0 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_nl.js @@ -0,0 +1,54 @@ +/* +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 new file mode 100755 index 0000000000..2ad7ff0315 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_nl.js.map @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..b18049c68c --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_no.js @@ -0,0 +1,54 @@ +/* +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 new file mode 100755 index 0000000000..e9bfea2da6 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_no.js.map @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..b16e18f694 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_pl.js @@ -0,0 +1,54 @@ +/* +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 new file mode 100755 index 0000000000..dd77fa7b6c --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_pl.js.map @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..df38e1b499 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_pt.js @@ -0,0 +1,63 @@ +/* +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 new file mode 100755 index 0000000000..67e974f6e1 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_pt.js.map @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..2d6de367a8 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ro.js @@ -0,0 +1,58 @@ +/* +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 new file mode 100755 index 0000000000..8ec0a13bc7 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ro.js.map @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..c0b448a9ad --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ru.js @@ -0,0 +1,54 @@ +/* +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 new file mode 100755 index 0000000000..89a03e25ef --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ru.js.map @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..b8ce9d5492 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_si.js @@ -0,0 +1,54 @@ +/* +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 new file mode 100755 index 0000000000..321a97ad3c --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_si.js.map @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..1af549f58e --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_sk.js @@ -0,0 +1,54 @@ +/* +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 new file mode 100755 index 0000000000..526c156efe --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_sk.js.map @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..a313f139be --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_sv.js @@ -0,0 +1,54 @@ +/* +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 new file mode 100755 index 0000000000..be6c654843 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_sv.js.map @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..57182aa038 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_tr.js @@ -0,0 +1,54 @@ +/* +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 new file mode 100755 index 0000000000..2f6965ea2f --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_tr.js.map @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..c6fa711f26 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ua.js @@ -0,0 +1,54 @@ +/* +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 new file mode 100755 index 0000000000..bbf1fedeaf --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/locale/locale_ua.js.map @@ -0,0 +1,5 @@ +/* +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 new file mode 100755 index 0000000000..78737fc41b --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_broadway.css @@ -0,0 +1,1371 @@ +/* +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 new file mode 100755 index 0000000000..a09aa8d088 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_meadow.css @@ -0,0 +1,1267 @@ +/* +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 new file mode 100755 index 0000000000..b34bd0a9b5 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_skyblue.css @@ -0,0 +1,1236 @@ +/* +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 new file mode 100755 index 0000000000..bf40efe237 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/codebase/sources/skins/dhtmlxgantt_terrace.css @@ -0,0 +1,1269 @@ +/* +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/license.txt b/phpgwapi/js/dhtmlxGantt/license.txt new file mode 100755 index 0000000000..0a98ec0ff2 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/license.txt @@ -0,0 +1,339 @@ + 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 new file mode 100755 index 0000000000..a3720934f8 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/readme.txt @@ -0,0 +1,18 @@ +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/samples/01_initialization/01_basic_init.html b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/01_basic_init.html new file mode 100755 index 0000000000..9111a40592 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/01_basic_init.html @@ -0,0 +1,39 @@ + + + + Basic initialization + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/01_initialization/02_load_json.html b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/02_load_json.html new file mode 100755 index 0000000000..445aa1480d --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/02_load_json.html @@ -0,0 +1,20 @@ + + + + Load data from JSON file + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/01_initialization/03_load_xml.html b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/03_load_xml.html new file mode 100755 index 0000000000..4f22c6205f --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/03_load_xml.html @@ -0,0 +1,21 @@ + + + + Load data from XML file + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/01_initialization/04_connector_json.html b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/04_connector_json.html new file mode 100755 index 0000000000..01efc377e8 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/04_connector_json.html @@ -0,0 +1,21 @@ + + + + Loading using connector and JSON + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/01_initialization/05_connector_xml.html b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/05_connector_xml.html new file mode 100755 index 0000000000..a5f55d762b --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/05_connector_xml.html @@ -0,0 +1,22 @@ + + + + Loading using connector and XML + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/01_initialization/06_touch_forced.html b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/06_touch_forced.html new file mode 100755 index 0000000000..07fcd10b22 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/06_touch_forced.html @@ -0,0 +1,23 @@ + + + + + + Forced touch mode + + + + + + + +
+ + + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/01_initialization/07_jquery.html b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/07_jquery.html new file mode 100755 index 0000000000..b237050df0 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/07_jquery.html @@ -0,0 +1,22 @@ + + + + jQuery integration + + + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/01_initialization/08_explicit_time_range.html b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/08_explicit_time_range.html new file mode 100755 index 0000000000..2e7bec423f --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/08_explicit_time_range.html @@ -0,0 +1,24 @@ + + + + Define date range + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/01_initialization/09_backward_compatibility.html b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/09_backward_compatibility.html new file mode 100755 index 0000000000..d1976298b4 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/09_backward_compatibility.html @@ -0,0 +1,20 @@ + + + + Loading data in Gantt 1.6 format + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/01_initialization/10_fixed_size.html b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/10_fixed_size.html new file mode 100755 index 0000000000..2835224b0d --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/10_fixed_size.html @@ -0,0 +1,16 @@ + + + + Fixed size gantt + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/01_initialization/11_clickable_links.html b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/11_clickable_links.html new file mode 100755 index 0000000000..31726b1bb4 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/11_clickable_links.html @@ -0,0 +1,45 @@ + + + + Clickable links + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/01_initialization/12_localization.html b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/12_localization.html new file mode 100755 index 0000000000..8ddd5bf084 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/12_localization.html @@ -0,0 +1,22 @@ + + + + Localization + + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/01_initialization/13_project_duration.html b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/13_project_duration.html new file mode 100755 index 0000000000..7673a82344 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/13_project_duration.html @@ -0,0 +1,79 @@ + + + + Project duration + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/01_initialization/14_reinitializtion.html b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/14_reinitializtion.html new file mode 100755 index 0000000000..c2bf2e878d --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/14_reinitializtion.html @@ -0,0 +1,44 @@ + + + + ReInit in different container + + + + + + + +
+
+ +
+
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/01_initialization/15_connector_json_enddate.html b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/15_connector_json_enddate.html new file mode 100755 index 0000000000..26468383ae --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/15_connector_json_enddate.html @@ -0,0 +1,21 @@ + + + + Loading using connector and JSON + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/01_initialization/16_projects_and_milestones.html b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/16_projects_and_milestones.html new file mode 100755 index 0000000000..e088bcdef1 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/16_projects_and_milestones.html @@ -0,0 +1,83 @@ + + + + Projects and milestones + + + + + + + +
+ + + + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/01_initialization/index.html b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/index.html index 7e7c6be304..e4656f2fbc 100644 --- a/phpgwapi/js/dhtmlxGantt/samples/01_initialization/index.html +++ b/phpgwapi/js/dhtmlxGantt/samples/01_initialization/index.html @@ -1,45 +1,152 @@ - - + + - Initialization - - - - - - - - + + + + Gantt : Samples - -
- -
DHTMLX Docs & Samples Explorer
-
- -
-
- - -
-
- - - + +
+
+   +
+
+ + + + + + + + + + + + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/02_extensions/01_quickinfo.html b/phpgwapi/js/dhtmlxGantt/samples/02_extensions/01_quickinfo.html new file mode 100755 index 0000000000..9ff83b7072 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/02_extensions/01_quickinfo.html @@ -0,0 +1,21 @@ + + + + QuickInfo extension + + + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/02_extensions/02_tooltip.html b/phpgwapi/js/dhtmlxGantt/samples/02_extensions/02_tooltip.html new file mode 100755 index 0000000000..0f91489077 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/02_extensions/02_tooltip.html @@ -0,0 +1,20 @@ + + + + Tooltip + + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/02_extensions/index.html b/phpgwapi/js/dhtmlxGantt/samples/02_extensions/index.html new file mode 100755 index 0000000000..b4993bc083 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/02_extensions/index.html @@ -0,0 +1,87 @@ + + + + + + + Gantt : Samples + + +
+
+   +
+
+ + +
+
+
+
+ + + + + + + + + + + + + +
+
+ + + + +
+
+ + + + + + + + + + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/03_scales/01_multiple_scales.html b/phpgwapi/js/dhtmlxGantt/samples/03_scales/01_multiple_scales.html new file mode 100755 index 0000000000..81e114150c --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/03_scales/01_multiple_scales.html @@ -0,0 +1,38 @@ + + + + Multiple scales + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/03_scales/02_month_days.html b/phpgwapi/js/dhtmlxGantt/samples/03_scales/02_month_days.html new file mode 100755 index 0000000000..96b865dfd4 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/03_scales/02_month_days.html @@ -0,0 +1,29 @@ + + + + Month view + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/03_scales/03_full_year.html b/phpgwapi/js/dhtmlxGantt/samples/03_scales/03_full_year.html new file mode 100755 index 0000000000..ef8780034c --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/03_scales/03_full_year.html @@ -0,0 +1,38 @@ + + + + Year scale + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/03_scales/04_days.html b/phpgwapi/js/dhtmlxGantt/samples/03_scales/04_days.html new file mode 100755 index 0000000000..0024a48bed --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/03_scales/04_days.html @@ -0,0 +1,30 @@ + + + + Day hours + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/03_scales/05_dynamic_scales.html b/phpgwapi/js/dhtmlxGantt/samples/03_scales/05_dynamic_scales.html new file mode 100755 index 0000000000..4f3fe81c74 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/03_scales/05_dynamic_scales.html @@ -0,0 +1,99 @@ + + + + Dynamic scales + + + + + + + +
+
+
+
+ +
+ + + + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/03_scales/06_custom_scales.html b/phpgwapi/js/dhtmlxGantt/samples/03_scales/06_custom_scales.html new file mode 100755 index 0000000000..9e552d392b --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/03_scales/06_custom_scales.html @@ -0,0 +1,33 @@ + + + + Custom scales + + + + + + +
+ + + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/03_scales/07_minutes_scale.html b/phpgwapi/js/dhtmlxGantt/samples/03_scales/07_minutes_scale.html new file mode 100755 index 0000000000..54b2a13ea0 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/03_scales/07_minutes_scale.html @@ -0,0 +1,63 @@ + + + + Minutes timeline + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/03_scales/08_scale_autoconfig.html b/phpgwapi/js/dhtmlxGantt/samples/03_scales/08_scale_autoconfig.html new file mode 100755 index 0000000000..a8f9450bde --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/03_scales/08_scale_autoconfig.html @@ -0,0 +1,47 @@ + + + + Auto resize scale + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/03_scales/09_skip_weekends.html b/phpgwapi/js/dhtmlxGantt/samples/03_scales/09_skip_weekends.html new file mode 100755 index 0000000000..bd2fc23a3c --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/03_scales/09_skip_weekends.html @@ -0,0 +1,47 @@ + + + + Not render weekends on the scale + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/03_scales/10_working_hours.html b/phpgwapi/js/dhtmlxGantt/samples/03_scales/10_working_hours.html new file mode 100755 index 0000000000..76f6727a74 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/03_scales/10_working_hours.html @@ -0,0 +1,62 @@ + + + + Show working hours + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/03_scales/index.html b/phpgwapi/js/dhtmlxGantt/samples/03_scales/index.html new file mode 100755 index 0000000000..62b3b517ee --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/03_scales/index.html @@ -0,0 +1,127 @@ + + + + + + + Gantt : Samples + + +
+
+   +
+
+ + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ + + + + + + + + + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/04_customization/01_outer_content.html b/phpgwapi/js/dhtmlxGantt/samples/04_customization/01_outer_content.html new file mode 100755 index 0000000000..57c2a67ae6 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/04_customization/01_outer_content.html @@ -0,0 +1,28 @@ + + + + Define side content + + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/04_customization/02_custom_tree.html b/phpgwapi/js/dhtmlxGantt/samples/04_customization/02_custom_tree.html new file mode 100755 index 0000000000..14318a75f8 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/04_customization/02_custom_tree.html @@ -0,0 +1,61 @@ + + + + Custom tree formatting + + + + + + + +
+ + + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/04_customization/03_link_styles.html b/phpgwapi/js/dhtmlxGantt/samples/04_customization/03_link_styles.html new file mode 100755 index 0000000000..f7b270eb7f --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/04_customization/03_link_styles.html @@ -0,0 +1,70 @@ + + + + Link styles + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/04_customization/04_task_styles.html b/phpgwapi/js/dhtmlxGantt/samples/04_customization/04_task_styles.html new file mode 100755 index 0000000000..584bd714cf --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/04_customization/04_task_styles.html @@ -0,0 +1,69 @@ + + + + Task styles + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/04_customization/05_tree_template.html b/phpgwapi/js/dhtmlxGantt/samples/04_customization/05_tree_template.html new file mode 100755 index 0000000000..640ff438f2 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/04_customization/05_tree_template.html @@ -0,0 +1,34 @@ + + + + Template for tree nodes + + + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/04_customization/06_highlight_weekend.html b/phpgwapi/js/dhtmlxGantt/samples/04_customization/06_highlight_weekend.html new file mode 100755 index 0000000000..a725c9c19f --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/04_customization/06_highlight_weekend.html @@ -0,0 +1,40 @@ + + + + Highlighting weekends + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/04_customization/07_progress_text.html b/phpgwapi/js/dhtmlxGantt/samples/04_customization/07_progress_text.html new file mode 100755 index 0000000000..0a6d288bbf --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/04_customization/07_progress_text.html @@ -0,0 +1,35 @@ + + + + Text in the Progress bar + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/04_customization/08_templates.html b/phpgwapi/js/dhtmlxGantt/samples/04_customization/08_templates.html new file mode 100755 index 0000000000..628e76d0c0 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/04_customization/08_templates.html @@ -0,0 +1,63 @@ + + + + Styling task bars with events + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/04_customization/09_html_content.html b/phpgwapi/js/dhtmlxGantt/samples/04_customization/09_html_content.html new file mode 100755 index 0000000000..b5e9895168 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/04_customization/09_html_content.html @@ -0,0 +1,83 @@ + + + + Custom html content + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/04_customization/10_context_menu.html b/phpgwapi/js/dhtmlxGantt/samples/04_customization/10_context_menu.html new file mode 100755 index 0000000000..79f4008adb --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/04_customization/10_context_menu.html @@ -0,0 +1,53 @@ + + + + Simple context menu + + + + + + + + + + + + + +
+
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/04_customization/11_split_task.html b/phpgwapi/js/dhtmlxGantt/samples/04_customization/11_split_task.html new file mode 100755 index 0000000000..6d73edc735 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/04_customization/11_split_task.html @@ -0,0 +1,47 @@ + + + + Split task + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/04_customization/12_custom_task_type.html b/phpgwapi/js/dhtmlxGantt/samples/04_customization/12_custom_task_type.html new file mode 100755 index 0000000000..4300d844ba --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/04_customization/12_custom_task_type.html @@ -0,0 +1,110 @@ + + + + Custom task type + + + + + + + +
+ + + + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/04_customization/13_autosize_container.html b/phpgwapi/js/dhtmlxGantt/samples/04_customization/13_autosize_container.html new file mode 100755 index 0000000000..6706dd9a3a --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/04_customization/13_autosize_container.html @@ -0,0 +1,26 @@ + + + + Expand container + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/04_customization/index.html b/phpgwapi/js/dhtmlxGantt/samples/04_customization/index.html new file mode 100755 index 0000000000..614eb671c0 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/04_customization/index.html @@ -0,0 +1,142 @@ + + + + + + + Gantt : Samples + + +
+
+   +
+
+ + +
+
+ + + + + +
+
+ + + + + + + + + + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/01_lightbox_customization.html b/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/01_lightbox_customization.html new file mode 100755 index 0000000000..4847379977 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/01_lightbox_customization.html @@ -0,0 +1,43 @@ + + + + Lightbox customization + + + + + + + +
+ + + + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/02_progress_lightbox.html b/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/02_progress_lightbox.html new file mode 100755 index 0000000000..5255521379 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/02_progress_lightbox.html @@ -0,0 +1,60 @@ + + + + Progress lightbox + + + + + + +
+ + + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/02_select.html b/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/02_select.html new file mode 100755 index 0000000000..63424f992e --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/02_select.html @@ -0,0 +1,44 @@ + + + + Select control + + + + + +
+ + + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/03_validation.html b/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/03_validation.html new file mode 100755 index 0000000000..b037346606 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/03_validation.html @@ -0,0 +1,78 @@ + + + + Validate lightbox values + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/04_custom_editor.html b/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/04_custom_editor.html new file mode 100755 index 0000000000..24125568b1 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/04_custom_editor.html @@ -0,0 +1,42 @@ + + + + Custom control in the lightbox + + + + + + +
+ + + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/05_template.html b/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/05_template.html new file mode 100755 index 0000000000..b4ed56bc8d --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/05_template.html @@ -0,0 +1,42 @@ + + + + Template control + + + + + + +
+ + + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/06_custom_button.html b/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/06_custom_button.html new file mode 100755 index 0000000000..8713352b24 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/06_custom_button.html @@ -0,0 +1,73 @@ + + + + Custom button in the lightbox + + + + + + + +
+ + + + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/07_time.html b/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/07_time.html new file mode 100755 index 0000000000..5e08ba98ce --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/07_time.html @@ -0,0 +1,23 @@ + + + + Time control + + + + + +
+ + + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/08_parent_selector.html b/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/08_parent_selector.html new file mode 100755 index 0000000000..8a28ad6243 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/08_parent_selector.html @@ -0,0 +1,34 @@ + + + + Parent selector + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/common/v_complete.png b/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/common/v_complete.png new file mode 100755 index 0000000000000000000000000000000000000000..b4e8e25c64603686c5620df3ddb5fa251187e759 GIT binary patch literal 1232 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%u1Od5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|81#=KlDb#X~hD#E>34K5C;EJ)Q4 zN-fSWElLJPT$(b-ssbzLqSVBa{GyQj{2W*)24v)yx~s9Jp{cPOFyPHyjhxNQ zO$}grUGkGlb5rw5V0u#!dW~`F1to>t0-((uQxZDEK zn}XXdhB)==10ACeiddwGh6w>v4~Pj*wm=R%;iu*SQ+p9GS^KS%2j&(=7f%<*kcwMt zuAJ3&36weZac1_h1u18b-G8X6X|^fw#49&NYi{kMm!{2~Dq^mg=oq)nDyVHy7pU<0Ky}3{({hzYnuYg183noQph-$BJ|2Ey{wwTF7 z9@pR%lH4B5Zb`Sy9!bpI(O2?Vx4=uPpusFAQKv{sq;OsMx1&7S{IM0s1mx~InZG!& zu&Ok;JNC<~8m{U0C+DUM@oQ~cfA6hQbX4l()SMfu)0VG^^QqdfmdUg#!{NK0!DGGs z(w|?wwt9D5?V7=w?C%l>SAPpuwLIVAw^(|u#FlmYSD(n;IyY9=U*c$cajls8KK~=r zgLNXGTSt5`J@BC$I!Aogg?paN ub&4zJ86Q5Y;u$1)YvMnK`cu;xm>G23g5F*GCsYqAV?15`T-G@yGywomX0WCJ literal 0 HcmV?d00001 diff --git a/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/index.html b/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/index.html new file mode 100755 index 0000000000..679b4773e1 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/05_lightbox/index.html @@ -0,0 +1,122 @@ + + + + + + + Gantt : Samples + + +
+
+   +
+
+ + +
+
+ + + + + +
+
+ + + + + + + + + + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/06_skins/01_default.html b/phpgwapi/js/dhtmlxGantt/samples/06_skins/01_default.html new file mode 100755 index 0000000000..e3ab999791 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/06_skins/01_default.html @@ -0,0 +1,19 @@ + + + + Default skin + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/06_skins/02_default_lightbox.html b/phpgwapi/js/dhtmlxGantt/samples/06_skins/02_default_lightbox.html new file mode 100755 index 0000000000..268d05a29a --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/06_skins/02_default_lightbox.html @@ -0,0 +1,25 @@ + + + + Task edit form + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/06_skins/03_skyblue.html b/phpgwapi/js/dhtmlxGantt/samples/06_skins/03_skyblue.html new file mode 100755 index 0000000000..b452c4b7a6 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/06_skins/03_skyblue.html @@ -0,0 +1,19 @@ + + + + 'Skyblue' skin + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/06_skins/04_meadow.html b/phpgwapi/js/dhtmlxGantt/samples/06_skins/04_meadow.html new file mode 100755 index 0000000000..83a8a1b3eb --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/06_skins/04_meadow.html @@ -0,0 +1,28 @@ + + + + 'Meadow' skin + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/06_skins/05_broadway.html b/phpgwapi/js/dhtmlxGantt/samples/06_skins/05_broadway.html new file mode 100755 index 0000000000..2a4ff832ff --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/06_skins/05_broadway.html @@ -0,0 +1,30 @@ + + + + 'Broadway' skin + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/06_skins/index.html b/phpgwapi/js/dhtmlxGantt/samples/06_skins/index.html new file mode 100755 index 0000000000..0170abf1b3 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/06_skins/index.html @@ -0,0 +1,102 @@ + + + + + + + Gantt : Samples + + +
+
+   +
+
+ + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+
+ + + + + + + + + + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/07_grid/01_builtin_sorting.html b/phpgwapi/js/dhtmlxGantt/samples/07_grid/01_builtin_sorting.html new file mode 100755 index 0000000000..a1b81fcff1 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/07_grid/01_builtin_sorting.html @@ -0,0 +1,35 @@ + + + + Built-in sorting + + + + + +
+ + + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/07_grid/02_branch_ordering.html b/phpgwapi/js/dhtmlxGantt/samples/07_grid/02_branch_ordering.html new file mode 100755 index 0000000000..e21057811c --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/07_grid/02_branch_ordering.html @@ -0,0 +1,22 @@ + + + + Branch ordering + + + + + + +
+ + + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/07_grid/03_filtering.html b/phpgwapi/js/dhtmlxGantt/samples/07_grid/03_filtering.html new file mode 100755 index 0000000000..8035f46d2d --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/07_grid/03_filtering.html @@ -0,0 +1,96 @@ + + + + Filtering + + + + + + +
+
+ Display tasks with priority: + + + +
+
+ + +
+ + + + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/07_grid/04_custom_sorting.html b/phpgwapi/js/dhtmlxGantt/samples/07_grid/04_custom_sorting.html new file mode 100755 index 0000000000..de8a9ef672 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/07_grid/04_custom_sorting.html @@ -0,0 +1,39 @@ + + + + Custom sorting function + + + + + + + +
+ + + + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/07_grid/05_sort_api.html b/phpgwapi/js/dhtmlxGantt/samples/07_grid/05_sort_api.html new file mode 100755 index 0000000000..3da19380c2 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/07_grid/05_sort_api.html @@ -0,0 +1,48 @@ + + + + Using sorting methods + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/07_grid/06_without_grid.html b/phpgwapi/js/dhtmlxGantt/samples/07_grid/06_without_grid.html new file mode 100755 index 0000000000..1068db705b --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/07_grid/06_without_grid.html @@ -0,0 +1,21 @@ + + + + Render Gantt chart without grid + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/07_grid/index.html b/phpgwapi/js/dhtmlxGantt/samples/07_grid/index.html new file mode 100755 index 0000000000..d421a5a0fd --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/07_grid/index.html @@ -0,0 +1,107 @@ + + + + + + + Gantt : Samples + + +
+
+   +
+
+ + +
+
+
+ +
+ + + + +
+
+ + + + + + + + + + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/08_api/01_dnd_events.html b/phpgwapi/js/dhtmlxGantt/samples/08_api/01_dnd_events.html new file mode 100755 index 0000000000..0116d2911c --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/08_api/01_dnd_events.html @@ -0,0 +1,60 @@ + + + + D'n'D Events + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/08_api/02_constraints.html b/phpgwapi/js/dhtmlxGantt/samples/08_api/02_constraints.html new file mode 100755 index 0000000000..c5f721f9aa --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/08_api/02_constraints.html @@ -0,0 +1,96 @@ + + + + Constraints + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/08_api/03_validation.html b/phpgwapi/js/dhtmlxGantt/samples/08_api/03_validation.html new file mode 100755 index 0000000000..071ca39752 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/08_api/03_validation.html @@ -0,0 +1,40 @@ + + + + Validation + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/08_api/04_limit_project.html b/phpgwapi/js/dhtmlxGantt/samples/08_api/04_limit_project.html new file mode 100755 index 0000000000..71fed9b8a8 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/08_api/04_limit_project.html @@ -0,0 +1,131 @@ + + + + Fixed project dates + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/08_api/05_limit_drag_dates.html b/phpgwapi/js/dhtmlxGantt/samples/08_api/05_limit_drag_dates.html new file mode 100755 index 0000000000..33590b45ab --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/08_api/05_limit_drag_dates.html @@ -0,0 +1,77 @@ + + + + Denying dragging tasks out of specific dates + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/08_api/06_export.html b/phpgwapi/js/dhtmlxGantt/samples/08_api/06_export.html new file mode 100755 index 0000000000..2389d4f6f0 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/08_api/06_export.html @@ -0,0 +1,22 @@ + + + + Export data from Gantt + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/08_api/index.html b/phpgwapi/js/dhtmlxGantt/samples/08_api/index.html new file mode 100755 index 0000000000..0588c054b9 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/08_api/index.html @@ -0,0 +1,107 @@ + + + + + + + Gantt : Samples + + +
+
+   +
+
+ + +
+
+
+ +
+ + + + +
+
+ + + + + + + + + + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/09_worktime/01_working_hours_per_day.html b/phpgwapi/js/dhtmlxGantt/samples/09_worktime/01_working_hours_per_day.html new file mode 100755 index 0000000000..3949ab86ac --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/09_worktime/01_working_hours_per_day.html @@ -0,0 +1,98 @@ + + + + Calculate working hours + + + + + + + +
+ + + +
+
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/09_worktime/02_working_days.html b/phpgwapi/js/dhtmlxGantt/samples/09_worktime/02_working_days.html new file mode 100755 index 0000000000..285dab84d7 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/09_worktime/02_working_days.html @@ -0,0 +1,59 @@ + + + + Working days as duration + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/09_worktime/03_exclude_holidays.html b/phpgwapi/js/dhtmlxGantt/samples/09_worktime/03_exclude_holidays.html new file mode 100755 index 0000000000..67e76e840a --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/09_worktime/03_exclude_holidays.html @@ -0,0 +1,150 @@ + + + + Exclude holidays + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/09_worktime/04_custom_workday_duration.html b/phpgwapi/js/dhtmlxGantt/samples/09_worktime/04_custom_workday_duration.html new file mode 100755 index 0000000000..9e35439ea8 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/09_worktime/04_custom_workday_duration.html @@ -0,0 +1,95 @@ + + + + Custom working days and time + + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/09_worktime/05_adjust_to_worktime.html b/phpgwapi/js/dhtmlxGantt/samples/09_worktime/05_adjust_to_worktime.html new file mode 100755 index 0000000000..cad4fe3138 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/09_worktime/05_adjust_to_worktime.html @@ -0,0 +1,61 @@ + + + + Correct task position on drag + + + + + + + +
+ + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/09_worktime/index.html b/phpgwapi/js/dhtmlxGantt/samples/09_worktime/index.html new file mode 100755 index 0000000000..db6f3a3bee --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/09_worktime/index.html @@ -0,0 +1,102 @@ + + + + + + + Gantt : Samples + + +
+
+   +
+
+ + +
+ +
+ + + + + + + + + + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/common/data.json b/phpgwapi/js/dhtmlxGantt/samples/common/data.json new file mode 100755 index 0000000000..223adb9208 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/common/data.json @@ -0,0 +1,242 @@ +{ + "data": [{ + "id": 1, + "start_date": "2013-04-01 00:00:00", + "duration": 5, + "text": "Project #1", + "progress": 0.8, + "sortorder": 20, + "parent": 0, + "open": true + }, { + "id": 2, + "start_date": "2013-04-06 00:00:00", + "duration": 4, + "text": "Task #1", + "progress": 0.5, + "sortorder": 10, + "parent": 1, + "open": true + }, { + "id": 3, + "start_date": "2013-04-05 00:00:00", + "duration": 6, + "text": "Task #2", + "progress": 0.7, + "sortorder": 20, + "parent": 1, + "open": true + }, { + "id": 4, + "start_date": "2013-04-07 00:00:00", + "duration": 2, + "text": "Task #3", + "progress": 0, + "sortorder": 30, + "parent": 1, + "open": true + }, { + "id": 5, + "start_date": "2013-04-05 00:00:00", + "duration": 5, + "text": "Task #1.1", + "progress": 0.34, + "sortorder": 10, + "parent": 2, + "open": true + }, { + "id": 6, + "start_date": "2013-04-11 13:22:17", + "duration": 4, + "text": "Task #1.2", + "progress": 0.491477, + "sortorder": 20, + "parent": 2, + "open": true + }, { + "id": 7, + "start_date": "2013-04-07 00:00:00", + "duration": 5, + "text": "Task #2.1", + "progress": 0.2, + "sortorder": 10, + "parent": 3, + "open": true + }, { + "id": 8, + "start_date": "2013-04-06 00:00:00", + "duration": 4, + "text": "Task #2.2", + "progress": 0.9, + "sortorder": 20, + "parent": 3, + "open": true + }, { + "id": 9, + "start_date": "2013-04-06 00:00:00", + "duration": 5, + "text": "Task #3.1", + "progress": 1, + "sortorder": 10, + "parent": 4, + "open": true + }, { + "id": 10, + "start_date": "2013-04-06 00:00:00", + "duration": 3, + "text": "Task #3.2", + "progress": 0, + "sortorder": 20, + "parent": 4, + "open": true + }, { + "id": 11, + "start_date": "2013-04-06 00:00:00", + "duration": 4, + "text": "Task #3.3", + "progress": 0.33, + "sortorder": 30, + "parent": 4, + "open": true + }, { + "id": 12, + "start_date": "2013-04-02 08:34:17", + "duration": 18, + "text": "Project #2", + "progress": 0, + "sortorder": 10, + "parent": 0, + "open": true + }, { + "id": 13, + "start_date": "2013-04-02 08:13:42", + "duration": 10, + "text": "Task #1", + "progress": 0.2, + "sortorder": 15, + "parent": 12, + "open": true + }, { + "id": 14, + "start_date": "2013-04-04 00:00:00", + "duration": 4, + "text": "Task #2", + "progress": 0.9, + "sortorder": 20, + "parent": 12, + "open": true + }, { + "id": 15, + "start_date": "2013-04-05 00:00:00", + "duration": 3, + "text": "Task #3", + "progress": 0.6, + "sortorder": 30, + "parent": 12, + "open": true + }, { + "id": 16, + "start_date": "2013-04-01 00:00:00", + "duration": 3, + "text": "Task #4", + "progress": 0.214286, + "sortorder": 40, + "parent": 12, + "open": true + }, { + "id": 17, + "start_date": "2013-04-06 00:00:00", + "duration": 6, + "text": "Task #5", + "progress": 0.5, + "sortorder": 50, + "parent": 12, + "open": true + }, { + "id": 18, + "start_date": "2013-04-05 00:00:00", + "duration": 5, + "text": "Task #2.1", + "progress": 0.3, + "sortorder": 39.999999994179, + "parent": 14, + "open": true + }, { + "id": 19, + "start_date": "2013-04-05 00:00:00", + "duration": 6, + "text": "Task #2.2", + "progress": 0.6, + "sortorder": 29.999999995343, + "parent": 14, + "open": true + }, { + "id": 20, + "start_date": "2013-04-05 00:00:00", + "duration": 4, + "text": "Task #2.3", + "progress": 0.512605, + "sortorder": 39.999999995343, + "parent": 14, + "open": true + }, { + "id": 21, + "start_date": "2013-04-05 00:00:00", + "duration": 6, + "text": "Task #2.4", + "progress": 0.7, + "sortorder": 39.999999993015, + "parent": 14, + "open": true + }, { + "id": 22, + "start_date": "2013-04-05 00:00:00", + "duration": 7, + "text": "Task #4.1", + "progress": 1, + "sortorder": 10, + "parent": 16, + "open": true + }, { + "id": 23, + "start_date": "2013-04-05 00:00:00", + "duration": 5, + "text": "Task #4.2", + "progress": 1, + "sortorder": 20, + "parent": 16, + "open": true + }, { + "id": 24, + "start_date": "2013-04-05 00:00:00", + "duration": 5, + "text": "Task #4.3", + "progress": 0, + "sortorder": 30, + "parent": 16, + "open": true + }], + "collections": { + "links": [{ + "id": 1, + "source": 1, + "target": 2, + "type": "0" + }, { + "id": 2, + "source": 1, + "target": 3, + "type": "0" + }, { + "id": 3, + "source": 1, + "target": 4, + "type": "0" + }, { + "id": 4, + "source": 2, + "target": 6, + "type": "0" + }] + } +} \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/common/data.xml b/phpgwapi/js/dhtmlxGantt/samples/common/data.xml new file mode 100755 index 0000000000..4d2cfc8ee1 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/common/data.xml @@ -0,0 +1,225 @@ + + + + + + + + + + 1 + + + + + + + + + 1 + + + + + + + + + 1 + + + + + + + + + 1 + + + + + + + + + 1 + + + + + + + + + 1 + + + + + + + + + 1 + + + + + + + + + 1 + + + + + + + + + 1 + + + + + + + + + 1 + + + + + + + + + 1 + + + + + + + + + 1 + + + + + + + + + 1 + + + + + + + + + 1 + + + + + + + + + 1 + + + + + + + + + 1 + + + + + + + + + 1 + + + + + + + + + 1 + + + + + + + + + 1 + + + + + + + + + 1 + + + + + + + + + 1 + + + + + + + + + 1 + + + + + + + + + 1 + + + + + + + + + 1 + + + + + + + + \ No newline at end of file diff --git a/phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/dhtmlxcommon.js b/phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/dhtmlxcommon.js new file mode 100755 index 0000000000..613a6d2d5c --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/dhtmlxcommon.js @@ -0,0 +1,944 @@ +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; +}; + +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 != null)){ + 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){ + 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 (!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', (this.contenttype || '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 { + _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 != 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){ + this.detachEvent(name); + this[name] = null; + } + } + } + obj = null; +}; diff --git a/phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/dhtmlxmenu.js b/phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/dhtmlxmenu.js new file mode 100755 index 0000000000..5ab4bb06f9 --- /dev/null +++ b/phpgwapi/js/dhtmlxGantt/samples/common/dhtmlxMenu/dhtmlxmenu.js @@ -0,0 +1,2214 @@ +/** +* @desc: a constructor, creates a new dhtmlxMenu object, baseId defines a base object for the top menu level +* @param: baseId - id of the html element to which a menu will be attached, in case of a contextual menu - if specified, will used as a contextual zone +* @type: public +*/ +function dhtmlXMenuObject(baseId, skin) { + var main_self = this; + + this.addBaseIdAsContextZone = null; + + this.isDhtmlxMenuObject = true; + + // skin settings + this.skin = (skin != null ? skin : (typeof(dhtmlx) != "undefined" && typeof(dhtmlx.skin) == "string" ? dhtmlx.skin : "dhx_skyblue")); + this.imagePath = ""; + + // iframe + this._isIE6 = false; + if (_isIE) this._isIE6 = (window.XMLHttpRequest==null?true:false); + + if (baseId == null) { + this.base = document.body; + } else { + var baseObj = (typeof(baseId)=="string"?document.getElementById(baseId):baseId); + if (baseObj != null) { + this.base = baseObj; + if (!this.base.id) this.base.id = (new Date()).valueOf(); + while (this.base.childNodes.length > 0) { this.base.removeChild(this.base.childNodes[0]); } + this.base.className += " dhtmlxMenu_"+this.skin+"_Middle dir_left"; + this.base._autoSkinUpdate = true; + // preserv default oncontextmenu for future restorin in case of context menu + if (this.base.oncontextmenu) this.base._oldContextMenuHandler = this.base.oncontextmenu; + // + this.addBaseIdAsContextZone = this.base.id; + this.base.onselectstart = function(e) { e = e || event; e.returnValue = false; return false; } + this.base.oncontextmenu = function(e) { e = e || event; e.returnValue = false; return false; } + } else { + this.base = document.body; + } + } + // this.topId = topId; + this.topId = "dhxWebMenuTopId"; + + // + if (!this.extendedModule) { + // add notify for menu + var t = function(){alert(this.i18n.dhxmenuextalert);}; + var extMethods = new Array("setItemEnabled", "setItemDisabled", "isItemEnabled", "_changeItemState", "getItemText", "setItemText", + "loadFromHTML", "hideItem", "showItem", "isItemHidden", "_changeItemVisible", "setUserData", "getUserData", + "setOpenMode", "setWebModeTimeout", "enableDynamicLoading", "_updateLoaderIcon", "getItemImage", "setItemImage", + "clearItemImage", "setAutoShowMode", "setAutoHideMode", "setContextMenuHideAllMode", "getContextMenuHideAllMode", + "setVisibleArea", "setTooltip", "getTooltip", "setHotKey", "getHotKey", "setItemSelected", "setTopText", "setRTL", + "setAlign", "setHref", "clearHref", "getCircuit", "_clearAllSelectedSubItemsInPolygon", "_checkArrowsState", + "_addUpArrow", "_addDownArrow", "_removeUpArrow", "_removeDownArrow", "_isArrowExists", "_doScrollUp", "_doScrollDown", + "_countPolygonItems", "setOverflowHeight", "_getRadioImgObj", "_setRadioState", "_radioOnClickHandler", + "getRadioChecked", "setRadioChecked", "addRadioButton", "_getCheckboxState", "_setCheckboxState", "_readLevel", + "_updateCheckboxImage", "_checkboxOnClickHandler", "setCheckboxState", "getCheckboxState", "addCheckbox", "serialize"); + for (var q=0; q